首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HotSpot JVM选项/jmap输出

HotSpot JVM选项/jmap输出
EN

Stack Overflow用户
提问于 2017-05-05 07:02:18
回答 1查看 241关注 0票数 1

当我使用以下配置在Hotspot VM上运行我的java应用程序时:-Xms2048m-Xmx2048mjmap输出:

代码语言:javascript
复制
Heap Configuration:
   MinHeapFreeRatio = 40
   MaxHeapFreeRatio = 70
   MaxHeapSize      = 2147483648 (2048.0MB)
   NewSize          = 1310720 (1.25MB)
   MaxNewSize       = 17592186044415 MB
   OldSize          = 5439488 (5.1875MB)
   NewRatio         = 2
   SurvivorRatio    = 8
   PermSize         = 21757952 (20.75MB)
   MaxPermSize      = 85983232 (82.0MB)

Heap Usage:
PS Young Generation
Eden Space:
   capacity = 706740224 (674.0MB)
   used     = 364788568 (347.88948822021484MB)
   free     = 341951656 (326.11051177978516MB)
   51.61565107124849% used
From Space:
   capacity = 4587520 (4.375MB)
   used     = 1900560 (1.8125152587890625MB)
   free     = 2686960 (2.5624847412109375MB)
   41.428920200892854% used
To Space:
   capacity = 4456448 (4.25MB)
   used     = 0 (0.0MB)
   free     = 4456448 (4.25MB)
   0.0% used
   ...

让我困惑的是为什么伊甸园空间和两个生存空间的容量不符合公式

eden/(s0+s1) = SurvivorRatio

但是,当我添加另一个jvm选项-Xmn500m时,jmap输出似乎是合理的,即容量严格遵循公式。

EN

回答 1

Stack Overflow用户

发布于 2017-05-07 22:38:29

我希望这能得到更多的关注.的确,你是对的(这不是一个答案-但太长了,不能发表评论)

当我这么做时:

代码语言:javascript
复制
 java -XX:+PrintFlagsFinal | grep SurvivorRatio
      uintx InitialSurvivorRatio                     = 8

显然,这是8。但是在测试时,它更像是一个6 (我不能重现您在JDK-8中看到的巨大差异)。

下面是使用-Xmx2048m -Xms2048m运行时的相关部分

代码语言:javascript
复制
 PS Young Generation
 Eden Space:
 capacity = 537395200 (512.5MB)
 ....
 From Space:
 capacity = 89128960 (85.0MB)
 ....
 To Space:
 capacity = 89128960 (85.0MB)

这就是:

512/85 =6

当我使用相同的-Xmx2048m -Xms2048m运行相同的代码,但添加默认值:-Xms2048m时,输出是:

代码语言:javascript
复制
 PS Young Generation
 Eden Space:
 capacity = 573046784 (546.5MB)
 ....
 From Space:
 capacity = 71303168 (68.0MB)
 ....
 To Space:
 capacity = 71303168 (68.0MB)

546.5 / 68 = 8。

您正在设置的-Xmn也是如此。这太奇怪了!我没有更改SurvivorRatio的值--它仍然是默认的8。

在内部,似乎有一些检查是否设置了与SurvivorRatio计算相关的标志,并应用了不同的策略(我希望我知道这些标志的本质,但没有运气)。

还有孩子!我有没有试着找到这些。我确实找到了一些暗示,但没有直接回答,比如 (特别是评论)。我做了一个:

代码语言:javascript
复制
  grep -R "SurvivorRatio" .

在本地的hotspot源代码中,仍然没有提示所有正在发生的结果。

在这个时候,我唯一的逻辑解释是,除非指定任何与SurvivorRatio相关的参数,否则将选择一个默认值(这不一定是java -XX:+PrintFlagsFinal报告的那个),而是中间的某个值,接近这个值的值。如果是这种情况,那么应该在Documents中明确指定;否则,在我的世界中,这是一个微小的文档错误。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43798527

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档