如何使对象有资格从对象内部进行垃圾回收?
How to make an object eligible for garbage collection from inside the object?
我正在寻找一种方法来删除 Java 中的对象,使其符合 GC 的条件。我有一个 Java class 需要调用它的 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
}
}
我应该怎么做?显然,我将不得不重构我的代码,因为这闻起来像糟糕的设计。
您不需要(实际上不应该)“析构函数”。一旦没有其他对象引用相关对象,它就有资格进行垃圾收集,并在垃圾收集器认为合适时将其删除。
无论好坏,Java 是一种在 garbage-collecting 环境中运行的语言。一个对象在应用程序中存在某种形式,只要它可以通过引用访问。一旦它不再可访问——当没有其他对象持有对它的引用时——就应用程序而言,它被“删除”。
对象在堆中仍有一些 after-life 是垃圾收集器的事情,而不是应用程序的事情。依赖于能够控制没有引用的对象的存在的应用程序在某种逻辑意义上被破坏了。
通常,semi-legitimate 想要将未引用的对象从堆中移出的通常原因是为了保护堆 space。有很多很多次我知道什么时候一个对象真的比垃圾收集器更好地完成了。存储具有方法作用域的临时结果的对象就是一个很好的例子。我主要是一名 C 和 C++ 开发人员,我真的想要一个名为 ImDoneWithYouNow()
的 java.lang.Object
方法。遗憾的是,它不存在,我们必须依靠 GC 实现来处理内存管理。
我正在寻找一种方法来删除 Java 中的对象,使其符合 GC 的条件。我有一个 Java class 需要调用它的 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
}
}
我应该怎么做?显然,我将不得不重构我的代码,因为这闻起来像糟糕的设计。
您不需要(实际上不应该)“析构函数”。一旦没有其他对象引用相关对象,它就有资格进行垃圾收集,并在垃圾收集器认为合适时将其删除。
无论好坏,Java 是一种在 garbage-collecting 环境中运行的语言。一个对象在应用程序中存在某种形式,只要它可以通过引用访问。一旦它不再可访问——当没有其他对象持有对它的引用时——就应用程序而言,它被“删除”。
对象在堆中仍有一些 after-life 是垃圾收集器的事情,而不是应用程序的事情。依赖于能够控制没有引用的对象的存在的应用程序在某种逻辑意义上被破坏了。
通常,semi-legitimate 想要将未引用的对象从堆中移出的通常原因是为了保护堆 space。有很多很多次我知道什么时候一个对象真的比垃圾收集器更好地完成了。存储具有方法作用域的临时结果的对象就是一个很好的例子。我主要是一名 C 和 C++ 开发人员,我真的想要一个名为 ImDoneWithYouNow()
的 java.lang.Object
方法。遗憾的是,它不存在,我们必须依靠 GC 实现来处理内存管理。