1. 程式人生 > >GC 演算法,永久代物件如何 GC , GC 有環怎麼處理

GC 演算法,永久代物件如何 GC , GC 有環怎麼處理

永久代GC的原因:
  1. 永久代空間已經滿了
  2. 呼叫了System.gc()
注意: 這種GC是full GC 堆空間也會一併被GC一次 GC有環怎麼處理 根搜尋演算法
什麼是根搜尋演算法
垃圾回收器從被稱為GC Roots的點開始遍歷遍歷物件,凡是可以達到的點都會標記為存活,堆中不可到達的物件都會標記成垃圾,然後被清理掉。 GC Roots有哪些

類,由系統類載入器載入的類。這些類從不會被解除安裝,它們可以通過靜態屬性的方式持有物件的引用。注意,一般情況下由自定義的類載入器載入的類不能成為GC Roots
執行緒,存活的執行緒
Java方法棧中的區域性變數或者引數
JNI方法棧中的區域性變數或者引數
JNI全域性引用
用做同步監控的物件
被JVM持有的物件,這些物件由於特殊的目的不被GC回收。這些物件可能是系統的類載入器,一些重要的異常處理類,一些為處理異常預留的物件,以及一些正在執行類載入的自定義的類載入器。但是具體有哪些前面提到的物件依賴於具體的JVM實現。
如何處理
基於引用物件遍歷的垃圾回收器可以處理迴圈引用,只要是涉及到的物件不能從GC Roots強引用可到達,垃圾回收器都會進行清理來釋放記憶體。