Mercurial > hg > graal-jvmci-8
diff agent/src/share/classes/sun/jvm/hotspot/CommandProcessor.java @ 6725:da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
Summary: Remove PermGen, allocate meta-data in metaspace linked to class loaders, rewrite GC walking, rewrite and rename metadata to be C++ classes
Reviewed-by: jmasa, stefank, never, coleenp, kvn, brutisso, mgerdin, dholmes, jrose, twisti, roland
Contributed-by: jmasa <jon.masamitsu@oracle.com>, stefank <stefan.karlsson@oracle.com>, mgerdin <mikael.gerdin@oracle.com>, never <tom.rodriguez@oracle.com>
author | coleenp |
---|---|
date | Sat, 01 Sep 2012 13:25:18 -0400 |
parents | f6f3bb0ee072 |
children | 5a98bf7d847b |
line wrap: on
line diff
--- a/agent/src/share/classes/sun/jvm/hotspot/CommandProcessor.java Fri Aug 31 16:39:35 2012 -0700 +++ b/agent/src/share/classes/sun/jvm/hotspot/CommandProcessor.java Sat Sep 01 13:25:18 2012 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2012, 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 @@ -634,29 +634,57 @@ } else { String s = t.nextToken(); if (s.equals("-a")) { - HeapVisitor iterator = new DefaultHeapVisitor() { - public boolean doObj(Oop obj) { - if (obj instanceof MethodData) { - Method m = ((MethodData)obj).getMethod(); - out.println("MethodData " + obj.getHandle() + " for " + + SystemDictionary sysDict = VM.getVM().getSystemDictionary(); + sysDict.allClassesDo(new SystemDictionary.ClassVisitor() { + public void visit(Klass k) { + if (k instanceof InstanceKlass) { + MethodArray methods = ((InstanceKlass)k).getMethods(); + for (int i = 0; i < methods.length(); i++) { + Method m = methods.at(i); + MethodData mdo = m.getMethodData(); + if (mdo != null) { + out.println("MethodData " + mdo.getAddress() + " for " + "method " + m.getMethodHolder().getName().asString() + "." + m.getName().asString() + - m.getSignature().asString() + "@" + m.getHandle()); - ((MethodData)obj).printDataOn(out); + m.getSignature().asString() + "@" + m.getAddress()); + mdo.printDataOn(out); } - return false; + } + } } - }; - VM.getVM().getObjectHeap().iteratePerm(iterator); + } + ); } else { Address a = VM.getVM().getDebugger().parseAddress(s); - OopHandle handle = a.addOffsetToAsOopHandle(0); - MethodData mdo = (MethodData)VM.getVM().getObjectHeap().newOop(handle); + MethodData mdo = (MethodData) Metadata.instantiateWrapperFor(a); mdo.printDataOn(out); } } } }, + new Command("printall", "printall", false) { + // Print every MDO in the heap or the one referenced by expression. + public void doit(Tokens t) { + if (t.countTokens() != 0) { + usage(); + } else { + SystemDictionary sysDict = VM.getVM().getSystemDictionary(); + sysDict.allClassesDo(new SystemDictionary.ClassVisitor() { + public void visit(Klass k) { + if (k instanceof InstanceKlass && ((InstanceKlass)k).getConstants().getCache() != null) { + MethodArray methods = ((InstanceKlass)k).getMethods(); + for (int i = 0; i < methods.length(); i++) { + Method m = methods.at(i); + HTMLGenerator gen = new HTMLGenerator(false); + out.println(gen.genHTML(m)); + } + } + } + } + ); + } + } + }, new Command("dumpideal", "dumpideal { -a | id }", false) { // Do a full dump of the nodes reachabile from root in each compiler thread. public void doit(Tokens t) { @@ -1229,7 +1257,7 @@ } }; VM.getVM().getObjectHeap().iterateRaw(iterator); - } else if (type.equals("heap") || type.equals("perm")) { + } else if (type.equals("heap")) { HeapVisitor iterator = new DefaultHeapVisitor() { public boolean doObj(Oop obj) { int index = 0; @@ -1246,11 +1274,7 @@ return false; } }; - if (type.equals("heap")) { VM.getVM().getObjectHeap().iterate(iterator); - } else { - VM.getVM().getObjectHeap().iteratePerm(iterator); - } } else if (type.equals("codecache")) { CodeCacheVisitor v = new CodeCacheVisitor() { public void prologue(Address start, Address end) {