Howto delete all object pointer in java
Java中有一种优雅的方法来将所有现有的对象指针设置为NULL吗?我希望删除一个对象,但它在多个地方注册了一个事件侦听器。
你可以看看参考文献。如果使用引用引用该类,则在删除所有常规引用时,它不会阻止对对象进行垃圾收集。当收集器确定要收集哪些对象时,
查看此线程,讨论软引用和弱引用之间的区别。Java中的软引用和弱引用有什么区别?
没有优雅的方式。不要尝试这样做,否则最终会遇到难以维护的代码。
不明确,没有,这是一个很好的理由-这不是垃圾回收的方式在Java中工作!
如果你真的想这样做(虽然我说这主要是为了学术目的,但我强烈建议不要这样做),我能想到的最好的方法是用weakreferences来包装所有对对象的引用,并传递它们,只需抓住一个对对象的强引用。如果将该强引用设置为空,则对该对象的所有弱引用都将符合垃圾收集的条件。
当然,您需要知道,一旦硬引用设置为空,weakreferences就会在之后的任何时候随机消失。所以您需要确保使用它们的所有代码都准备好处理这一点。
也就是说,这条路线几乎不是最好的,而且会使代码更难维护!确保它们都在很好地超出范围的情况下发布,这是更好的选择,如果其余代码足够整洁,也不难做到。
几点注意事项
不能控制Java中的对象删除。这是垃圾收集器的工作。您可以指示GC执行垃圾收集,但这并不保证对象实际上会被删除。
实际上,当无法再访问对象时,对象会被删除。如果删除了对它的所有引用,那么您将无法再访问它。
用Java,你不能用引用来实现这一点。您可以创建一个确定性的