Search code examples
javagarbage-collectionjstat

jstat: difference between OGC & OC, PGC & PC


I'm learning about jstat and what it can tell me about the JVM's different generations. From the jstat docs I understand the new gen is made up of eden, s0 and s1. For example, if you do the math on the following, you see that NGC = EC + S0C + S1C. Great stuff.

$ 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

I'm wondering what's the difference between:

  • OGC (Current old generation capacity (KB)) and
  • OC (Current old space capacity (KB)).

And similarly for:

  • PGC (Current Permanent generation capacity (KB)) and
  • PC (Current Permanent space capacity (KB)).

Each pair has the same value, at least for me, right now. Is there ever anything in the old generation beside the old space?


Edit: I don't think there is a difference, but I'll leave this question up just in case.


Solution

  • I just seek from the jdk source

    in short: OGC = sum(all OC)

    A gen may contain MORE THAN ONE spaces.

    However, Hotspot old gen has only 1 space ( young gen has 3: eden , s0 and s1 ), jstat shows the same value for them.

    WHAT IS OC and OGC

    from jdk/src/share/classes/sun/tools/jstat/resources/jstat_options

    I got

    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"
      }
    

    HOW MANY SPACES IN GEN.1

    run groovy code below to examine

    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()
    

    output is:

    Y count :3
    O count :1
    

    You can do the same for GEN.2 (PERM GEN)