gpt4 book ai didi

java - 即使 Android 上的内存非常低,垃圾收集器也不会运行

转载 作者:太空狗 更新时间:2023-10-29 14:00:01 25 4
gpt4 key购买 nike

我正在开发一款使用 TMX 平铺 map 的 Android 游戏。在加载 map 时,应用程序的内存使用量上升到超过 100MB。加载每个 map 后,我提示垃圾收集器运行(使用 System.gc()),毫不奇怪,使用的内存量根本没有减少。我知道调用 System.gc() 方法并不能确保垃圾收集器运行,但我希望它考虑到我设备上的最大 VM 堆大小约为 130MB(低至在其他较旧的设备上为 16-20MB)。正如人们所预料的那样,在此之后加载另一个 map 时,应用程序会抛出内存不足错误并崩溃。

但是,我可以确保我的代码没有内存泄漏或未释放的资源,因为当我使用 Eclipse 中的 DDMS 堆选项卡(“Cause GC”按钮)强制 GC 运行时,应用程序的内存使用率回落到大约15-16MB。

有什么我遗漏的可能导致在加载 map 时保留超过 100MB 的内存使用量吗?

最佳答案

最好能实际了解一下您是如何处理图像加载的。

我假设您正在使用 Bitmap 类来处理它们。您必须记住,这个类在幕后有点特别。它实际上是围绕一个将位图表示为字节数组的 native 实现进行包装。在这种情况下,垃圾收集不会帮助您(此外,依赖在特定时间点执行的 GC 是一种不好的做法)。我认为您应该仔细看看 Bitmap 类的 recycle() 方法。它释放由位图实例占用的 native 对象。

Javadoc 声明这是一个高级调用,通常不应手动触发,因为如果没有更多对 Bitmap 实例的引用,GC 将执行此操作,但在我的在 Android 中处理图像(以及游戏开发)的经验,有时它会在这些情况下帮助您。

我可以给你的另一个建议是大量分析你的应用程序的堆——也许 map 不是唯一的罪魁祸首。我会尝试跟踪 DDMS 中的内存分配并检查那里是否存在潜在的危险信号。

关于java - 即使 Android 上的内存非常低,垃圾收集器也不会运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36402827/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com