我试图理解为什么 android GC 的行为方式,
- 虚拟机堆设置为 512 MB
Runtime.getRuntime maxMemory
为 512 MBRuntime.getRuntime totalMemory
为 13 MBRuntime.getRuntime freeMemory
是 3 MB
我总是在这些值的 +/- 2-3 MB 范围内。
我的代码是功能性的,所以我使用了很多对象,但我没有接近 512 MB,但我经常在我的 logcat 中看到 GC 调用,尤其是在紧密循环中。为什么不让堆增长?和小增量的 GC,而不是每次暂停我的应用程序 300 毫秒。
有什么办法让我对垃圾收集过程有更多的控制权(这不会是一个市场应用程序,我安装自定义 rom 没有问题。)除了股票答案是改变你的编码风格不要创建一个很多对象,因为我在真实设备上看到了类似的行为(当没有其他应用程序运行时,一台 1,2 ghz 的四核机器和 2 GB 内存,拥有一台功能如此强大但无法编码的机器有点烦人我喜欢的方式。)