如何删除java中的所有对象指针

Ski*_*kip 11 java

在Java中有一种优雅的方法可以将所有现有的对象指针设置为null吗?我希望删除一个对象,但它在几个地方注册了一个事件监听器.

Mic*_*jer 8

没有优雅的方式.不要试图这样做,否则你最终将难以维护代码.


sbl*_*ndy 8

你可以看看参考文献.如果使用引用引用该类,则在删除所有常规引用时,它不会阻止对象被垃圾回收.Reference当收集器确定要收集哪些对象时,类所持有的引用不计算在内.当然,听众必须正确处理参考突然消失.只要你需要上课,你就必须确保有东西保持定期参考.

查看此主题以获得有关软引用和弱引用之间差异的讨论.Java中的软引用和弱引用有什么区别?


Mic*_*rry 5

没有明确,没有.这有一个很好的理由 - 它不是垃圾收集在Java中的工作方式!

如果你真的想这样做(虽然我主要是出于学术目的而这么说,我强烈建议不要这样做)我能想到的最佳方法可能是在WeakReferences中包含对象的所有引用,并传递那些周围,​​只是保持对你的对象的一个​​强引用.如果将该强引用设置为null,则对该对象的所有弱引用都有资格进行垃圾回收.

当然,您需要注意,只要硬引用设置为null,WeakReferences就可以随时随机消失.因此,您需要确保使用它们的所有代码都已准备就绪.

也就是说,这条路线几乎不是最好的路线,并且会使你的代码难以维护!确保它们全部被释放,因为它们很好地超出范围将是更好的替代方案,并且如果其余代码足够整洁则不应该很难.