Mercurial > hg > truffle
diff agent/src/share/classes/sun/jvm/hotspot/tools/HeapSummary.java @ 3972:4f93f0d00802
7059019: G1: add G1 support to the SA
Summary: Extend the SA to recognize the G1CollectedHeap and implement any code that's needed by our serviceability tools (jmap, jinfo, jstack, etc.) that depend on the SA.
Reviewed-by: never, poonam, johnc
author | tonyp |
---|---|
date | Tue, 20 Sep 2011 09:59:59 -0400 |
parents | c18cbe5936b8 |
children | 81aa07130d30 |
line wrap: on
line diff
--- a/agent/src/share/classes/sun/jvm/hotspot/tools/HeapSummary.java Fri Sep 16 21:35:06 2011 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/tools/HeapSummary.java Tue Sep 20 09:59:59 2011 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -26,11 +26,11 @@ import java.util.*; import sun.jvm.hotspot.gc_interface.*; +import sun.jvm.hotspot.gc_implementation.g1.*; import sun.jvm.hotspot.gc_implementation.parallelScavenge.*; import sun.jvm.hotspot.gc_implementation.shared.*; import sun.jvm.hotspot.memory.*; import sun.jvm.hotspot.runtime.*; -import sun.jvm.hotspot.tools.*; public class HeapSummary extends Tool { @@ -70,32 +70,50 @@ System.out.println(); System.out.println("Heap Usage:"); - if (heap instanceof GenCollectedHeap) { - GenCollectedHeap genHeap = (GenCollectedHeap) heap; - for (int n = 0; n < genHeap.nGens(); n++) { - Generation gen = genHeap.getGen(n); - if (gen instanceof sun.jvm.hotspot.memory.DefNewGeneration) { - System.out.println("New Generation (Eden + 1 Survivor Space):"); - printGen(gen); + if (heap instanceof SharedHeap) { + SharedHeap sharedHeap = (SharedHeap) heap; + if (sharedHeap instanceof GenCollectedHeap) { + GenCollectedHeap genHeap = (GenCollectedHeap) sharedHeap; + for (int n = 0; n < genHeap.nGens(); n++) { + Generation gen = genHeap.getGen(n); + if (gen instanceof sun.jvm.hotspot.memory.DefNewGeneration) { + System.out.println("New Generation (Eden + 1 Survivor Space):"); + printGen(gen); - ContiguousSpace eden = ((DefNewGeneration)gen).eden(); - System.out.println("Eden Space:"); - printSpace(eden); + ContiguousSpace eden = ((DefNewGeneration)gen).eden(); + System.out.println("Eden Space:"); + printSpace(eden); + + ContiguousSpace from = ((DefNewGeneration)gen).from(); + System.out.println("From Space:"); + printSpace(from); - ContiguousSpace from = ((DefNewGeneration)gen).from(); - System.out.println("From Space:"); - printSpace(from); + ContiguousSpace to = ((DefNewGeneration)gen).to(); + System.out.println("To Space:"); + printSpace(to); + } else { + System.out.println(gen.name() + ":"); + printGen(gen); + } + } + } else if (sharedHeap instanceof G1CollectedHeap) { + G1CollectedHeap g1h = (G1CollectedHeap) sharedHeap; - ContiguousSpace to = ((DefNewGeneration)gen).to(); - System.out.println("To Space:"); - printSpace(to); - } else { - System.out.println(gen.name() + ":"); - printGen(gen); - } + System.out.println("Garbage-First (G1) Heap"); + long capacityBytes = g1h.capacity(); + long usedBytes = g1h.used(); + long freeBytes = capacityBytes - usedBytes; + printValMB("region size = ", HeapRegion.grainBytes()); + printValue("regions = ", g1h.n_regions()); + printValMB("capacity = ", capacityBytes); + printValMB("used = ", usedBytes); + printValMB("free = ", freeBytes); + System.out.println(alignment + (double) usedBytes * 100.0 / capacityBytes + "% used"); + } else { + throw new RuntimeException("unknown SharedHeap type : " + heap.getClass()); } - // Perm generation - Generation permGen = genHeap.permGen(); + // Perm generation shared by the above + Generation permGen = sharedHeap.permGen(); System.out.println("Perm Generation:"); printGen(permGen); } else if (heap instanceof ParallelScavengeHeap) { @@ -119,7 +137,7 @@ printValMB("free = ", permFree); System.out.println(alignment + (double)permGen.used() * 100.0 / permGen.capacity() + "% used"); } else { - throw new RuntimeException("unknown heap type : " + heap.getClass()); + throw new RuntimeException("unknown CollectedHeap type : " + heap.getClass()); } } @@ -151,6 +169,14 @@ return; } + l = getFlagValue("UseG1GC", flagMap); + if (l == 1L) { + System.out.print("Garbage-First (G1) GC "); + l = getFlagValue("ParallelGCThreads", flagMap); + System.out.println("with " + l + " thread(s)"); + return; + } + System.out.println("Mark Sweep Compact GC"); }