安卓中的垃圾收集器

2022-08-31 09:30:08

我看到许多Android答案建议在某些情况下调用垃圾回收器。

在执行内存密集型操作之前,在 Android 中请求垃圾回收器是否是一种好的做法?如果没有,我应该只在遇到错误时才调用它吗?OutOfMemory

在诉诸垃圾回收器之前,我是否应该使用其他内容?


答案 1

对于 3.0 蜂窝之前的版本:是的,请调用System.gc()

我试图创建位图,但总是得到“VM内存不足错误”。但是,当我第一次打电话时,没关系。System.gc()

创建位图时,Android 通常会因内存不足错误而失败,并且不会先尝试垃圾回收。因此,调用 ,并且您有足够的内存来创建位图。System.gc()

如果创建对象,我认为如果需要,将自动调用,但不是创建位图。它只是失败了。System.gc

因此,我建议在创建位图之前手动调用。System.gc()


答案 2

一般来说,在存在垃圾回收器的情况下,手动调用GC从来都不是一个好的做法。GC是围绕启发式算法组织的,这些算法在留给自己的设备时效果最好。手动调用 GC 通常会降低性能。

有时,在一些相对罕见的情况下,人们可能会发现特定的GC出错了,然后手动调用GC可能会在性能方面改进事情。这是因为实际上不可能实现一个“完美”的GC,它将在所有情况下以最佳方式管理内存。这种情况很难预测,并且取决于许多微妙的实现细节。“好的做法”是让GC自己运行;手动调用GC是例外情况,只有在适当目睹实际性能问题之后,才应设想这种情况。