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

Howto delete all object pointer in java

Java中有一种优雅的方法来将所有现有的对象指针设置为NULL吗?我希望删除一个对象,但它在多个地方注册了一个事件侦听器。


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

查看此线程,讨论软引用和弱引用之间的区别。Java中的软引用和弱引用有什么区别?


没有优雅的方式。不要尝试这样做,否则最终会遇到难以维护的代码。


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

如果你真的想这样做(虽然我说这主要是为了学术目的,但我强烈建议不要这样做),我能想到的最好的方法是用weakreferences来包装所有对对象的引用,并传递它们,只需抓住一个对对象的强引用。如果将该强引用设置为空,则对该对象的所有弱引用都将符合垃圾收集的条件。

当然,您需要知道,一旦硬引用设置为空,weakreferences就会在之后的任何时候随机消失。所以您需要确保使用它们的所有代码都准备好处理这一点。

也就是说,这条路线几乎不是最好的,而且会使代码更难维护!确保它们都在很好地超出范围的情况下发布,这是更好的选择,如果其余代码足够整洁,也不难做到。


几点注意事项

  • 不能控制Java中的对象删除。这是垃圾收集器的工作。您可以指示GC执行垃圾收集,但这并不保证对象实际上会被删除。

  • 实际上,当无法再访问对象时,对象会被删除。如果删除了对它的所有引用,那么您将无法再访问它。


  • 用Java,你不能用引用来实现这一点。您可以创建一个确定性的Dispose方法,它清空引用中的值,比如.NET的IDisposable