【发布时间】:2014-12-25 16:38:11
【问题描述】:
我目前有一个空白的LibGDX 应用程序,它什么都不做。它不渲染任何东西,也不更新任何东西。它只是一个空的Screen。当我将应用程序部署到 android 时,我会遇到一些可怕的内存消耗。当应用程序在我的设备上运行时,我使用 DDMS 创建了以下堆转储:
内存最重要的用途是 13.163 MB 的 1 字节数组分配。这不是堆的一半吗?!
我检查了分配,发现没有任何东西指向那个大小的分配:
现在我使用 Eclipse MAT 分析堆转储:
因此,内存的高使用率仍然来自 byte[] 数组。 进一步分析 byte[] 部分,我想出了这个:
我现在看到巨大的 byte[] 分配来自 android 图形。我什至什么都不会画!有什么办法可以避免这个应用程序的 android 图形部分占用一半的堆。这只会导致在事情实际发生时发生过多的垃圾收集,或者这是正常的,我只需要处理它?
注意:我在带有 libGDX 1.4 版(或任何最新版本)的三星 Galaxy S4 上运行它
更新:我没有发现 14-13MB 字节数组分配对于应用程序来说是正常的,但我仍然有问题。我的堆大小太小。如果 android 图形占据了我堆的一半,我就没有什么空间可以容纳任何有用的东西了,垃圾收集器就会发疯。在另一个应用程序上,我使用旧版本的 libgdx(不可否认的编码更差的应用程序)创建了另一个应用程序,堆大小为 73 Mb。如何增加堆大小?我认为 73 Mb 相当大,正如您所见,其中大部分都没有使用。以下是旧应用程序的堆统计信息:
【问题讨论】:
-
您是否尝试分配一些垃圾来尝试超过第一个堆大小较小的应用程序的堆大小?如果没有,请这样做。完成后它会自动增加堆大小吗?
标签: java android memory libgdx heap-memory