< prev index next >

src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/HSDB.java

Print this page


   1 /*
   2  * Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
   3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   4  *
   5  * This code is free software; you can redistribute it and/or modify it
   6  * under the terms of the GNU General Public License version 2 only, as
   7  * published by the Free Software Foundation.
   8  *
   9  * This code is distributed in the hope that it will be useful, but WITHOUT
  10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  12  * version 2 for more details (a copy is included in the LICENSE file that
  13  * accompanied this code).
  14  *
  15  * You should have received a copy of the GNU General Public License version
  16  * 2 along with this work; if not, write to the Free Software Foundation,
  17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  18  *
  19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  20  * or visit www.oracle.com if you need additional information or have any
  21  * questions.
  22  *
  23  */
  24 
  25 package sun.jvm.hotspot;
  26 
  27 import java.io.*;
  28 import java.awt.*;
  29 import java.awt.event.*;
  30 import javax.swing.*;
  31 import java.util.*;
  32 
  33 import sun.jvm.hotspot.code.*;
  34 import sun.jvm.hotspot.compiler.*;
  35 import sun.jvm.hotspot.debugger.*;
  36 import sun.jvm.hotspot.gc.parallel.*;
  37 import sun.jvm.hotspot.gc.shared.*;

  38 import sun.jvm.hotspot.interpreter.*;
  39 import sun.jvm.hotspot.memory.*;
  40 import sun.jvm.hotspot.oops.*;
  41 import sun.jvm.hotspot.runtime.*;
  42 import sun.jvm.hotspot.ui.*;
  43 import sun.jvm.hotspot.ui.tree.*;
  44 import sun.jvm.hotspot.ui.classbrowser.*;
  45 import sun.jvm.hotspot.utilities.*;
  46 
  47 /** The top-level HotSpot Debugger. FIXME: make this an embeddable
  48     component! (Among other things, figure out what to do with the
  49     menu bar...) */
  50 
  51 public class HSDB implements ObjectHistogramPanel.Listener, SAListener {
  52   public static void main(String[] args) {
  53     new HSDB(args).run();
  54   }
  55 
  56   //--------------------------------------------------------------------------------
  57   // Internals only below this point


1061                         // Find location
1062                         CollectedHeap collHeap = VM.getVM().getUniverse().heap();
1063                         boolean bad = true;
1064                         anno = "BAD OOP";
1065                         if (collHeap instanceof GenCollectedHeap) {
1066                           GenCollectedHeap heap = (GenCollectedHeap) collHeap;
1067                           for (int i = 0; i < heap.nGens(); i++) {
1068                             if (heap.getGen(i).isIn(handle)) {
1069                               if (i == 0) {
1070                                 anno = "NewGen ";
1071                               } else if (i == 1) {
1072                                 anno = "OldGen ";
1073                               } else {
1074                                 anno = "Gen " + i + " ";
1075                               }
1076                               bad = false;
1077                               break;
1078                             }
1079                           }
1080 




















1081                         } else if (collHeap instanceof ParallelScavengeHeap) {
1082                           ParallelScavengeHeap heap = (ParallelScavengeHeap) collHeap;
1083                           if (heap.youngGen().isIn(handle)) {
1084                             anno = "PSYoungGen ";
1085                             bad = false;
1086                           } else if (heap.oldGen().isIn(handle)) {
1087                             anno = "PSOldGen ";
1088                             bad = false;
1089                           }
1090                         } else {
1091                           // Optimistically assume the oop isn't bad
1092                           anno = "[Unknown generation] ";
1093                           bad = false;
1094                         }
1095 
1096                         if (!bad) {
1097                           try {
1098                             Oop oop = VM.getVM().getObjectHeap().newOop(handle);
1099                             if (oop instanceof Instance) {
1100                                 // Java-level objects always have workable names


   1 /*
   2  * Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
   3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   4  *
   5  * This code is free software; you can redistribute it and/or modify it
   6  * under the terms of the GNU General Public License version 2 only, as
   7  * published by the Free Software Foundation.
   8  *
   9  * This code is distributed in the hope that it will be useful, but WITHOUT
  10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  12  * version 2 for more details (a copy is included in the LICENSE file that
  13  * accompanied this code).
  14  *
  15  * You should have received a copy of the GNU General Public License version
  16  * 2 along with this work; if not, write to the Free Software Foundation,
  17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  18  *
  19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  20  * or visit www.oracle.com if you need additional information or have any
  21  * questions.
  22  *
  23  */
  24 
  25 package sun.jvm.hotspot;
  26 
  27 import java.io.*;
  28 import java.awt.*;
  29 import java.awt.event.*;
  30 import javax.swing.*;
  31 import java.util.*;
  32 
  33 import sun.jvm.hotspot.code.*;
  34 import sun.jvm.hotspot.compiler.*;
  35 import sun.jvm.hotspot.debugger.*;
  36 import sun.jvm.hotspot.gc.parallel.*;
  37 import sun.jvm.hotspot.gc.shared.*;
  38 import sun.jvm.hotspot.gc.g1.*;
  39 import sun.jvm.hotspot.interpreter.*;
  40 import sun.jvm.hotspot.memory.*;
  41 import sun.jvm.hotspot.oops.*;
  42 import sun.jvm.hotspot.runtime.*;
  43 import sun.jvm.hotspot.ui.*;
  44 import sun.jvm.hotspot.ui.tree.*;
  45 import sun.jvm.hotspot.ui.classbrowser.*;
  46 import sun.jvm.hotspot.utilities.*;
  47 
  48 /** The top-level HotSpot Debugger. FIXME: make this an embeddable
  49     component! (Among other things, figure out what to do with the
  50     menu bar...) */
  51 
  52 public class HSDB implements ObjectHistogramPanel.Listener, SAListener {
  53   public static void main(String[] args) {
  54     new HSDB(args).run();
  55   }
  56 
  57   //--------------------------------------------------------------------------------
  58   // Internals only below this point


1062                         // Find location
1063                         CollectedHeap collHeap = VM.getVM().getUniverse().heap();
1064                         boolean bad = true;
1065                         anno = "BAD OOP";
1066                         if (collHeap instanceof GenCollectedHeap) {
1067                           GenCollectedHeap heap = (GenCollectedHeap) collHeap;
1068                           for (int i = 0; i < heap.nGens(); i++) {
1069                             if (heap.getGen(i).isIn(handle)) {
1070                               if (i == 0) {
1071                                 anno = "NewGen ";
1072                               } else if (i == 1) {
1073                                 anno = "OldGen ";
1074                               } else {
1075                                 anno = "Gen " + i + " ";
1076                               }
1077                               bad = false;
1078                               break;
1079                             }
1080                           }
1081 
1082                         } else if (collHeap instanceof G1CollectedHeap) {
1083                           G1CollectedHeap heap = (G1CollectedHeap)collHeap;
1084                           HeapRegion region = heap.hrm().addrToRegion(handle);
1085 
1086                           if (region.isFree()) {
1087                             anno = "Free ";
1088                             bad = false;
1089                           } else if (region.isYoung()) {
1090                             anno = "Young ";
1091                             bad = false;
1092                           } else if (region.isHumongous()) {
1093                             anno = "Humongous ";
1094                             bad = false;
1095                           } else if (region.isPinned()) {
1096                             anno = "Pinned ";
1097                             bad = false;
1098                           } else if (region.isOld()) {
1099                             anno = "Old ";
1100                             bad = false;
1101                           }
1102                         } else if (collHeap instanceof ParallelScavengeHeap) {
1103                           ParallelScavengeHeap heap = (ParallelScavengeHeap) collHeap;
1104                           if (heap.youngGen().isIn(handle)) {
1105                             anno = "PSYoungGen ";
1106                             bad = false;
1107                           } else if (heap.oldGen().isIn(handle)) {
1108                             anno = "PSOldGen ";
1109                             bad = false;
1110                           }
1111                         } else {
1112                           // Optimistically assume the oop isn't bad
1113                           anno = "[Unknown generation] ";
1114                           bad = false;
1115                         }
1116 
1117                         if (!bad) {
1118                           try {
1119                             Oop oop = VM.getVM().getObjectHeap().newOop(handle);
1120                             if (oop instanceof Instance) {
1121                                 // Java-level objects always have workable names


< prev index next >