Android:当一个活动被销毁时,设置引用null有什么好处吗?
由于垃圾收集器使用标记扫描算法: 实际的GC是使用标记扫描算法完成的。这已经完成了 使用位向量跟踪最初可访问的对象 将根对象标记为可访问。然后,GC对数据进行扫描 堆中具有地址顺序标记的对象。对于每个可到达的 它扫过的对象标记所有可从该对象访问的对象 如可及。如果新对象的地址较低,则会将其添加到 工作队列。初始扫描后,工作队列将被删除 因此,它将经过每个引用根的对象,并收集每个其他对象。在活动上放置对null的引用是否有用 穿上onDestroy我想这没有好处,对吗? 在“繁重”活动的Android:当一个活动被销毁时,设置引用null有什么好处吗?,android,garbage-collection,Android,Garbage Collection,由于垃圾收集器使用标记扫描算法: 实际的GC是使用标记扫描算法完成的。这已经完成了 使用位向量跟踪最初可访问的对象 将根对象标记为可访问。然后,GC对数据进行扫描 堆中具有地址顺序标记的对象。对于每个可到达的 它扫过的对象标记所有可从该对象访问的对象 如可及。如果新对象的地址较低,则会将其添加到 工作队列。初始扫描后,工作队列将被删除 因此,它将经过每个引用根的对象,并收集每个其他对象。在活动上放置对null的引用是否有用 穿上onDestroy我想这没有好处,对吗? 在“繁重”活动的onPau
onPause
(验证isFinishing
)上,将它们设为null怎么样。这是否有助于更快地收集资源
因此,它将经过每个引用根的对象,并收集每个其他对象。在活动上放置对null的引用是否有用
对。如果其静态
穿上onDestroy我想这没有好处,对吗
我想说,这是可以忽略的,因此毫无意义,因为活动本身在瞬间是无根的
…在“繁重”活动中暂停时将其设置为null怎么样。这是否有助于更快地收集资源
如果一个对象没有GC根,它就有资格使用GCOnPause
发生在onDestroy之前的某个时间点(取决于执行情况,这可能是任何时间范围),对上述问题也适用
但是您不想这样做,因为您的活动可能会在暂停后回到前台,并且您必须再次分配所有“重”对象-这很可能会给最终用户带来糟糕的体验。通过将任何对象设为null我们间接告诉垃圾收集不需要使用该对象(使其符合垃圾收集的条件)您可以检查以下链接,它传达了您所寻找的内容,为什么不在系统确实表示需要时从其进程中删除不需要的内存?请参阅
Activity#onstrimemory
@pskink,它与用例不完全相同。我说的是一个用例,当你有一个很重的内存活动,并且当你出于任何原因(移动到另一个,旋转…)破坏它时,你希望它尽快成为GC。如果你需要一些东西立即成为GCd,那么可能值得一看为什么你首先需要这么多内存。这几乎总是与位图相关的,如果是这样的话,请查看@Dori这不是我当前的问题,它只是一个理论用例,我发现了解最佳实践非常有用。。为了避免出现这样的问题,首先:-)我说的是在验证isFinishing方法之后在onPause上执行此操作。所以这个案例不适用。你在问题中没有提到:p