天天看點

JVM-常見垃圾回收機制已經各自的特點

一.Serial和Serial Old垃圾回收器

分别用來回收新生代和老年代的垃圾對象。工作原理就是單線程運作,垃圾回收的時候會停止我們自己寫的系統的其他工作線程,讓我們系統直接卡死不動,然後讓他們垃圾回收,這個現在一般寫背景Java系統幾乎不用。

二.ParNew和CMS垃圾回收器

ParNew現在一般都是用在新生代的垃圾回收器,CMS是用在老年代的垃圾回收器,他們都是多線程并發的機制,性能更好,現在一般是線上生産系統的标配組合。

G1垃圾回收器

統一收集新生代 和老年代,采用了更加優秀的算法和設計機制。

他最大的一個特點,就是把Java堆記憶體拆分為多個大小相等的Region,可以讓我們設定一個垃圾回收的預期停頓時間。

G1可以做到讓你來設定垃圾回收對系統的影響,他自己通過把記憶體拆分為大量小Region,以及追蹤每個Region中可以回收的對象大小和預估時間,最後在垃圾回收的時候,盡量把垃圾回收對系統造成的影響控制在你指定的時間範圍内,同時在有限的時間内盡量回收盡可能多的垃圾對象。

JVM的痛點:Stop the World

在垃圾回收的時候,盡可能要讓垃圾回收器專心緻志的幹工作,不能随便讓我們寫的Java系統繼續對象了,是以此時JVM會在背景直接進入“Stop the World”狀态。也就是說,他會直接停止我們寫的Java系統的所有工作線程,讓我們寫的代碼不再運作!

jvm的優化,就是避免觸發gc,避免進入Stop the World狀态