jstat:OGC和OC,PGC和PC之间的区别

Ste*_*let 9 java garbage-collection jstat

我正在学习jstat以及它可以告诉我有关JVM不同代的内容.从jstat docs我了解到新的gen由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
Run Code Online (Sandbox Code Playgroud)

我想知道之间的区别是什么:

  • OGC(当前老一代容量(KB))和
  • OC(当前旧空间容量(KB)).

同样适用于:

  • PGC(当前永久发电容量(KB))和
  • PC(当前永久空间容量(KB)).

至少对我来说,每对都具有相同的价值.在旧空间旁边,老一代有什么东西吗?


编辑:我认为没有区别,但为了以防万一,我会留下这个问题.

far*_*992 9

我只是从jdk源寻求

简而言之: OGC = sum(all OC)

一代可能包含多于一个空格.

但是,Hotspot old gen只有1个空格(年轻的gen有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"
  }
Run Code Online (Sandbox Code Playgroud)

GEN.1中有多少空间

在下面运行groovy代码来检查

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()
Run Code Online (Sandbox Code Playgroud)

输出是:

Y count :3
O count :1
Run Code Online (Sandbox Code Playgroud)

你可以为GEN.2(PERM GEN)做同样的事情