Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android:当一个活动被销毁时,设置引用null有什么好处吗?_Android_Garbage Collection - Fatal编程技术网

Android:当一个活动被销毁时,设置引用null有什么好处吗?

Android:当一个活动被销毁时,设置引用null有什么好处吗?,android,garbage-collection,Android,Garbage Collection,由于垃圾收集器使用标记扫描算法: 实际的GC是使用标记扫描算法完成的。这已经完成了 使用位向量跟踪最初可访问的对象 将根对象标记为可访问。然后,GC对数据进行扫描 堆中具有地址顺序标记的对象。对于每个可到达的 它扫过的对象标记所有可从该对象访问的对象 如可及。如果新对象的地址较低,则会将其添加到 工作队列。初始扫描后,工作队列将被删除 因此,它将经过每个引用根的对象,并收集每个其他对象。在活动上放置对null的引用是否有用 穿上onDestroy我想这没有好处,对吗? 在“繁重”活动的onPau

由于垃圾收集器使用标记扫描算法:

实际的GC是使用标记扫描算法完成的。这已经完成了 使用位向量跟踪最初可访问的对象 将根对象标记为可访问。然后,GC对数据进行扫描 堆中具有地址顺序标记的对象。对于每个可到达的 它扫过的对象标记所有可从该对象访问的对象 如可及。如果新对象的地址较低,则会将其添加到 工作队列。初始扫描后,工作队列将被删除

因此,它将经过每个引用根的对象,并收集每个其他对象。在活动上放置对null的引用是否有用

穿上onDestroy我想这没有好处,对吗? 在“繁重”活动的
onPause
(验证
isFinishing
)上,将它们设为null怎么样。这是否有助于更快地收集资源

因此,它将经过每个引用根的对象,并收集每个其他对象。在活动上放置对null的引用是否有用

对。如果其
静态

穿上onDestroy我想这没有好处,对吗

我想说,这是可以忽略的,因此毫无意义,因为活动本身在瞬间是无根的

…在“繁重”活动中暂停时将其设置为null怎么样。这是否有助于更快地收集资源

如果一个对象没有GC根,它就有资格使用GC
OnPause
发生在onDestroy之前的某个时间点(取决于执行情况,这可能是任何时间范围),对上述问题也适用


但是您不想这样做,因为您的活动可能会在暂停后回到前台,并且您必须再次分配所有“重”对象-这很可能会给最终用户带来糟糕的体验。

通过将任何对象设为null我们间接告诉垃圾收集不需要使用该对象(使其符合垃圾收集的条件)

您可以检查以下链接,它传达了您所寻找的内容,为什么不在系统确实表示需要时从其进程中删除不需要的内存?请参阅
Activity#onstrimemory
@pskink,它与用例不完全相同。我说的是一个用例,当你有一个很重的内存活动,并且当你出于任何原因(移动到另一个,旋转…)破坏它时,你希望它尽快成为GC。如果你需要一些东西立即成为GCd,那么可能值得一看为什么你首先需要这么多内存。这几乎总是与位图相关的,如果是这样的话,请查看@Dori这不是我当前的问题,它只是一个理论用例,我发现了解最佳实践非常有用。。为了避免出现这样的问题,首先:-)我说的是在验证isFinishing方法之后在onPause上执行此操作。所以这个案例不适用。你在问题中没有提到:p