我现在有一个空的LibGDX应用程序,什么也没有做。它不渲染任何内容,也不更新任何内容。它只是一个空白的屏幕。当我将应用程序部署到Android设备时,会出现可怕的内存消耗。在我的设备上运行应用程序时,使用DDMS创建以下堆转储:
最重要的内存使用是13.163 MB的1字节数组分配。这不是堆的一半吗?!
检查分配情况,发现没有分配那个大小的内容。
现在使用Eclipse MAT分析堆转储:
所以,在字节数组中高内存使用仍然来自安卓图形。我甚至没有画任何东西!是否有任何方法可以避免安卓图形部分占用堆的一半。这只会导致在实际发生事情时产生过多的垃圾回收,或者这很正常,我必须处理它吗?
注意:我正在三星Galaxy S4上运行此应用程序,使用libGDX版本1.4(或最新版本)。
更新:我已经发现14-13MB字节数组分配对于应用程序来说是正常的,但我仍然有问题。我的堆大小太小了。如果安卓图形占据了我的堆的一半,我就没有多余的空间用于有用的东西,垃圾回收器就会发狂。对于我使用旧版本libgdx创建的另一个应用程序(无可否认地编写得更差),堆大小为73 Mb。如何增加堆大小?我认为73 Mb相当大,您可以看到大部分都没有使用。以下是旧应用程序的堆统计数据: