【问题标题】:what's the Survivor size in Java 7Java 7 中的 Survivor 大小是多少
【发布时间】:2015-07-03 03:12:30
【问题描述】:

我有一个 JVM 进程,其中转储了最大 1024 MB 堆大小的核心。(Linux 上的 OpenJDK 7)

当我使用 Yourkit Java Profiler 10.0.6 分析核心转储文件时,我发现进程在内存不足时仅使用 803 MB 堆。

似乎两个 Survivor 堆使用了 2/9 的堆(或保留)。

我在 Windows 7 上使用 JDK 7 进行了测试,jvisualvm(带有 Visual GC 插件)显示一个 Survivor 大小是 Eden 大小的 1/3。

参数为:java -Xms512M -Xmx1024M -XX:+UseParallelGC -XX:+UseParallelOldGC -XX:MaxGCPauseMillis=10000 -XX:+UseCompressedOops

但是当我在网上搜索时,它说默认的幸存者大小是伊甸园大小的 1/8。

在我的测试中找不到 1/3 的原因。

【问题讨论】:

    标签: java garbage-collection jvm


    【解决方案1】:

    java中新创建的对象会被放置一个叫做Eden space的内存空间。每当伊甸园空间被填满时,JVM 就会触发一种称为次要 GC 的东西。在 Minor GC 中幸存下来的对象将被移动到一个名为 Survivor Space 的地方。幸存者空间的大小称为幸存者大小。

    您可以使用 -XX:SurvivorRatio=N 参考 Eden 空间调整幸存者大小。您的默认幸存者比率为 8。

    【讨论】:

    • 是的,我知道默认比率是 8,这意味着幸存者大小是伊甸园大小的 1/8。但为什么在我的测试中是 1/3?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-27
    • 2014-03-06
    • 2016-11-02
    • 1970-01-01
    • 2015-04-01
    相关资源
    最近更新 更多