写点什么

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

  • 2024-06-25
    四川
  • 本文字数:877 字

    阅读完需:约 3 分钟

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

在 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 精品网络服务器。拒绝绕路,拒绝不稳定。

用户头像

百度搜索:蓝易云 2023-07-05 加入

香港五网CN2免备案服务器

评论

发布
暂无评论
蓝易云 - jvm教程:jdk1.8大对象的阈值默认是多少_Java_百度搜索:蓝易云_InfoQ写作社区