当你显式将JVM的-XX:MaxTenuringThreshold参数设置为20的时候,会得到一段Error告警:
java -XX:MaxTenuringThreshold=20 Test
MaxTenuringThreshold of 20 is invalid; must be between 0 and 15
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit
复制代码
为什么MaxTenuringThreshold参数不能设置为20?为什么必须是0~15之间?以至于甚至都无法启动JVM来运行我们的代码!!!
ps:如果不知道这个参数含义的同学请自行查阅百度。
ObjectHeader32
ObjectHeader64
ObjectHeader64Coops
注:Coops是一种对象指针压缩技术,不在本文讨论范围之内。
其实在上图我们就可以找,不管在32位还是64位的机器中,Mark Word中代表对象年龄的age都只占4bits,所以年龄2进制的最大表示为1111,换算成十进制为15。
看到这里就明白啦!对象年龄最大也就只能设置到15,即默认躲过15次YGC晋升至老年代。
再次执行代码,验证我们的结论:
java -XX:MaxTenuringThreshold=15 Test
// ---------------output--------------
// hello world
复制代码
OK,成功运行出我们程序员生涯中的第一行代码!!!
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END