簡體   English   中英

如何使對象有資格從對象內部進行垃圾回收?

[英]How to make an object eligible for garbage collection from inside the object?

我正在尋找一種在 Java 中刪除對象的方法,使其有資格進行 GC。 我有一個需要調用其 delete() 方法的 Java 類。

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 是一種運行在垃圾收集環境中的語言。 一個對象在應用程序中存在某種形式,因為它可以通過引用訪問。 一旦它不再可達——當沒有其他對象持有對它的引用時——就應用程序而言,它被“刪除”。

對象在堆中仍然有一些死后生命是垃圾收集器的問題,而不是應用程序的問題。 依賴於能夠控制沒有引用的對象的存在的應用程序在某種邏輯意義上被破壞了。

想要將未引用的對象從堆中移出的通常的、半合法的原因是為了節省堆空間。 有很多很多時候,我知道一個對象何時真的比垃圾收集器更好地完成了。 使用方法范圍存儲臨時結果的對象就是一個很好的例子。 我主要是一名 C 和 C++ 開發人員,我真的想要一個名為ImDoneWithYouNow() java.lang.Object方法。 遺憾的是,它不存在,我們必須依靠 GC 實現來處理內存管理。

你不需要(也不應該有)“析構函數”。 一旦沒有其他對象引用有問題的對象,它就有資格進行垃圾收集,並在垃圾收集器認為合適時將其刪除。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM