jvm垃圾回收機制-筆記

參考:

  • 視頻
  • 書籍:《深入理解Java虛擬機-第3章 垃圾收集器與內存分配策略》

1.運行時數據區

在這裏插入圖片描述

1.1程序計數器

線程在執行Java方法:虛擬機字節碼指令的地址
線程在執行Native方法:Undifined
唯一一個沒有OutOfMemoryError的區域

1.2堆

存放對象和數組(數組也是對象)
在這裏插入圖片描述
OutOfMemoryError原因:創建的對象太多

1.3虛擬機棧

描述Java方法執行的內存模型(爲字節碼服務),每個方法在執行的時候都會創建一個棧幀,用於存儲局部變量表、操作數棧、動態鏈接、方法出口等信息。
OutOfMemoryError原因:執行的方法太多

1.4本地方法棧

描述Native方法執行的內存模型,其他和虛擬機棧類似。
OutOfMemoryError原因:執行的方法太多

1.5方法區

已加載類的信息、常量、靜態變量、即時編譯後的代碼
OutOfMemoryError原因:加載的類或常量等太多

2.判斷對象已死的方法

2.1 引用計數法

無法解決對象循環引用的問題

2.2 可達性分析(首選)

在這裏插入圖片描述
在這裏插入圖片描述

2.3 引用分類

在這裏插入圖片描述

2.4 垃圾回收算法

2.4.1標記-清除算法

先逐個標記,再逐個清除垃圾。
缺點:效率不高,還產生大量的碎片。

2.4.1複製算法

每次使用一半的內存,用完一半時,把存活的對象複製到另一半區域,再對使用過的區域整體清理。
缺點:內存代價太高。

2.4.1標記-整理算法

先標記,再把活對象前移,最後把剩餘的空間清理。

2.4.1分代蒐集算法(首選)

Java堆分爲新生代和老年代,根據各年代的生存週期選擇合適的算法。
新生代:複製算法(多數死,少量活)
老年代:標記-清除和標記-清理。(少數死,多數活)
在這裏插入圖片描述
在這裏插入圖片描述

3. 垃圾收集器

3.1 Serial收集器

單線程,Stop The World
在這裏插入圖片描述

3.2 ParNew

多線程,Stop The World
在這裏插入圖片描述

3.3 Parallel Scavenge

新生代收集器,複製算法,並行的多線程收集器
特點是自調節策略,可控制垃圾處理的時間

3.4 Serial Old

Serial的老年代版本,單線程,標記整理算法

3.5 Parallel Old

Parallel Scavenge的老年版本
在這裏插入圖片描述

3.5 CMS收集器

在這裏插入圖片描述
在這裏插入圖片描述

3.5 G1垃圾回收

在這裏插入圖片描述

4.內存分配與回收策略

4.1 對象優先分配在Eden

4.2 大對象直接進入老年代

4.3 長期存活的對象將進入老年代

4.4 動態對象年齡綁定

4.5 空間分配擔保

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