物体能破坏自己吗? (JAVA)

时间:2011-12-13 18:50:00

标签: java garbage-collection

我们都知道JRE会破坏任何无法再引用的对象。但对象有没有办法明确地摧毁自己?或者是否禁止避免悬空指针问题?

天真地,我想说this = null,但编译器不允许这样做(this可能不是真正的变量)。

相反,通过维护this的私人副本,或者其他方式,对象是否有办法强制让自己保持活力?

4 个答案:

答案 0 :(得分:4)

没有。事实上,你不能强行销毁任何东西。即使您没有对某个对象的引用,它也会继续存在于内存中,直到垃圾收集器决定运行并收集它为止。

您可以通过保持对象的静态引用来保持对象的活动。

答案 1 :(得分:2)

忽略学术方面,您无法确保在Java中物理销毁对象(或大多数其他垃圾收集语言,如C#)。这是因为销毁对象很昂贵(部分原因是内存压缩阶段),所以关键是尽可能少地运行它。

然而,这说,你可以强制一个对象使用一次性模式释放它分配的资源,其中有问题的对象暴露了一个公共方法来释放资源,你可以随时调用它(或者在终结器中自动调用它)。它需要更多的簿记,但如果确实需要它可以完成工作。

答案 2 :(得分:1)

不,你不能破坏一个物体。

你可以做的是拥有一个保存实际对象的包装器对象。如果确保没有其他人具有对该对象的引用,则删除引用(例如,通过将其设置为null)将使该对象符合垃圾收集器的条件。请注意,由GC来决定何时以及是否实际收集垃圾。

为了保持对象存活,您需要确保有对它的引用。一种方法是从对象的类中获得静态引用。只要没有人卸载该类,您的对象就会留在内存中。

答案 3 :(得分:0)

正如你所说,我认为禁止避免悬挂指针问题。 Java内存模型基于Stack和Heap模型,如果一个对象破坏了自己,那么堆栈(或)其他指针会引用哪个对象?

相关问题