内存解除分配:java环境的CPU开销是多少

时间:2017-05-30 00:52:57

标签: java android memory-management opengl-es stack

在实时3D应用程序中(在Android Studio和OpenGL ES中使用java编写,虽然这对于这个问题并不重要)但帧速率开始显着下降,因为每帧操作重载堆/ gc 使用线程安全的final对象,每个对象为大多数操作转换new个对象。 (例如,添加两个3d点一起创建了一个new点对象,丢弃旧点。)

Android的垃圾收集器很快就发现了年轻人堆中的巨大负担,但是在滞后之后暂时冻结了游戏。解决方案是使用编写为寄存器的不安全对象(操作修改原始点而不是转换新点)并将这些类似寄存器的类存储为父类中的字段。 GC将它们快速迁移到旧堆中,避免任何真正的GC开销,直到父级被回收。

问题是,应该将临时原语(例如int ifloat t也存储为“寄存器”以避免java环境每次取消分配?

该项目大约有50个类,每个类有大约5个临时值,每个4个字节。它们每帧重复使用大约十次,每秒30帧,或每分钟 17MB 。将它们作为寄存器(类字段)保留在堆栈上仅 1,000字节

这些原语是否应该存储为类对象以避免冗余重新分配?这个问题实际上是从堆栈中释放原语是否需要花费大量的CPU时间。

0 个答案:

没有答案