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
|