android模拟器是否有最大堆大小 - 或者为什么我总是得到GC_CONCURRENT?

时间:2012-08-28 08:26:00

标签: android android-emulator

我创建了一个基于Android 2.3.3的新的Android模拟器,具有512MB RAM和32/64/128/256/512堆空间。

但是我在尝试使用adb install安装软件包时仍然遇到同样的问题:

D/dalvikvm(  341): GC_CONCURRENT freed 429K, 41% free 3445K/5767K,
external 716K/1038K, paused 5ms+2ms

我得到这个每秒两次,模拟器耗尽了所有系统资源(CPU和RAM)。 那么堆分配中是否存在错误?或者我需要将值设置为像65535这样非常高的值?这个Logoutput似乎只在我尝试安装软件包时启动。

编辑:我会更明确地指出它: 我在vm.heapSize的config.ini文件中输入的值无关紧要,无论如何我从上面的GC消息中得到5767K的相同内存值。 所以这真是一个模拟器的错误! 而且我没有编程任何东西,我只需要我的模拟器启动并运行!

2 个答案:

答案 0 :(得分:0)

这不是你得到的错误。 android正在按照要求收集垃圾数据。有关详细信息,请参阅this链接。

谢谢。

答案 1 :(得分:0)

我认为你理解的东西有点不对 - 5767K数量是堆的当前大小,而不是你正在改变的堆的最大大小。

Android GC非常具有侵略性 - 即在创建新对象时,GC通常总是倾向于清理旧对象以释放空间而不是增加堆大小,这是您在此处看到的行为。无论你设置最大堆的大小是什么,你都不会做你正在做的事情,因为在这种情况下GC总是能够释放旧内存,所以这就是它将要做的。

尝试编写一个不断分配Bitmap的程序(并确保保留对您创建的所有Bitmap的引用,以便GC无法收集它们)并查看堆的大小然后

设备上的GC可能稍微不那么激进,但可能会进行类似调整。