hotspot/agent/src/share/classes/sun/jvm/hotspot/tools/HeapSummary.java
author tonyp
Mon, 03 Oct 2011 19:04:14 -0400
changeset 10675 8b887b2cb116
parent 10663 3ef855a3329b
child 10985 f529e2356036
permissions -rw-r--r--
7097048: G1: extend the G1 SA changes to print per-heap space information Reviewed-by: brutisso, johnc
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
     1
/*
10663
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents: 5547
diff changeset
     2
 * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
489c9b5090e2 Initial load
duke
parents:
diff changeset
     4
 *
489c9b5090e2 Initial load
duke
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
489c9b5090e2 Initial load
duke
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
489c9b5090e2 Initial load
duke
parents:
diff changeset
     7
 * published by the Free Software Foundation.
489c9b5090e2 Initial load
duke
parents:
diff changeset
     8
 *
489c9b5090e2 Initial load
duke
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
489c9b5090e2 Initial load
duke
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
489c9b5090e2 Initial load
duke
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
489c9b5090e2 Initial load
duke
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
489c9b5090e2 Initial load
duke
parents:
diff changeset
    13
 * accompanied this code).
489c9b5090e2 Initial load
duke
parents:
diff changeset
    14
 *
489c9b5090e2 Initial load
duke
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
489c9b5090e2 Initial load
duke
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
489c9b5090e2 Initial load
duke
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
489c9b5090e2 Initial load
duke
parents:
diff changeset
    18
 *
5547
f4b087cbb361 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 1217
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
f4b087cbb361 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 1217
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
f4b087cbb361 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 1217
diff changeset
    21
 * questions.
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    22
 *
489c9b5090e2 Initial load
duke
parents:
diff changeset
    23
 */
489c9b5090e2 Initial load
duke
parents:
diff changeset
    24
489c9b5090e2 Initial load
duke
parents:
diff changeset
    25
package sun.jvm.hotspot.tools;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    26
489c9b5090e2 Initial load
duke
parents:
diff changeset
    27
import java.util.*;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    28
import sun.jvm.hotspot.gc_interface.*;
10663
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents: 5547
diff changeset
    29
import sun.jvm.hotspot.gc_implementation.g1.*;
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    30
import sun.jvm.hotspot.gc_implementation.parallelScavenge.*;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    31
import sun.jvm.hotspot.gc_implementation.shared.*;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    32
import sun.jvm.hotspot.memory.*;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    33
import sun.jvm.hotspot.runtime.*;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    34
489c9b5090e2 Initial load
duke
parents:
diff changeset
    35
public class HeapSummary extends Tool {
489c9b5090e2 Initial load
duke
parents:
diff changeset
    36
489c9b5090e2 Initial load
duke
parents:
diff changeset
    37
   public static void main(String[] args) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
    38
      HeapSummary hs = new HeapSummary();
489c9b5090e2 Initial load
duke
parents:
diff changeset
    39
      hs.start(args);
489c9b5090e2 Initial load
duke
parents:
diff changeset
    40
      hs.stop();
489c9b5090e2 Initial load
duke
parents:
diff changeset
    41
   }
489c9b5090e2 Initial load
duke
parents:
diff changeset
    42
489c9b5090e2 Initial load
duke
parents:
diff changeset
    43
   public void run() {
489c9b5090e2 Initial load
duke
parents:
diff changeset
    44
      CollectedHeap heap = VM.getVM().getUniverse().heap();
489c9b5090e2 Initial load
duke
parents:
diff changeset
    45
      VM.Flag[] flags = VM.getVM().getCommandLineFlags();
489c9b5090e2 Initial load
duke
parents:
diff changeset
    46
      Map flagMap = new HashMap();
489c9b5090e2 Initial load
duke
parents:
diff changeset
    47
      if (flags == null) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
    48
         System.out.println("WARNING: command line flags are not available");
489c9b5090e2 Initial load
duke
parents:
diff changeset
    49
      } else {
489c9b5090e2 Initial load
duke
parents:
diff changeset
    50
         for (int f = 0; f < flags.length; f++) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
    51
            flagMap.put(flags[f].getName(), flags[f]);
489c9b5090e2 Initial load
duke
parents:
diff changeset
    52
         }
489c9b5090e2 Initial load
duke
parents:
diff changeset
    53
      }
489c9b5090e2 Initial load
duke
parents:
diff changeset
    54
489c9b5090e2 Initial load
duke
parents:
diff changeset
    55
      System.out.println();
489c9b5090e2 Initial load
duke
parents:
diff changeset
    56
      printGCAlgorithm(flagMap);
489c9b5090e2 Initial load
duke
parents:
diff changeset
    57
      System.out.println();
489c9b5090e2 Initial load
duke
parents:
diff changeset
    58
      System.out.println("Heap Configuration:");
489c9b5090e2 Initial load
duke
parents:
diff changeset
    59
      printValue("MinHeapFreeRatio = ", getFlagValue("MinHeapFreeRatio", flagMap));
489c9b5090e2 Initial load
duke
parents:
diff changeset
    60
      printValue("MaxHeapFreeRatio = ", getFlagValue("MaxHeapFreeRatio", flagMap));
489c9b5090e2 Initial load
duke
parents:
diff changeset
    61
      printValMB("MaxHeapSize      = ", getFlagValue("MaxHeapSize", flagMap));
489c9b5090e2 Initial load
duke
parents:
diff changeset
    62
      printValMB("NewSize          = ", getFlagValue("NewSize", flagMap));
489c9b5090e2 Initial load
duke
parents:
diff changeset
    63
      printValMB("MaxNewSize       = ", getFlagValue("MaxNewSize", flagMap));
489c9b5090e2 Initial load
duke
parents:
diff changeset
    64
      printValMB("OldSize          = ", getFlagValue("OldSize", flagMap));
489c9b5090e2 Initial load
duke
parents:
diff changeset
    65
      printValue("NewRatio         = ", getFlagValue("NewRatio", flagMap));
489c9b5090e2 Initial load
duke
parents:
diff changeset
    66
      printValue("SurvivorRatio    = ", getFlagValue("SurvivorRatio", flagMap));
489c9b5090e2 Initial load
duke
parents:
diff changeset
    67
      printValMB("PermSize         = ", getFlagValue("PermSize", flagMap));
489c9b5090e2 Initial load
duke
parents:
diff changeset
    68
      printValMB("MaxPermSize      = ", getFlagValue("MaxPermSize", flagMap));
489c9b5090e2 Initial load
duke
parents:
diff changeset
    69
489c9b5090e2 Initial load
duke
parents:
diff changeset
    70
      System.out.println();
489c9b5090e2 Initial load
duke
parents:
diff changeset
    71
      System.out.println("Heap Usage:");
489c9b5090e2 Initial load
duke
parents:
diff changeset
    72
10663
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents: 5547
diff changeset
    73
      if (heap instanceof SharedHeap) {
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents: 5547
diff changeset
    74
         SharedHeap sharedHeap = (SharedHeap) heap;
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents: 5547
diff changeset
    75
         if (sharedHeap instanceof GenCollectedHeap) {
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents: 5547
diff changeset
    76
            GenCollectedHeap genHeap = (GenCollectedHeap) sharedHeap;
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents: 5547
diff changeset
    77
            for (int n = 0; n < genHeap.nGens(); n++) {
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents: 5547
diff changeset
    78
               Generation gen = genHeap.getGen(n);
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents: 5547
diff changeset
    79
               if (gen instanceof sun.jvm.hotspot.memory.DefNewGeneration) {
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents: 5547
diff changeset
    80
                  System.out.println("New Generation (Eden + 1 Survivor Space):");
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents: 5547
diff changeset
    81
                  printGen(gen);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    82
10663
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents: 5547
diff changeset
    83
                  ContiguousSpace eden = ((DefNewGeneration)gen).eden();
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents: 5547
diff changeset
    84
                  System.out.println("Eden Space:");
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents: 5547
diff changeset
    85
                  printSpace(eden);
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents: 5547
diff changeset
    86
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents: 5547
diff changeset
    87
                  ContiguousSpace from = ((DefNewGeneration)gen).from();
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents: 5547
diff changeset
    88
                  System.out.println("From Space:");
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents: 5547
diff changeset
    89
                  printSpace(from);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    90
10663
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents: 5547
diff changeset
    91
                  ContiguousSpace to = ((DefNewGeneration)gen).to();
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents: 5547
diff changeset
    92
                  System.out.println("To Space:");
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents: 5547
diff changeset
    93
                  printSpace(to);
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents: 5547
diff changeset
    94
               } else {
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents: 5547
diff changeset
    95
                  System.out.println(gen.name() + ":");
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents: 5547
diff changeset
    96
                  printGen(gen);
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents: 5547
diff changeset
    97
               }
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents: 5547
diff changeset
    98
            }
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents: 5547
diff changeset
    99
         } else if (sharedHeap instanceof G1CollectedHeap) {
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents: 5547
diff changeset
   100
             G1CollectedHeap g1h = (G1CollectedHeap) sharedHeap;
10675
8b887b2cb116 7097048: G1: extend the G1 SA changes to print per-heap space information
tonyp
parents: 10663
diff changeset
   101
             G1MonitoringSupport g1mm = g1h.g1mm();
8b887b2cb116 7097048: G1: extend the G1 SA changes to print per-heap space information
tonyp
parents: 10663
diff changeset
   102
             System.out.println("G1 Young Generation");
8b887b2cb116 7097048: G1: extend the G1 SA changes to print per-heap space information
tonyp
parents: 10663
diff changeset
   103
             printG1Space("Eden Space:", g1mm.edenUsed(), g1mm.edenCommitted());
8b887b2cb116 7097048: G1: extend the G1 SA changes to print per-heap space information
tonyp
parents: 10663
diff changeset
   104
             printG1Space("From Space:", g1mm.survivorUsed(), g1mm.survivorCommitted());
8b887b2cb116 7097048: G1: extend the G1 SA changes to print per-heap space information
tonyp
parents: 10663
diff changeset
   105
             printG1Space("To Space:", 0, 0);
8b887b2cb116 7097048: G1: extend the G1 SA changes to print per-heap space information
tonyp
parents: 10663
diff changeset
   106
             printG1Space("G1 Old Generation", g1mm.oldUsed(), g1mm.oldCommitted());
10663
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents: 5547
diff changeset
   107
         } else {
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents: 5547
diff changeset
   108
             throw new RuntimeException("unknown SharedHeap type : " + heap.getClass());
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   109
         }
10663
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents: 5547
diff changeset
   110
         // Perm generation shared by the above
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents: 5547
diff changeset
   111
         Generation permGen = sharedHeap.permGen();
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   112
         System.out.println("Perm Generation:");
489c9b5090e2 Initial load
duke
parents:
diff changeset
   113
         printGen(permGen);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   114
      } else if (heap instanceof ParallelScavengeHeap) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   115
         ParallelScavengeHeap psh = (ParallelScavengeHeap) heap;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   116
         PSYoungGen youngGen = psh.youngGen();
489c9b5090e2 Initial load
duke
parents:
diff changeset
   117
         printPSYoungGen(youngGen);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   118
489c9b5090e2 Initial load
duke
parents:
diff changeset
   119
         PSOldGen oldGen = psh.oldGen();
489c9b5090e2 Initial load
duke
parents:
diff changeset
   120
         long oldFree = oldGen.capacity() - oldGen.used();
489c9b5090e2 Initial load
duke
parents:
diff changeset
   121
         System.out.println("PS Old Generation");
489c9b5090e2 Initial load
duke
parents:
diff changeset
   122
         printValMB("capacity = ", oldGen.capacity());
489c9b5090e2 Initial load
duke
parents:
diff changeset
   123
         printValMB("used     = ", oldGen.used());
489c9b5090e2 Initial load
duke
parents:
diff changeset
   124
         printValMB("free     = ", oldFree);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   125
         System.out.println(alignment + (double)oldGen.used() * 100.0 / oldGen.capacity() + "% used");
489c9b5090e2 Initial load
duke
parents:
diff changeset
   126
489c9b5090e2 Initial load
duke
parents:
diff changeset
   127
         PSPermGen permGen = psh.permGen();
489c9b5090e2 Initial load
duke
parents:
diff changeset
   128
         long permFree = permGen.capacity() - permGen.used();
489c9b5090e2 Initial load
duke
parents:
diff changeset
   129
         System.out.println("PS Perm Generation");
489c9b5090e2 Initial load
duke
parents:
diff changeset
   130
         printValMB("capacity = ", permGen.capacity());
489c9b5090e2 Initial load
duke
parents:
diff changeset
   131
         printValMB("used     = ", permGen.used());
489c9b5090e2 Initial load
duke
parents:
diff changeset
   132
         printValMB("free     = ", permFree);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   133
         System.out.println(alignment + (double)permGen.used() * 100.0 / permGen.capacity() + "% used");
489c9b5090e2 Initial load
duke
parents:
diff changeset
   134
      } else {
10663
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents: 5547
diff changeset
   135
         throw new RuntimeException("unknown CollectedHeap type : " + heap.getClass());
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   136
      }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   137
   }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   138
489c9b5090e2 Initial load
duke
parents:
diff changeset
   139
   // Helper methods
489c9b5090e2 Initial load
duke
parents:
diff changeset
   140
489c9b5090e2 Initial load
duke
parents:
diff changeset
   141
   private void printGCAlgorithm(Map flagMap) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   142
       // print about new generation
489c9b5090e2 Initial load
duke
parents:
diff changeset
   143
       long l = getFlagValue("UseParNewGC", flagMap);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   144
       if (l == 1L) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   145
          System.out.println("using parallel threads in the new generation.");
489c9b5090e2 Initial load
duke
parents:
diff changeset
   146
       }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   147
489c9b5090e2 Initial load
duke
parents:
diff changeset
   148
       l = getFlagValue("UseTLAB", flagMap);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   149
       if (l == 1L) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   150
          System.out.println("using thread-local object allocation.");
489c9b5090e2 Initial load
duke
parents:
diff changeset
   151
       }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   152
489c9b5090e2 Initial load
duke
parents:
diff changeset
   153
       l = getFlagValue("UseConcMarkSweepGC", flagMap);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   154
       if (l == 1L) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   155
          System.out.println("Concurrent Mark-Sweep GC");
489c9b5090e2 Initial load
duke
parents:
diff changeset
   156
          return;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   157
       }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   158
489c9b5090e2 Initial load
duke
parents:
diff changeset
   159
       l = getFlagValue("UseParallelGC", flagMap);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   160
       if (l == 1L) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   161
          System.out.print("Parallel GC ");
489c9b5090e2 Initial load
duke
parents:
diff changeset
   162
          l = getFlagValue("ParallelGCThreads", flagMap);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   163
          System.out.println("with " + l + " thread(s)");
489c9b5090e2 Initial load
duke
parents:
diff changeset
   164
          return;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   165
       }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   166
10663
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents: 5547
diff changeset
   167
       l = getFlagValue("UseG1GC", flagMap);
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents: 5547
diff changeset
   168
       if (l == 1L) {
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents: 5547
diff changeset
   169
           System.out.print("Garbage-First (G1) GC ");
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents: 5547
diff changeset
   170
           l = getFlagValue("ParallelGCThreads", flagMap);
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents: 5547
diff changeset
   171
           System.out.println("with " + l + " thread(s)");
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents: 5547
diff changeset
   172
           return;
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents: 5547
diff changeset
   173
       }
3ef855a3329b 7059019: G1: add G1 support to the SA
tonyp
parents: 5547
diff changeset
   174
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   175
       System.out.println("Mark Sweep Compact GC");
489c9b5090e2 Initial load
duke
parents:
diff changeset
   176
   }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   177
489c9b5090e2 Initial load
duke
parents:
diff changeset
   178
   private void printPSYoungGen(PSYoungGen youngGen) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   179
      System.out.println("PS Young Generation");
489c9b5090e2 Initial load
duke
parents:
diff changeset
   180
      MutableSpace eden = youngGen.edenSpace();
489c9b5090e2 Initial load
duke
parents:
diff changeset
   181
      System.out.println("Eden Space:");
489c9b5090e2 Initial load
duke
parents:
diff changeset
   182
      printMutableSpace(eden);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   183
      MutableSpace from = youngGen.fromSpace();
489c9b5090e2 Initial load
duke
parents:
diff changeset
   184
      System.out.println("From Space:");
489c9b5090e2 Initial load
duke
parents:
diff changeset
   185
      printMutableSpace(from);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   186
      MutableSpace to = youngGen.toSpace();
489c9b5090e2 Initial load
duke
parents:
diff changeset
   187
      System.out.println("To Space:");
489c9b5090e2 Initial load
duke
parents:
diff changeset
   188
      printMutableSpace(to);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   189
   }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   190
489c9b5090e2 Initial load
duke
parents:
diff changeset
   191
   private void printMutableSpace(MutableSpace space) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   192
      printValMB("capacity = ", space.capacity());
489c9b5090e2 Initial load
duke
parents:
diff changeset
   193
      printValMB("used     = ", space.used());
489c9b5090e2 Initial load
duke
parents:
diff changeset
   194
      long free = space.capacity() - space.used();
489c9b5090e2 Initial load
duke
parents:
diff changeset
   195
      printValMB("free     = ", free);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   196
      System.out.println(alignment + (double)space.used() * 100.0 / space.capacity() + "% used");
489c9b5090e2 Initial load
duke
parents:
diff changeset
   197
   }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   198
489c9b5090e2 Initial load
duke
parents:
diff changeset
   199
   private static String alignment = "   ";
489c9b5090e2 Initial load
duke
parents:
diff changeset
   200
489c9b5090e2 Initial load
duke
parents:
diff changeset
   201
   private void printGen(Generation gen) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   202
      printValMB("capacity = ", gen.capacity());
489c9b5090e2 Initial load
duke
parents:
diff changeset
   203
      printValMB("used     = ", gen.used());
489c9b5090e2 Initial load
duke
parents:
diff changeset
   204
      printValMB("free     = ", gen.free());
489c9b5090e2 Initial load
duke
parents:
diff changeset
   205
      System.out.println(alignment + (double)gen.used() * 100.0 / gen.capacity() + "% used");
489c9b5090e2 Initial load
duke
parents:
diff changeset
   206
   }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   207
489c9b5090e2 Initial load
duke
parents:
diff changeset
   208
   private void printSpace(ContiguousSpace space) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   209
      printValMB("capacity = ", space.capacity());
489c9b5090e2 Initial load
duke
parents:
diff changeset
   210
      printValMB("used     = ", space.used());
489c9b5090e2 Initial load
duke
parents:
diff changeset
   211
      printValMB("free     = ", space.free());
489c9b5090e2 Initial load
duke
parents:
diff changeset
   212
      System.out.println(alignment +  (double)space.used() * 100.0 / space.capacity() + "% used");
489c9b5090e2 Initial load
duke
parents:
diff changeset
   213
   }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   214
10675
8b887b2cb116 7097048: G1: extend the G1 SA changes to print per-heap space information
tonyp
parents: 10663
diff changeset
   215
   private void printG1Space(String spaceName, long used, long capacity) {
8b887b2cb116 7097048: G1: extend the G1 SA changes to print per-heap space information
tonyp
parents: 10663
diff changeset
   216
      long free = capacity - used;
8b887b2cb116 7097048: G1: extend the G1 SA changes to print per-heap space information
tonyp
parents: 10663
diff changeset
   217
      System.out.println(spaceName);
8b887b2cb116 7097048: G1: extend the G1 SA changes to print per-heap space information
tonyp
parents: 10663
diff changeset
   218
      printValMB("capacity = ", capacity);
8b887b2cb116 7097048: G1: extend the G1 SA changes to print per-heap space information
tonyp
parents: 10663
diff changeset
   219
      printValMB("used     = ", used);
8b887b2cb116 7097048: G1: extend the G1 SA changes to print per-heap space information
tonyp
parents: 10663
diff changeset
   220
      printValMB("free     = ", free);
8b887b2cb116 7097048: G1: extend the G1 SA changes to print per-heap space information
tonyp
parents: 10663
diff changeset
   221
      double occPerc = (capacity > 0) ? (double) used * 100.0 / capacity : 0.0;
8b887b2cb116 7097048: G1: extend the G1 SA changes to print per-heap space information
tonyp
parents: 10663
diff changeset
   222
      System.out.println(alignment + occPerc + "% used");
8b887b2cb116 7097048: G1: extend the G1 SA changes to print per-heap space information
tonyp
parents: 10663
diff changeset
   223
   }
8b887b2cb116 7097048: G1: extend the G1 SA changes to print per-heap space information
tonyp
parents: 10663
diff changeset
   224
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   225
   private static final double FACTOR = 1024*1024;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   226
   private void printValMB(String title, long value) {
989
04e4dadeec8a 6718125: SA: jmap prints negative size for MaxNewHeap.
swamyv
parents: 1
diff changeset
   227
      if (value < 0) {
04e4dadeec8a 6718125: SA: jmap prints negative size for MaxNewHeap.
swamyv
parents: 1
diff changeset
   228
        System.out.println(alignment + title +   (value >>> 20)  + " MB");
04e4dadeec8a 6718125: SA: jmap prints negative size for MaxNewHeap.
swamyv
parents: 1
diff changeset
   229
      } else {
04e4dadeec8a 6718125: SA: jmap prints negative size for MaxNewHeap.
swamyv
parents: 1
diff changeset
   230
        double mb = value/FACTOR;
04e4dadeec8a 6718125: SA: jmap prints negative size for MaxNewHeap.
swamyv
parents: 1
diff changeset
   231
        System.out.println(alignment + title + value + " (" + mb + "MB)");
04e4dadeec8a 6718125: SA: jmap prints negative size for MaxNewHeap.
swamyv
parents: 1
diff changeset
   232
      }
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   233
   }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   234
489c9b5090e2 Initial load
duke
parents:
diff changeset
   235
   private void printValue(String title, long value) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   236
      System.out.println(alignment + title + value);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   237
   }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   238
489c9b5090e2 Initial load
duke
parents:
diff changeset
   239
   private long getFlagValue(String name, Map flagMap) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   240
      VM.Flag f = (VM.Flag) flagMap.get(name);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   241
      if (f != null) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   242
         if (f.isBool()) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   243
            return f.getBool()? 1L : 0L;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   244
         } else {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   245
            return Long.parseLong(f.getValue());
489c9b5090e2 Initial load
duke
parents:
diff changeset
   246
         }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   247
      } else {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   248
         return -1;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   249
      }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   250
   }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   251
}