回覆列表
  • 1 # 軟體改變生活

    JAVA有自己的垃圾回收機制,具體題主可以到各大論壇檢視,很多高手前輩都有詳細說明。

    具體判斷是否物件是否被回收,用常規判斷null是不能判斷的。

    祝學習順利。

  • 2 # 小魚兒的夢囈

    判斷物件是否死亡是Java虛擬機器的工作,使用的是可達性分析演算法進行判斷的,當物件被判斷為死亡時,很快就會被GC清理回收。

    根搜尋演算法(GC Roots),Java實際上使用的是GC Roots演算法。在Java語言裡,可作為GCRoots的物件包括下面幾種:

    虛擬機器棧(棧幀中的本地變量表)中的引用的物件

    方法區中的靜態屬性引用的物件

    方法區中的常量引用的物件

    本地方法棧中JNI(一般說的Native方法)的引用的物件

    那麼怎麼判斷一個“無用的類”呢?,需要同時滿足下面三個條件才能算是“無用的類”

    該類所有的例項都已經被回收,也就是Java堆中不存在該類的任何例項。

    載入該類的ClassLoader已經被回收

    該類對應的java.lang.Class物件沒有任何地方被引用,無法再任何地方透過放射訪問該類的方法

  • 3 # 程式設計藝術思維

    其實這裡有兩種演算法實現:引用計數器法和可達性演算法。

    引用計數器法:

    給物件新增一個引用計數器,每當有一個地方引用它時,計數器就加1;當引用失效時,計數器就減1;任何時刻計數器為0的物件就是不在被使用的。

    優點: 實現簡單,判定效率高,在大部分情況下都是一個不錯的演算法。

    缺點: 無法解決物件迴圈引用的問題。

    可達性演算法:

    這個演算法的思想是透過一系列的”GC roots“ 的物件作為根節點,從這些節點開始向下搜尋,搜尋走過的路徑稱為”引用鏈“,當一個物件到GC Roots沒有任何一個引用鏈相連,則證明這個物件是不可用的。

  • 中秋節和大豐收的關聯?
  • 夏天游泳多久比較適宜呢?