当前位置:网站首页>JVM調優簡要思想及簡單案例-老年代空間分配擔保機制

JVM調優簡要思想及簡單案例-老年代空間分配擔保機制

2022-06-22 00:21:00 InfoQ

也有一些特殊情况,比如說如果在新生代 GC 裏面,發現Eden區,垃圾回收完之後,它有大批對象都是存活的,它可能那個內存對象大小已經大於了這個 serviver 2 區或者 serviver 1,他們兩個都是一樣的,大於了 serviver 2 區,那它也會直接到這個老年代裏面去。
這是屬於一個只是例外情况,下面具體說明一下:
老年代空間分配擔保機制:
1. 在執行任何一次新生代GC之前,JVM會先檢查一下老年代可用的可用內存空間,是否大於新生代所有對象的總大小
2. 看老年代的內存大小,是否大於之前每一次新生代GC後進入老年代的對象的平均大小
3. 如果上面兩個步驟都判斷成功了,那麼JVM會嘗試嘗試進行新生代GC
 1. 新生代GC後,剩餘的存活對象的大小,可直接進入Survivor區
 2. 新生代GC後,大於Survivor區可用空間大小,但是小於老年代可用空間大小,則直接進入老年代
 3. 新生代GC過後,剩餘的存活對象大小大於了Survivor區域可用空間,也大於了老年代可用空間,觸發FULL GC,對老年代和新生代進行垃圾回收。 
 1. FULL GC後,老年代有空間存放剩餘的存活對象,則存活對象進行老年代
 2. FULL GC後,老年代還是沒有空間存放剩餘存活對象,則發生內存溢出(OOM)
GC 的內存性能開銷:
FULL GC>老年代GC>新生代GC
GC性能開銷由大到小是 FULL GC,其次是老年代 GC, 最小的是一個新生代 GC 。這地方沒有把那個新生代 GC 分得很細,比如 通常說的Mior GC 或者是 Young GC, 為了便於理解,沒有引入其他概念。
有了這個這樣一個內存性能開銷的一個大小比例之後,那我們為了讓性能達到最優,主要也盡量讓這個智能開銷大的 GC 盡量的少發生。比如說我們這個可以新生代的 GC 多發生一些。
然後一個一店區,兩個 river 區,然後說他我們我們又繼續我們又說了那個項的創建,和回收,是怎樣進行的。會有一些异常的分配機制,它會直接進入老年代,它不會去進入這兩個 surviver 群,然後說了這個 EC 的性能開銷,然後這樣有這樣一些基礎之後,我們下來就會去講這什麼情况下我們需要 M 調優?然後我們為什麼需要接 M 調優?雖然有兩個有還還有一些其他知識,比如說垃圾回收劑或者垃圾回收算法,這地方沒有再去展開地講,因為如果要講的話,它其實 C 篇這是很大的內容,這可能一時半會也講不完。就先有一個為了讓大家有一個簡單的印象或者概念,就先講一個簡要的簡要思想。
原网站

版权声明
本文为[InfoQ]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/173/202206212246526533.html

随机推荐