我理解:
在将对象的静态引用显式设置为null时,幕后实际发生了什么? 最初存储在堆中的原始对象会发生什么?
答案 0 :(得分:1)
从对象的角度来看,对它的引用是来自静态字段还是来自其他地方并不重要。一旦没有更多的引用它就有资格进行垃圾收集。实际获取垃圾时,取决于它所在的对象池,以及正在使用的垃圾收集策略。
答案 1 :(得分:1)
“幕后”这两点之间没有显着差异。
不同的效果仅仅归因于参考文献本身的生命周期。一旦局部变量在方法中不再使用,或者一旦该方法退出,它就会超出范围。静态字段只要在类中存在就会保持存在,这在很多情况下与应用程序生存期一样长。
这意味着在大多数情况下,本地引用不太可能显着延长对象的生命周期(尽管有例外),而静态引用则会在对象本身短缺的情况下进行。
答案 2 :(得分:1)
取消本地引用对可读性更有用
如果你的意思是它使代码混乱并使其可读性降低,那么我同意。
......它不会产生真正的影响
我是一些罕见的情况,它可以有所作为。但是不要这样做,除非你完全确定它很重要(如果你觉得每百种方法不止一次这样做,那可能就错了)。
在将对象的静态引用显式设置为null时,幕后实际发生了什么?
没什么特别的。如果这是最后一个引用,则该对象符合GC的条件。但这与其他所有对象/引用相同。
最初存储在堆中的原始对象会发生什么?
什么都没有,因为它只是引用无效的引用。一天收集对象(如果它是最后一个引用),但是再次:没什么特别的。