Java:JVM垃圾回收機制
阿新 • • 發佈:2018-11-27
JVM垃圾回收機制
提到Java垃圾回收機制就不得不提到一個方法: system.gc() 用於呼叫垃圾收集器,在呼叫時垃圾收集器將執行以回收未使用的記憶體空間,它將嘗試釋放被丟棄物件所佔用的空間。
作為程式設計師有必要了解gc方法,這也是在面試中經常會被問及的問題: 我們從三個方面來理解gc: 1.JVM如何確定哪些空間能被回收? 2.JVM會在什麼時候進行垃圾清除的動作? 3.JVM如何清除垃圾的?
1.JVM如何確定哪些空間能被回收 通過兩個演算法:
2.JVM會在什麼時候進行垃圾清除的動作
3.JVM如何清除垃圾的? 通過四個演算法:
缺點:會產生
空間碎片
,資源浪費
提到Java垃圾回收機制就不得不提到一個方法: system.gc() 用於呼叫垃圾收集器,在呼叫時垃圾收集器將執行以回收未使用的記憶體空間,它將嘗試釋放被丟棄物件所佔用的空間。
作為程式設計師有必要了解gc方法,這也是在面試中經常會被問及的問題: 我們從三個方面來理解gc: 1.JVM如何確定哪些空間能被回收? 2.JVM會在什麼時候進行垃圾清除的動作? 3.JVM如何清除垃圾的?
1.JVM如何確定哪些空間能被回收 通過兩個演算法:
- 引用計數演算法:
簡單的來說就是判斷物件的引用數量。實現方式:給物件共新增一個引用計數器,每當有引用對他進行引用時,計數器的值就加
- 可達性分析演算法:
因為引用計數法的缺點有引入了可達性分析演算法,通過判斷物件的引用鏈是否可達來決定物件是否可以被回收。可達性分析演算法是從離散數學中的圖論引入的,程式把所有的引用關係看作一張圖,通過一系列的名為
2.JVM會在什麼時候進行垃圾清除的動作
- 會在cpu空閒的時候自動進行回收
- 在堆記憶體儲存滿了之後
- 主動呼叫System.gc()後嘗試進行回收(不一定成功)
3.JVM如何清除垃圾的? 通過四個演算法:
- 標記-清除演算法:
- 複製演算法
- 標記-整理演算法
- 分代收集演算法