蓝易云 - jvm 教程:jdk1.8 大对象的阈值默认是多少
![蓝易云 - jvm教程:jdk1.8大对象的阈值默认是多少](https://static001.geekbang.org/infoq/72/728c6564e3303f65e799c07f7c16cad1.jpeg)
在 Java 虚拟机(JVM)中,大对象的阈值是一个重要的参数,它决定了对象是否直接分配到老年代。在 JDK 1.8 中,默认的大对象阈值是由参数-XX:PretenureSizeThreshold 来控制,其默认值并未设定。也就是说,在默认情况下,并没有明确规定什么样大小的对象被视为“大”对象。
![](https://static001.geekbang.org/infoq/23/2363af2d834f47878e0091411a698b46.png)
然而,在实际应用中,我们可以根据需要手动设置这个阈值。例如, 如果我们设置-XX:PretenureSizeThreshold=3145728(这个数等于 3MB),那么所有大小超过 3MB 的新生成对象都会直接在老年代分配。
那为什么要有这样一个设定呢?原因其实很简单:新生代主要采用复制算法进行垃圾回收, 对于生命周期长、体积大的“老”数据来说, 如果放入新生代进行频繁复制会极度浪费 CPU 资源. 因此对于一些体积较大且存活时间较长(即所谓"大") 的数据项最好能直接进入老年区.
但需要注意一点:虽然可以手动设置该参数以优化性能,但如果不慎将该数值设得过小,则可能导致很多小而频繁使用到得数据也被提前送入了老年区,这样反而可能会导致老年区的垃圾回收过于频繁,从而影响到系统的性能。因此,在设置这个参数时,需要根据实际应用的情况进行权衡。
另外, 这个参数只对 Serial 和 ParNew 两款收集器有效, 而对 Parallel Scavenge 收集器则无效. Parallel Scavenge 收集器自身提供了一个-XX:+UseAdaptiveSizePolicy 参数, 开启此选项后就会自动调整这些细节参数(包括新生代大小、Eden 区与 Survivor 区大小、晋升老年代对象年龄等),以达到最优化暂停时间目标。
总结一下,在 JDK 1.8 中,默认情况下并没有设定大对象阈值。但是我们可以通过-XX:PretenureSizeThreshold 来手动设置大对象阈值。在实际应用中需要根据具体情况进行权衡和调整以达到最优性能。
以上就是关于 JDK 1.8 中大对象阈值默认设定的详细解答,希望可以帮助你更好地理解和使用 Java 虚拟机。
云服务器推荐
蓝易云国内/海外高防云服务器推荐
蓝易云-五网CN2服务器【点我购买】蓝易云采用KVM高性能架构,稳定可靠,安全无忧!蓝易云服务器真实CN2回国线路,不伪造,只做高质量海外服务器。
海外免备案云服务器链接:www.tsyvps.com
蓝易云香港五网 CN2 GIA/GT 精品网络服务器。拒绝绕路,拒绝不稳定。
版权声明: 本文为 InfoQ 作者【百度搜索:蓝易云】的原创文章。
原文链接:【http://xie.infoq.cn/article/37e4f08ec756e0233b59584a4】。文章转载请联系作者。
评论