许多建议相当陈旧。Java中的Heap和GC发生了一些变化。
我以前发现过这样的建议:设置过高的最大堆大小可能会影响性能,使其更糟。因此,也可能设置一个过低的价值。
不设置最大堆大小将使用系统默认值,这大约是其总内存的1/4。对于我的计算机,它将把8GB分配给我的总内存的JVM。
我正在使用Java7引入的G1GC,并在运行时应用-XX:+UseG1GC。
很难找到一个适合最大堆大小的一种大小。我正在处理的应用程序可以从小到非常大,这取决于它的组合(这是非常动态的,在运行时确定的)。我已经看到了应用程序的一些实例不需要超过1GB的Max Heap,但其他实例则受益于更大的大小。将中的Max设置为4GB,甚至2GB都会导致运行32位(Java和/或OS )的客户端出现问题(是的,这些人确实存在)。
实际上,是否还需要使用Java 7或8来设置最大堆大小?JVM将使用可用的内容,GC将在已使用的堆和提交的头之间工作。或者GC在所有使用的堆和最大堆之间工作吗?
发布于 2017-03-21 19:53:21
实际上,是否还需要使用Java 7或8来设置最大堆大小?
例如,如果JVM与其他也需要ram的应用程序共享操作系统。
JVM将使用可用的内容,GC将在已使用的堆和提交的头之间工作。或者GC在所有使用的堆和最大堆之间工作吗?
根据配置的不同,GCs可能留在实际使用的堆范围内,也可能不在实际使用的堆中。在某些情况下,为了满足吞吐量或暂停时间目标,它们可以显着地膨胀堆大小。因此,限制堆提供了更可预测的堆大小,可能以牺牲吞吐量、延迟或(如果大小不正确) OOMs为代价。
https://stackoverflow.com/questions/42935163
复制相似问题