Java如何判斷對象已死?

Java堆中幾乎存放着Java世界中全部的對象實例,垃圾收集器在對堆進行回收前,第一件事情就是要肯定這些對象有哪些仍是存活着,哪些已經死去。java

1:引用計數法:最主要由於該算法沒法解決對象之間的相互循環引用的問題,Java語言沒有選用引用計數算,這裏很少作介紹算法

2:根搜索算法(GC Roots),Java實際上使用的是GC Roots算法。在Java語言裏,可做爲GC Roots的對象包括下面幾種:對象

  • 虛擬機棧(棧幀中的本地變量表)中的引用的對象
  • 方法區中的靜態屬性引用的對象
  • 方法區中的常量引用的對象
  • 本地方法棧中JNI(通常說的Native方法)的引用的對象

那麼怎麼判斷一個「無用的類」呢?,須要同時知足下面三個條件才能算是「無用的類」虛擬機

  • 該類全部的實例都已經被回收,也就是Java堆中不存在該類的任何實例。
  • 加載該類的ClassLoader已經被回收
  • 該類對應的java.lang.Class對象沒有任何地方被引用,沒法再任何地方經過放射訪問該類的方法
相關文章
相關標籤/搜索