jvm教程:jdk1.8大对象的阈值默认是多少

223 阅读2分钟

在Java虚拟机(JVM)中,大对象的阈值是一个重要的参数,它决定了对象是否直接分配到老年代。在JDK 1.8中,默认的大对象阈值是由参数-XX:PretenureSizeThreshold来控制,其默认值并未设定。也就是说,在默认情况下,并没有明确规定什么样大小的对象被视为“大”对象。

然而,在实际应用中,我们可以根据需要手动设置这个阈值。例如, 如果我们设置-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精品网络服务器。拒绝绕路,拒绝不稳定。