1.JVM體系結構概述
2.GC算法
分類:
- 引用計數法:每個對象維護一個引用計數器記錄其被引用數,當被引用數為0時即可回收
-
跟蹤法(可達性分析算法):從GC Roots出發向下搜尋,不可達的對象即可回收
GC Roots對象:
- 虛拟機棧(棧幀中的本地變量表)中引用的對象
- 本地方法棧中JNI(即native方法)引用的對象
- 方法區中類靜态屬性引用的對象
- 方法區中常量引用的對象
在可達性分析算法中不可達的對象,也并非就判定為“死亡”了;判定一個對象最終是否死亡,至少經曆兩次标記過程:
- 不可達的對象會被
第一次标記
; - 被第一次标記的對象進行 判斷是否有必要執行finalize(),若對象覆寫了finalize()方法 且 finalize() 沒有執行過,若都滿足則執行finalize();
- 在finalize()中,若對象重新和引用鍊上的任一對象建立關聯,則不會被
第二次标記
,它則不會被回收。
1.複制
2.标記清除
3.标記壓縮
4.标記清除壓縮
- 原理:
- Mark-Sweep和Mark-Compact結合
- 和Mark-Sweep一緻,當進行多次GC後才Compact
-
優點:
減少移動對象的成本
3.Hotspot記憶體管理
4.Hotspot垃圾回收器
1.新生代垃圾回收器
1.Serial Copying
2.ParNew
3.Parallel Scavenge(吞吐量優先)
2.舊生代垃圾回收器
1.Serial MSC(Serial Old)
2.Parallel Compacting(Parallel Old)
3.CMS(并發低停頓)
5.調優
1.堆大小調優
2.新生代調優
1.大小
2.晉升
3.舊生代調優
6.監控工具