天天看點

JVM對象進入老年代的年齡預設值是15歲這個參數可以調大超過15嗎

作者:跟着Mic學架構

一個工作3年的粉絲,在刷了幾遍面試題以後,自信滿滿的去參加面試。

前面的回答都還很順利,甚至到回答gc年齡的時候,也能準确的說出來15這個值。

但是沒想到,面試官又繼續問,gc年齡為什麼要設定成15次,可以超過15嗎?

然後,就被面試官以基礎掌握不牢固為由拒絕了。

這個問題在我之前整理的30W面試寶典裡面,有标準的回答,大家可以大家可以S信我發送【666】領取。

問題解析

這是JVM記憶體劃分和垃圾回收方面的基礎問題。

難度并不大,隻要稍微了解過堆記憶體劃分就能回答出來。

難得點在于,為什麼預設值是15,隻要搞懂了這個點,任何關于這個問題的變體都能回答出來。

下面看一下這個問題的回答

問題答案

GC年齡預設是15,這個預設值15是經過實驗和優化後得到的一個比較合理的值,可以在保證垃圾回收效率的前提下盡可能地減少移動到老年代中的對象數量。

當然,我們可以通過MaxTenuringThreshold這個參數來調整。

但是這個值也有一些限制。

它不能設定為一個負數或者0,因為這會導緻所有對象都直接進入老年代,而不會被放置在新生代中進行垃圾回收

其次,最大值是15且不能超過15。

原因是對象的GC年齡是存儲在對象頭裡面配置設定了4個bit位來存儲。

而四個bit位的最大值就是15。

JVM對象進入老年代的年齡預設值是15歲這個參數可以調大超過15嗎

總結

好了,今天的分享就到這裡結束了

如果喜歡我的作品,記得點贊、收藏、關注

需要30W面試寶典(附贈大廠内部十萬字面試文檔)或者有不懂的技術面試題想咨詢的小夥伴可以背景私信發送【Mic】。

JVM對象進入老年代的年齡預設值是15歲這個參數可以調大超過15嗎
JVM對象進入老年代的年齡預設值是15歲這個參數可以調大超過15嗎