在一次面试中,被问到JVM的分代年龄问题,最后面试官问了一句,为什么它的分代年龄是15,而不是17或者16?当时有些太想当然,觉得这个和HashMap的负载因子是0.75类似,就答得是多次试验后得出来的一个平衡的数字。后来面试就凉凉了,接着回去查了一下资料,原来原因是在MarkWord里。

这就是一个MarkWord,其中对象的分代年龄占4位,也就是0000,最大值为1111也就是最大为15.而不可能为16或者17之类的。