我正在寻找一种方法来删除java中的对象,使其符合gc的条件。我有一个java类,它需要调用delete()方法。
public class SomeObj {
// some implementation stuff
//...
void delete() {
//remove yourself from some lists in the program
//...
this = null; // <- this line is illegal
//delete this; <- if I was in C++, I could do this
}
}
我该怎么做?显然,我将不得不重构我的代码,因为这闻起来像是糟糕的设计。
2条答案
按热度按时间uqjltbpv1#
你不需要(也不应该有)一个“析构函数”。一旦没有其他对象引用有问题的对象,它就有资格进行垃圾收集,垃圾收集器会在认为合适时将其删除。
relj7zay2#
不管是好是坏,java是一种在垃圾收集环境中运行的语言。对象在应用程序中存在的时间越长,就越可以通过引用访问它。一旦它不再可访问——当没有其他对象持有对它的引用时——就应用程序而言,它将被“删除”。
对象在堆中仍然有一些余生是垃圾收集器的问题,而不是应用程序的问题。依赖于能够控制没有引用的对象的存在的应用程序在某种逻辑意义上被破坏。
想要将未引用的对象从堆中推出来的通常的、半合法的原因是为了节省堆空间。有很多次,很多次,当我知道一个对象是真正完成了比垃圾收集器可以。用方法范围存储临时结果的对象就是一个很好的例子。我主要是一个c和c++开发人员,我真的很想在上面找到一个方法
java.lang.Object
打电话ImDoneWithYouNow()
. 遗憾的是,它并不存在,我们必须依靠gc实现来管理内存。