目錄
運行時數據區域、JMM(JVM內存模型)
Minor GC、Full GC
|
Minor GC 新生代 |
Full GC/Major GC 老年代 |
-XX:+UseSerialGC |
串行GC |
串行GC |
-XX:+UseParallelGC |
PS GC |
並行MSC GC |
-XX:+UseConcMarkSweepGC |
ParNew GC |
並行GC 當出現concurrent Mode Failure時採用串行GC |
-XX:+UseParNewGC |
並行GC |
串行GC |
-XX:+UseParallelOldGC |
PS GC |
並行Compacting GC |
-XX:+UseConcMarkSweepGC -XX:+UseParNewGC |
串行GC |
併發GC 當出現Concurrent Mode Failure或promotion failed時採用串行GC |
不支持的組合方式 |
1、-XX:+UseParNewGC -XX:+UseParallelOldGc 2、-XX:+UseParNewGC -XX:+UseSerialGC |
判斷對象是否“存活”或“死亡”:
- 引用計數算法:
給對象中添加一個引用計數器,每當有一個地方引用它時,計數器的值加1;當引用失效時,計數器的值減;當該對象的計數器的值爲0時,標誌該對象失效。
- 跟搜索算法:
通過一系列的名爲“GCRoots”的對象作爲起始點,從這些節點開始向下搜索,搜索過的路徑稱爲引用鏈,當一個對象到GCRoots沒有任何引用鏈相連(用圖論的話來說就是從GC Roots到這個對象不可達)時,則證明對象是不可用的。
各種回收算法
- 標記-清除算法
首先標記出所有需要回收的對象,在標記完成後統一回收所有被標記的對象
- 複製算法
將可用內存按容量劃分爲大小相等的兩塊,每次使用其中的一塊,當一塊的內存用完了,就將還存活的對象複製到另一塊上面,然後再把已使用過的內存空間一次清空(Eden和Survivor)
- 標記-整理算法
標記過程仍然與標記-清除算法一樣,讓所以存活對象都向一端移動,然後直接清理掉邊界意外的內容
- 分代收集算法
類加載,爲何使用雙親委派模式?是否有場景可以打破這種模式?
類的生命週期:
類加載雙親委派模型
破壞雙親委派模型:線程上下文類加載器(Thread Context ClassLoader)
Finalize()方法
是Object的protected方法,子類可以覆蓋該方法以實現資源清理工作,GC在回收對象之前調用該方法。
class TestGC{ |