Java堆 - 更改核心数后,年轻空间发生了变化

时间:2013-04-11 11:19:38

标签: java performance garbage-collection heap

我已经更改了运行java应用程序的vm上的核心数量(从16减半到8)。

堆大小的参数没有变化,但由于某些原因,年轻空间正在减少,我无法确定。

我们在没有设置NewRatio的情况下运行,因此默认值应该相同,除非在确定年轻空间的大小时考虑核心数量。我看到关于年轻空间/新比率的默认大小的文档很少,这表明核心数量是一个决定因素,但由于没有进行任何其他更改,情况似乎就是这样。

任何人都可以对此有所了解吗?

3 个答案:

答案 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优化。