JVM運作模式
- Server (啟動慢,穩定後快)
- Client
年輕代常見的垃圾收集器
Serial收集器(複制算法)
單線程收集,進行垃圾收集時,必須暫停所有的工作線程
簡單高效,Cilent模式下預設的年輕代收集器
ParNew收集器(複制算法)
多線程收集,其餘行為和Serial一樣
單核執行效率不如Serial,再多核下執行才有優勢
Parallel Scavenge收集器(複制算法)
吞吐量 = 運作使用者代碼時間/(運作使用者代碼時間+垃圾收集時間)
比起關注使用者線程停頓時間,更關注系統吞吐量
在多核下執行才有優勢,Server模式下預設的年輕代收集器
老年代常見的收集器
Serial Old收集器(标記-整理算法)
單線程收集,進行垃圾收集時,必須暫停所有的工作線程
簡單高效,Cilent模式下預設的老年代收集器
Parallel Old收集器(标記整理算法)JDK6之後提供
比起關注使用者線程停頓時間,更關注系統吞吐量
CMS收集器(标記-清除算法)
初始化标記:stop-the-world
并發标記:并發追溯标記,程式不會停頓
并發預處理:查找執行并發标記階段從年輕代晉升到老年代的對象
重新标記:暫停虛拟機,掃描CMS堆中的剩餘對象
并發清理:清理垃圾對象,程式不會停頓
并發重置:重置CMS收集器的資料結構
G1(Garbage First)收集器(複制+标記-整理算法)
并發和并行
分代收集
空間整合
可預測的停頓
将整個Java堆劃分為多個大小相等的Region
年輕代和老年代不在實體隔離