0

我试图理解为什么 android GC 的行为方式,

  • 虚拟机堆设置为 512 MB
  • Runtime.getRuntime maxMemory为 512 MB
  • Runtime.getRuntime totalMemory为 13 MB
  • Runtime.getRuntime freeMemory是 3 MB

我总是在这些值的 +/- 2-3 MB 范围内。

我的代码是功能性的,所以我使用了很多对象,但我没有接近 512 MB,但我经常在我的 logcat 中看到 GC 调用,尤其是在紧密循环中。为什么不让堆增长?和小增量的 GC,而不是每次暂停我的应用程序 300 毫秒。

有什么办法让我对垃圾收集过程有更多的控制权(这不会是一个市场应用程序,我安装自定义 rom 没有问题。)除了股票答案是改变你的编码风格不要创建一个很多对象,因为我在真实设备上看到了类似的行为(当没有其他应用程序运行时,一台 1,2 ghz 的四核机器和 2 GB 内存,拥有一台功能如此强大但无法编码的机器有点烦人我喜欢的方式。)

4

1 回答 1

0

主要问题是应用程序在 VM 中运行,并且每个 VM 都有其限制。只要您不使用本机 (NDK),您就必须使用 VM 获得的少量 RAM。

我对安装自定义 rom 没有任何问题。

如果您想构建自己的 ROM(或搜索具有可配置设置的 ROM),请增加每个 VM 的大小并对此感到满意。

我的代码是功能性的,所以我使用了很多对象

好吧,“使用大量对象”和“使用大量生命周期短的对象”是有区别的。但因为你不想听到它...

于 2013-03-29T15:14:01.287 回答