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
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
1122 anno = anno + oop.getKlass().getName().asString();
1123 } else {
1124 ByteArrayOutputStream bos = new ByteArrayOutputStream();
1125 Oop.printOopValueOn(oop, new PrintStream(bos));
1126 anno = anno + bos.toString();
1127 }
1128 }
1129 catch (AddressException e) {
1130 anno += "CORRUPT OOP";
|
1 /*
2 * Copyright (c) 2000, 2018, 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.gc.z.*;
40 import sun.jvm.hotspot.interpreter.*;
41 import sun.jvm.hotspot.memory.*;
42 import sun.jvm.hotspot.oops.*;
43 import sun.jvm.hotspot.runtime.*;
44 import sun.jvm.hotspot.ui.*;
45 import sun.jvm.hotspot.ui.tree.*;
46 import sun.jvm.hotspot.ui.classbrowser.*;
47 import sun.jvm.hotspot.utilities.*;
48
49 /** The top-level HotSpot Debugger. FIXME: make this an embeddable
50 component! (Among other things, figure out what to do with the
51 menu bar...) */
52
53 public class HSDB implements ObjectHistogramPanel.Listener, SAListener {
54 public static void main(String[] args) {
55 new HSDB(args).run();
56 }
57
58 //--------------------------------------------------------------------------------
59 // Internals only below this point
1092 bad = false;
1093 } else if (region.isHumongous()) {
1094 anno = "Humongous ";
1095 bad = false;
1096 } else if (region.isPinned()) {
1097 anno = "Pinned ";
1098 bad = false;
1099 } else if (region.isOld()) {
1100 anno = "Old ";
1101 bad = false;
1102 }
1103 } else if (collHeap instanceof ParallelScavengeHeap) {
1104 ParallelScavengeHeap heap = (ParallelScavengeHeap) collHeap;
1105 if (heap.youngGen().isIn(handle)) {
1106 anno = "PSYoungGen ";
1107 bad = false;
1108 } else if (heap.oldGen().isIn(handle)) {
1109 anno = "PSOldGen ";
1110 bad = false;
1111 }
1112 } else if (collHeap instanceof ZCollectedHeap) {
1113 ZCollectedHeap heap = (ZCollectedHeap) collHeap;
1114 anno = "ZHeap ";
1115 bad = false;
1116 } else {
1117 // Optimistically assume the oop isn't bad
1118 anno = "[Unknown generation] ";
1119 bad = false;
1120 }
1121
1122 if (!bad) {
1123 try {
1124 Oop oop = VM.getVM().getObjectHeap().newOop(handle);
1125 if (oop instanceof Instance) {
1126 // Java-level objects always have workable names
1127 anno = anno + oop.getKlass().getName().asString();
1128 } else {
1129 ByteArrayOutputStream bos = new ByteArrayOutputStream();
1130 Oop.printOopValueOn(oop, new PrintStream(bos));
1131 anno = anno + bos.toString();
1132 }
1133 }
1134 catch (AddressException e) {
1135 anno += "CORRUPT OOP";
|