我正在学习jstat以及它可以告诉我有关JVM的不同版本的信息。从the jstat docs可以理解,新一代是由eden,s0和s1组成的。例如,如果对以下内容进行数学运算,则会看到NGC = EC + S0C + S1C。好东西。
$ jstat -gccapacity -t 21830 5000
Timestamp NGCMN NGCMX NGC S0C S1C EC OGCMN OGCMX OGC OC PGCMN PGCMX PGC PC YGC FGC
248767.4 2624.0 87360.0 6656.0 640.0 640.0 5376.0 5376.0 174784.0 12840.0 12840.0 21248.0 131072.0 34304.0 34304.0 457 73
248772.4 2624.0 87360.0 6656.0 640.0 640.0 5376.0 5376.0 174784.0 12840.0 12840.0 21248.0 131072.0 34304.0 34304.0 457 73
248777.3 2624.0 87360.0 6656.0 640.0 640.0 5376.0 5376.0 174784.0 12840.0 12840.0 21248.0 131072.0 34304.0 34304.0 457 73
我想知道两者之间有什么区别:
同样适用于:
至少对于我而言,每对现在都具有相同的值。除了旧空间,旧时代中还有其他东西吗?
编辑:我不认为有什么区别,但是为了以防万一,我将保留这个问题。
最佳答案
我只是从jdk来源寻求
简而言之:OGC = sum(all OC)
gen可能包含不止一个空格。
但是,Hotspot老一代只有1个空间(年轻一代只有3个空间:eden,s0和s1),
jstat为它们显示相同的值。
什么是OC和OGC
从jdk/src/share/classes/sun/tools/jstat/resources/jstat_options
我有OGC = sun.gc.generation.1.capacity
OC = sun.gc.generation.1.space.0.capacity
column {
header "^OGC^" /* Old Generation Capacity - Current */
data sun.gc.generation.1.capacity
scale K
align right
width 11
format "0.0"
}
column {
header "^OC^" /* Old Space Capacity - Current */
data sun.gc.generation.1.space.0.capacity
scale K
align right
width 11
format "0.0"
}
在GEN.1中有多少空间
运行下面的常规代码来检查
import java.lang.management.ManagementFactory
import sun.jvmstat.monitor.*;
name = ManagementFactory.runtimeMXBean.name
pid = name[0..<name.indexOf('@')]
vmId = new VmIdentifier(pid)
vm = MonitoredHost.getMonitoredHost(vmId).getMonitoredVm(vmId, 0)
println 'Y count :' + vm.findByName('sun.gc.generation.0.spaces').longValue()
println 'O count :' + vm.findByName('sun.gc.generation.1.spaces').longValue()
输出为:
Y count :3
O count :1
您可以对GEN.2(PERM GEN)执行相同的操作