JVM第三章閱讀筆記

3.1概述
哪些內存需要回收?
什麼時候回收?
如何回收?

3.2對象死了嗎:
3.2.1引用計數算法
就是判斷是否被引用,缺點在於互相引用
3.2.2可達性分析算法
通過"GC Roots"作爲起始點,判定是否可回收
3.2.3再談引用
引用分爲:
強引用:new
軟引用:SoftReference
弱引用:WeakReference
虛引用:PhantomReference
3.2.4生存還是死亡
也不是所有不可達的也非死不可,finalize()可能會復活,不過一個對象只能一次
3.2.5回收方法區
廢棄常量和無用的類

3.3垃圾收集算法
3.3.1標記-清除算法
把不用的進行標記然後清除,缺點是容易出現沒有完整的塊
3.3.2複製算法
把存活的對象複製到另一個區域,Eden+2*Survivor;新生代常用
3.3.3標記-整理算法
標記清除之後,在進行整理到一塊去;老生代常用
3.3.4分代收集算法
新生代+老生代

3.4HotSpot的算法實現
3.4.1枚舉根節點
OopMap數據解構: 保存GC Roots 節點,避免全局掃描去一一查找。
3.4.2安全點
線程在安全點時,才能gc
3.4.3安全區域
線程處於Sleep或Blocked狀態

3.5垃圾收集器
3.5.1Serial收集器
單線程,會Stop The World
3.5.2ParNew收集器
多線程的Serial收集器
3.5.3Parallel Scavenge收集器
可控吞吐量(gc時間佔總時間的比);新生代收集器
3.5.4Serial Old收集器
Serial收集器的old版本;與Parallel Scavenge收集器配合使用;給CMS收集器後備
3.5.5Parallel Old收集器
Parallel Scavenge收集器的old版本
3.5.6CMS收集器(Concurr Mark Sweep)
以獲取最短回收停頓時間爲目標,
使用:標記-清除
初始標記;併發標記;重新標記;併發清除
初始標記、重新標記耗時短,但是會stop the world
缺點:對CPU敏感;無法收集浮動垃圾;使用清除-標記,可以設置成幾次“清除-標記”之後進行整理,但是整理時stop the world
3.5.7G1收集器
多個大小相等的獨立區域(Region)組成;優先回收價值最大(回收空間大,時間短)的Region
特點:
並行和併發
分代收集
空間整合:使用清除-整合
可預測的停頓
運作的幾個步驟
初始標記;併發標記;最終標記;篩選回收

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章