【发布时间】: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 之间工作?
【问题讨论】:
-
没那么多。不完全是我在该链接上寻找的答案。我知道如何设置最大堆,并且知道 32 位和 64 位系统的理论限制。虽然我已经体验过一些 32 位客户端,即使 4g 是理论上的限制,2048m 也无法工作。我正在寻找推荐设置的答案,和/或设置最大堆是否有任何意义。错误的最大堆会导致什么后果。
标签: java garbage-collection jvm heap-memory