我创建了一个基于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
的相同内存值。
所以这真是一个模拟器的错误!
而且我没有编程任何东西,我只需要我的模拟器启动并运行!
答案 0 :(得分:0)
这不是你得到的错误。 android正在按照要求收集垃圾数据。有关详细信息,请参阅this链接。
谢谢。
答案 1 :(得分:0)
我认为你理解的东西有点不对 - 5767K
数量是堆的当前大小,而不是你正在改变的堆的最大大小。
Android GC非常具有侵略性 - 即在创建新对象时,GC通常总是倾向于清理旧对象以释放空间而不是增加堆大小,这是您在此处看到的行为。无论你设置最大堆的大小是什么,你都不会做你正在做的事情,因为在这种情况下GC总是能够释放旧内存,所以这就是它将要做的。
尝试编写一个不断分配Bitmap
的程序(并确保保留对您创建的所有Bitmap
的引用,以便GC无法收集它们)并查看堆的大小然后
设备上的GC可能稍微不那么激进,但可能会进行类似调整。