由于垃圾收集器使用Mark-Sweep算法:
使用Mark-Sweep算法完成实际的GC。这个完成了 使用位向量来跟踪最初可以访问的对象 将根对象标记为可达。然后GC扫描了 地址顺序标记中堆中的对象。每个可达到的 扫过它的对象标记从该对象可到达的所有对象 可达。如果新对象的地址较低,则将其添加到a 工作队列。初始扫描后,工作队列是
所以它会传递每个对root引用的对象,并且每次收集其他对象时是否有任何情况下对一个Activity引用null是有用的?
加上onDestroy
我认为没有正确的优势?
如何将onPause
(在验证isFinishing
之后)放在" heavy"活动。是否有助于更快地收集资源?
答案 0 :(得分:3)
所以它会传递每个对root引用的对象,并且每次收集其他对象时是否有任何情况在对一个Activity上引用null是有用的?
是。如果是static
穿上onDestroy我认为没有正确的优势?
我认为这是微不足道的,因此毫无意义,因为活动将暂时不再是GC-root-based
...如何在ontause上将它们作为null放在“重”活动上。是否有助于更快地收集资源?
如果某个对象没有GC根,则符合GC条件。 OnPause
发生在onDestroy
之前的某个时间点(取决于执行情况,这可能任何时间范围)ergo 是以上问题。
但是!您不希望这样做,因为您的活动可能会在onPause
之后回到前台并且您将不得不再次分配所有'重'对象 - 这将是很可能最终会给最终用户带来糟糕的体验。
答案 1 :(得分:0)
通过制作任何 object = null ,我们间接告知垃圾收集不需要使用该对象(使其符合垃圾收集条件)