龙空技术网

JVM对象进入老年代的年龄默认值是15岁这个参数可以调大超过15吗

跟着Mic学架构 96

前言:

今天各位老铁们对“c语言计算年龄的编程”都比较注重,姐妹们都想要剖析一些“c语言计算年龄的编程”的相关文章。那么小编在网络上汇集了一些关于“c语言计算年龄的编程””的相关内容,希望姐妹们能喜欢,各位老铁们快快来了解一下吧!

一个工作3年的粉丝,在刷了几遍面试题以后,自信满满的去参加面试。

前面的回答都还很顺利,甚至到回答gc年龄的时候,也能准确的说出来15这个值。

但是没想到,面试官又继续问,gc年龄为什么要设置成15次,可以超过15吗?

然后,就被面试官以基础掌握不牢固为由拒绝了。

这个问题在我之前整理的30W面试宝典里面,有标准的回答,大家可以大家可以S信我发送【666】领取。

问题解析

这是JVM内存划分和垃圾回收方面的基础问题。

难度并不大,只要稍微了解过堆内存划分就能回答出来。

难得点在于,为什么默认值是15,只要搞懂了这个点,任何关于这个问题的变体都能回答出来。

下面看一下这个问题的回答

问题答案

GC年龄默认是15,这个默认值15是经过实验和优化后得到的一个比较合理的值,可以在保证垃圾回收效率的前提下尽可能地减少移动到老年代中的对象数量。

当然,我们可以通过MaxTenuringThreshold这个参数来调整。

但是这个值也有一些限制。

它不能设置为一个负数或者0,因为这会导致所有对象都直接进入老年代,而不会被放置在新生代中进行垃圾回收

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

原因是对象的GC年龄是存储在对象头里面分配了4个bit位来存储。

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

总结

好了,今天的分享就到这里结束了

如果喜欢我的作品,记得点赞、收藏、关注

需要30W面试宝典(附赠大厂内部十万字面试文档)或者有不懂的技术面试题想咨询的小伙伴可以后台私信发送【Mic】。

标签: #c语言计算年龄的编程