【每天一道面試題】JVM內存分配規則有哪些?

1.對象優先分配在Eden區,如果Eden區沒有足夠的空間時,虛擬機執行一次Minor GC。

2.需要大量連續內存空間的對象直接進入老年代,這樣做的目的是避免在Eden區和兩個Survivor區(From space區和To Space區)之間發生大量的內存拷貝。

3.長期存活的對象進入老年代。虛擬機爲每個對象定義了一個年齡計數器,如果對象經過了1次Minor GC那麼對象會進入Survivor區,之後每經過一次Minor GC那麼對象的年齡加1,直到達到閥值對象進入老年區。

4.動態判斷對象的年齡。如果Survivor區中相同年齡的所有對象大小的總和大於Survivor空間的一半,年齡大於或等於該年齡的對象可以直接進入老年代。

5.空間分配擔保。每次進行Minor GC時,JVM會計算Survivor區移至老年區的對象的平均大小,如果這個值大於老年區的剩餘值大小則進行一次Full GC,如果小於則檢查HandlePromotionFailure設置,如果true則只進行Monitor GC,如果false則進行Full GC。

推薦閱讀:

【每天一道面試題】觸發Full GC的場景有哪些?

【每天一道面試題】ReentrantLock相對於synchronized的優勢有哪些?

每天一道面試題】ReentrantLock是如何實現公平鎖及可重入的?

每天一道面試題】如何理解Java中的happens-before?

【每天一道面試題】說一下ThreadLocal原理及會不會發生內存泄漏

【每天一道面試題】Redis單例模式、主從模式、sentinel模式和集羣模式優缺點?

【每天一道面試題】輸入流和輸出流關閉時異常處理有什麼區別?

如有收穫,請點擊底部右下角"在看",謝謝!

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