我正在使用JMH基准测试工具和hs_gc hotspot profiler.
我遇到的问题是我不确定输出计数器值是什么意思,并且无法在网上找到参考.
有人能指出我的规范方向或解释这些价值观吗?
我在下面粘贴了一个示例输出:
HS(GC) | difference: { sun.gc.collector.0.invocations=16, sun.gc.collector.0.lastEntryTime=37106821, sun.gc.collector.0.lastExitTime=37109336, sun.gc.collector.0.time=1528884, sun.gc.collector.1.invocations=6, sun.gc.collector.1.lastEntryTime=34419368, sun.gc.collector.1.lastExitTime=35532892, sun.gc.collector.1.time=6721387, sun.gc.generation.0.space.0.used=872712984, sun.gc.generation.1.space.0.used=5721334504, sun.gc.generation.2.space.0.used=4848, sun.gc.policy.avgBaseFootprint=5312, sun.gc.policy.avgMajorIntervalTime=-667, sun.gc.policy.avgMajorPauseTime=-41, sun.gc.policy.avgMinorIntervalTime=-557, sun.gc.policy.avgMinorPauseTime=1, sun.gc.policy.avgOldLive=88064, sun.gc.policy.avgPromotedAvg=421184, sun.gc.policy.avgPromotedDev=364832, sun.gc.policy.avgPromotedPaddedAvg=1515648, sun.gc.policy.avgSurvivedAvg=1056640, sun.gc.policy.avgSurvivedDev=-189440, sun.gc.policy.avgSurvivedPaddedAvg=488320, sun.gc.policy.avgYoungLive=2708352, sun.gc.policy.liveAtLastFullGc=5721334504, sun.gc.policy.liveSpace=2801664, sun.gc.policy.majorGcCost=5, sun.gc.policy.majorPauseYoungSlope=-3, sun.gc.policy.minorGcCost=2, sun.gc.policy.minorPauseTime=3, sun.gc.policy.minorPauseYoungSlope=1, sun.gc.policy.mutatorCost=-7, sun.gc.policy.oldEdenSize=11534336, sun.gc.policy.promoted=4584928, sun.gc.policy.survived=6194624, sun.gc.tlab.alloc=12852845, sun.gc.tlab.fills=-15, sun.gc.tlab.gcWaste=-100979, sun.gc.tlab.maxFills=-22, sun.gc.tlab.maxGcWaste=-100859, sun.gc.tlab.maxSlowAlloc=-5, sun.gc.tlab.maxSlowWaste=8826, sun.gc.tlab.slowAlloc=-5, sun.gc.tlab.slowWaste=8849}
Oleg Estekhi.. 12
HotSpot中的可维护性:HotSpot Jvmstat性能计数器对此有以下警告:
计数器有结构的名称,例如
sun.gc.generation.1.name
,java.threads.live
,java.cls.loadedClasses
.这些计数器的名称和用于表示它们的数据结构被认为是HotSpot JVM的专用,未提交的接口.用户不应该依赖任何计数器名称,特别是那些以"java."以外的前缀开头的名称.
附加警告:下面的所有源代码链接都指向特定的hg.openjdk.java.net/jdk7u/jdk7u60分支和特定的文件修订版.链接本身应该永远有效,但随着JVM的发展,新文件版本可以使这篇文章中的信息过时.
第一个信息来源是jstat
文档(jstat 8 unix docs,jstat 8 windows docs,jstat 7 docs).它为许多性能计数器提供了人类可读的尽管简短描述,例如:
FGC: Number of full GC events.
第二个信息源是jstat
源代码(jstat源代码,jdk7u60分支),特别是其资源文件:jstat_options和jstat_unsupported_options.例如,搜索FGC
在jstat_options
下面的代码片段的结果:
column {
header "^FGC^" /* Full Collections */
data sun.gc.collector.1.invocations
align center
width 5
scale raw
format "0"
}
使用jstat_options
源代码和jstat
文档,可以将大多数内部计数器名称与前缀sun.gc.collector
和sun.gc.generation
人类可读描述相映射,或者至少从jstat_options
文件内的注释中获取一些其他信息.
大多数带sun.gc.policy
前缀的计数器都在gcPolicyCounters.cpp和gcAdaptivePolicyCounters.cpp中定义,也在GC特定的实现中定义(查找somethingCounters.cpp
与共享文件夹位于同一级别的GC特定文件夹中的文件),但我无法找到人类 - 对他们的可读描述.
我无法找到sun.gc.tlab
定义带前缀的计数器的位置.签出完整的JDK源代码并为相关的计数器名称搜索它应该可以帮助那些倾向于找到所有内容的人.
HotSpot中的可维护性:HotSpot Jvmstat性能计数器对此有以下警告:
计数器有结构的名称,例如
sun.gc.generation.1.name
,java.threads.live
,java.cls.loadedClasses
.这些计数器的名称和用于表示它们的数据结构被认为是HotSpot JVM的专用,未提交的接口.用户不应该依赖任何计数器名称,特别是那些以"java."以外的前缀开头的名称.
附加警告:下面的所有源代码链接都指向特定的hg.openjdk.java.net/jdk7u/jdk7u60分支和特定的文件修订版.链接本身应该永远有效,但随着JVM的发展,新文件版本可以使这篇文章中的信息过时.
第一个信息来源是jstat
文档(jstat 8 unix docs,jstat 8 windows docs,jstat 7 docs).它为许多性能计数器提供了人类可读的尽管简短描述,例如:
FGC: Number of full GC events.
第二个信息源是jstat
源代码(jstat源代码,jdk7u60分支),特别是其资源文件:jstat_options和jstat_unsupported_options.例如,搜索FGC
在jstat_options
下面的代码片段的结果:
column {
header "^FGC^" /* Full Collections */
data sun.gc.collector.1.invocations
align center
width 5
scale raw
format "0"
}
使用jstat_options
源代码和jstat
文档,可以将大多数内部计数器名称与前缀sun.gc.collector
和sun.gc.generation
人类可读描述相映射,或者至少从jstat_options
文件内的注释中获取一些其他信息.
大多数带sun.gc.policy
前缀的计数器都在gcPolicyCounters.cpp和gcAdaptivePolicyCounters.cpp中定义,也在GC特定的实现中定义(查找somethingCounters.cpp
与共享文件夹位于同一级别的GC特定文件夹中的文件),但我无法找到人类 - 对他们的可读描述.
我无法找到sun.gc.tlab
定义带前缀的计数器的位置.签出完整的JDK源代码并为相关的计数器名称搜索它应该可以帮助那些倾向于找到所有内容的人.