我是Android开发的新手,我正在努力了解这个Garbage Collection
是如何工作的,但是我需要亲自给出一个明确的解释。
我的应用正在与服务器来回做一些大型事务。当我从一个活动切换到另一个活动时,我不断在我的控制台中收到以下消息:
GC_MINOR: (Nursery full) pause 2.77ms, total 2.95ms, bridge 11.82ms promoted 128K major 2640K los 4441K
当然,ms时间每次都不同,但它发生了很多!
我读了它here并在我的项目中创建了 environment.txt 文件,其中包含以下几行:
MONO_GC_PARAMS=nursery-size=1024m
MONO_GC_PARAMS=soft-heap-limit=64m
我只是在nursery-size
和soft-heap-limit
测试不同的值,但它根本没用。
现在,当我从一个活动转到另一个活动时,应用程序运行速度非常慢
有人可以详细解释并给我一些选择吗?
谢谢。
答案 0 :(得分:4)
垃圾收集在堆的不同部分工作
不同的JVM(Hotspot,IBM等)有所不同 一般幼儿园的规模低于Tenured(幼儿园< Tenured) 防爆。在2 GB的堆空间中,Nusery的范围可以是128-512,而剩余的将是Tenured。
JVM将始终妥善管理托儿所部分。此部分大部分时间用于创建新对象,因为此部分的大小较低GC操作(压缩,GC集合)快速且调整良好。
当苗圃中的物体长大或活着超过特定时限(长寿命物体)时,使用终身部分。他们在Tenured中维护。这是更大的内存块,因此GC操作更慢。
幼儿园的停顿通常都很小,当你不断面对它时不应该产生很大的影响,那就是问题的迹象。在调整托儿所的大小时,请记住它不应超过终身教职。大小与GC操作时间成正比。
在你的情况下,你应该看看,