Mono for Android Memory Leaks

本文关键字:Leaks Memory Android for Mono | 更新日期: 2023-09-27 18:31:57

我在Android的Mono中的垃圾收集器有问题,我正在研究它,并说我必须手动放置GC。Collect() 在每个 OnDestroy() 方法中,以便释放 im 不使用的对象,我也尝试使用 Dispose for Java.Lang.Objects,但该应用程序仍在消耗和增加内存。我该如何解决?

Mono for Android Memory Leaks

主要问题:这是一个实际问题吗?垃圾回收器本质上是不确定的,因此内存使用会有很大差异。这不一定是问题;这只是事情的一部分。如果您经常用完全局引用或耗尽进程堆,那么这是一个问题。如果您只是看到 gref 增加,但在自然发生集合时它们会减少,那么可能不值得担心。

如果这是一个问题,我们需要具体说明问题是什么。例如,位图实例很容易耗尽内存,而位图的解决方案不一定适用于所有内容。

若要获取详细信息,可以启用全局引用消息以查看何时创建和销毁全局引用。

此外,我们还在不断更新 GC 启发式方法。适用于 Android 4.1.0 的 Mono 引入了一项更改,一旦我们达到平台最大 gref 值的 80%(模拟器上的 1800 gref)的 gref 阈值,就会自动调用GC.Collet()。这应该消除了OnDestroy()调用GC.Collect()的大部分需求,尽管(一如既往)GC可能会在"不合时宜的时刻"启动,因此无论如何,明确GC.Collect()可能是可取的。