ᴛʜᴇ*_*ᴛᴇʟ 2 mono performance android garbage-collection xamarin
我是 android 开发的新手,我试图了解它是如何Garbage Collection工作的,但我需要第一手的人的明确解释。
我的应用程序正在与服务器来回进行一些大型事务。当我从一个活动切换到另一个活动时,我经常在控制台中收到以下消息:
GC_MINOR: (Nursery full) pause 2.77ms, total 2.95ms, bridge 11.82ms promoted 128K major 2640K los 4441K
Run Code Online (Sandbox Code Playgroud)
当然,ms 计时每次都不同,但它发生了很多!
我在这里阅读并使用以下几行在我的项目中创建了environment.txt文件:
MONO_GC_PARAMS=nursery-size=1024m
MONO_GC_PARAMS=soft-heap-limit=64m
Run Code Online (Sandbox Code Playgroud)
我只是在测试不同的价值观nursery-size和soft-heap-limit,但它在所有没有帮助。
现在,当我从一项活动转到另一项活动时,应用程序运行速度非常慢。
有人可以详细解释一下并向我提供一些选择吗?
谢谢你。
垃圾收集适用于堆的不同部分
这在不同的 JVM(Hotspot、IBM 等)上有所不同。通常 Nursery 大小低于 Tenured (Nursery << Tenured) Ex。在 2 GB 的堆空间中,Nusery 的范围是 128-512,剩余的将是 Tenured。
苗圃部分将始终由 JVM 很好地管理。这部分大部分时间用于创建新对象,分配因为这部分的大小较小 GC 操作(压缩、GC 收集)速度快且调优。
当 Nursery 中的对象变大或存活超过特定时间限制(长寿对象)时,将使用 Tenured 部分。它们在 Tenured 中维护。这是更大的内存块,因此 GC 操作更慢。
托儿所的停顿通常很小,当您连续面对它时应该不会产生太大影响,那么这就是问题的迹象。在调整托儿所的大小时,请记住它不应超过 Tenured。大小与 GC 操作时间成正比。
在你的情况下,你应该看看,
| 归档时间: |
|
| 查看次数: |
3501 次 |
| 最近记录: |