【问题标题】:Recommended Setting max Heap Size or Not?是否推荐设置最大堆大小?
【发布时间】:2017-03-21 18:16:45
【问题描述】:

许多建议已经很老了。 Java 中的堆和 GC 发生了一些变化。

我之前发现建议设置过高的最大堆大小可能会影响性能,使其变得更糟。所以也可以设置一个太低的值。

不设置最大堆大小将使用系统默认值,约为其总内存的 1/4。对于我的计算机,它将为我的总内存中的 JVM 分配 8GB。

我正在使用 Java 7 引入的 G1GC,并在运行时应用 -XX:+UseG1GC。

很难找到适合所有最大堆大小的一种尺寸。我正在处理的应用程序可以从小扩展到非常大,这取决于它的组成(这是非常动态的并且在运行时确定)。我已经看到该应用程序的某些实例不需要超过 1GB 的最大堆,但其他实例则受益于更大的大小。将 Java Web Start 中的 Max Heap 设置为 4GB,甚至 2GB 会导致运行 32 位(Java 和/或操作系统,是的,这些人确实存在)的客户端出现问题。

使用 Java 7 或 8 设置最大堆大小实际上有什么意义吗? JVM 将使用可用的东西,而 GC 将在已使用的堆和已提交的头之间工作。还是 GC 在 all used 和 max heap 之间工作?

【问题讨论】:

  • 你可以在这里找到一些建议。点击http://stackoverflow.com/questions/1565388/increase-heap-size-in-java
  • 没那么多。不完全是我在该链接上寻找的答案。我知道如何设置最大堆,并且知道 32 位和 64 位系统的理论限制。虽然我已经体验过一些 32 位客户端,即使 4g 是理论上的限制,2048m 也无法工作。我正在寻找推荐设置的答案,和/或设置最大堆是否有任何意义。错误的最大堆会导致什么后果。

标签: java garbage-collection jvm heap-memory


【解决方案1】:

使用 Java 7 或 8 设置最大堆大小实际上有什么意义吗?

如果 JVM 与其他也需要内存的应用程序共享操作系统。

JVM 将使用可用的资源,而 GC 将在已使用的堆和已提交的头之间工作。还是 GC 在 all used 和 max heap 之间工作?

根据配置,GC 可能会或可能不会停留在实际使用的堆范围内。在某些情况下,它们可以显着增加堆大小以达到吞吐量或暂停时间目标。因此,限制堆可提供更可预测的堆大小,但可能会以牺牲吞吐量、延迟或(如果大小不正确)为代价 - OOM。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多