我已经更改了运行java应用程序的vm上的核心数量(从16减半到8)。
堆大小的参数没有变化,但由于某些原因,年轻空间正在减少,我无法确定。
我们在没有设置NewRatio的情况下运行,因此默认值应该相同,除非在确定年轻空间的大小时考虑核心数量。我看到关于年轻空间/新比率的默认大小的文档很少,这表明核心数量是一个决定因素,但由于没有进行任何其他更改,情况似乎就是这样。
任何人都可以对此有所了解吗?
答案 0 :(得分:1)
有可能。默认情况下,GC的调整方式各不相同,从JVM到JVM以及从版本到版本,这就是为什么您可能无法获得有关其工作原理的详细信息的原因。
您可以为正在使用的相同JVM版本下载OpenJDK,并阅读源代码以了解它的用途。
答案 1 :(得分:0)
HotSpot JVM具有内置的启发式规则,可将硬件分类为服务器或客户端类。这两个类有不同的默认值(有些时候非常不同)。
数字或核心和可用内存是JVM用来猜测硬件类别的参数。
有两种JVM选项可以使这种选择更具确定性。
-XX:+AlwaysActAsServerClassMachine
-XX:+NeverActAsServerClassMachine
答案 2 :(得分:0)
我认为你不应该担心几代人的规模,除非它导致严重的性能问题。
根据您使用的GC和您设置的JVM选项,Hotspot可以动态调整生成的大小,以便GC周期花费更少的时间(-XX:+UseAdaptiveSizePolicy
)。这是JVM应用于优化应用程序的优化之一。
想知道为什么JVM像这样调整内存池的大小是一件好事,但是没有任何问题需要解决,很难再进一步; - )
您应该启用GC日志-X:loggc:gc.log -XX:+PrintGCDetails
)并比较16核/ 8核内存消耗模式以查看是否有错误。如果你的应用程序不慢并且没有内存消耗问题,那么可以说这些新的内存池只是一个JVM优化。