Java垃圾收集基礎
垃圾收集算法
引用計數法
問題:存在循環依賴導致無法回收問題
標記清除法
實現方式:通過根節點標記所有可達對象,清除所有不可達對象。
問題:出現大量空間碎片
複製算法
複製算法適用於新生代,因爲在新生代垃圾對象會多於存活對象,複製效果明顯。Hotspot虛擬機在新生代使用的就是複製算法(eden:from:to=8:1:1)
對象先在eden區創建,垃圾回收時拷貝到from 或to區域,這兩個空間可相互替代。
標記-壓縮算法
原理:將所有存貨對象壓縮到內存,然後清理邊界外的所有空間,避免碎片又不需要兩塊相同的內存空間。
增量算法
原理:通過分多次回收,減少系統停頓時間。缺點是涉及到線程切換和上下文切換的消耗,垃圾回收的總體成本上升。吞吐量下降。
(分代思想指不同的內存區域使用不同的垃圾回收算法)
- 評價垃圾回收期好壞的指標:
-
吞吐量
- 垃圾回收器負載
- 停頓時間
- 垃圾回收效率
- 反應時間
- 堆分配