diff src/share/vm/utilities/debug.cpp @ 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 6c5b7a6becc8
children 145ffab733e7
line wrap: on
line diff
--- a/src/share/vm/utilities/debug.cpp	Fri Aug 31 16:39:35 2012 -0700
+++ b/src/share/vm/utilities/debug.cpp	Sat Sep 01 13:25:18 2012 -0400
@@ -264,6 +264,10 @@
   report_vm_error(file, line, "ShouldNotReachHere()");
 }
 
+void report_should_not_reach_here2(const char* file, int line, const char* message) {
+  report_vm_error(file, line, "ShouldNotReachHere()", message);
+}
+
 void report_unimplemented(const char* file, int line) {
   report_vm_error(file, line, "Unimplemented()");
 }
@@ -276,13 +280,13 @@
 
 void report_out_of_shared_space(SharedSpaceType shared_space) {
   static const char* name[] = {
-    "permanent generation",
+    "native memory for metadata",
     "shared read only space",
     "shared read write space",
     "shared miscellaneous data space"
   };
   static const char* flag[] = {
-    "PermGen",
+    "Metaspace",
     "SharedReadOnlySize",
     "SharedReadWriteSize",
     "SharedMiscDataSize"
@@ -413,8 +417,8 @@
 
 extern "C" void dump_vtable(address p) {
   Command c("dump_vtable");
-  klassOop k = (klassOop)p;
-  instanceKlass::cast(k)->vtable()->print();
+  Klass* k = (Klass*)p;
+  InstanceKlass::cast(k)->vtable()->print();
 }
 
 
@@ -627,10 +631,10 @@
 }
 
 
-extern "C" methodOop findm(intptr_t pc) {
+extern "C" Method* findm(intptr_t pc) {
   Command c("findm");
   nmethod* nm = CodeCache::find_nmethod((address)pc);
-  return (nm == NULL) ? (methodOop)NULL : nm->method();
+  return (nm == NULL) ? (Method*)NULL : nm->method();
 }
 
 
@@ -650,82 +654,6 @@
   }
 }
 
-class LookForRefInGenClosure : public OopsInGenClosure {
-public:
-  oop target;
-  void do_oop(oop* o) {
-    if (o != NULL && *o == target) {
-      tty->print_cr(INTPTR_FORMAT, o);
-    }
-  }
-  void do_oop(narrowOop* o) { ShouldNotReachHere(); }
-};
-
-
-class LookForRefInObjectClosure : public ObjectClosure {
-private:
-  LookForRefInGenClosure look_in_object;
-public:
-  LookForRefInObjectClosure(oop target) { look_in_object.target = target; }
-  void do_object(oop obj) {
-    obj->oop_iterate(&look_in_object);
-  }
-};
-
-
-static void findref(intptr_t x) {
-  CollectedHeap *ch = Universe::heap();
-  LookForRefInGenClosure lookFor;
-  lookFor.target = (oop) x;
-  LookForRefInObjectClosure look_in_object((oop) x);
-
-  tty->print_cr("Searching heap:");
-  ch->object_iterate(&look_in_object);
-
-  tty->print_cr("Searching strong roots:");
-  Universe::oops_do(&lookFor, false);
-  JNIHandles::oops_do(&lookFor);   // Global (strong) JNI handles
-  Threads::oops_do(&lookFor, NULL);
-  ObjectSynchronizer::oops_do(&lookFor);
-  //FlatProfiler::oops_do(&lookFor);
-  SystemDictionary::oops_do(&lookFor);
-
-  tty->print_cr("Searching code cache:");
-  CodeCache::oops_do(&lookFor);
-
-  tty->print_cr("Done.");
-}
-
-class FindClassObjectClosure: public ObjectClosure {
-  private:
-    const char* _target;
-  public:
-    FindClassObjectClosure(const char name[])  { _target = name; }
-
-    virtual void do_object(oop obj) {
-      if (obj->is_klass()) {
-        Klass* k = klassOop(obj)->klass_part();
-        if (k->name() != NULL) {
-          ResourceMark rm;
-          const char* ext = k->external_name();
-          if ( strcmp(_target, ext) == 0 ) {
-            tty->print_cr("Found " INTPTR_FORMAT, obj);
-            obj->print();
-          }
-        }
-      }
-    }
-};
-
-//
-extern "C" void findclass(const char name[]) {
-  Command c("findclass");
-  if (name != NULL) {
-    tty->print_cr("Finding class %s -> ", name);
-    FindClassObjectClosure srch(name);
-    Universe::heap()->permanent_object_iterate(&srch);
-  }
-}
 
 // Another interface that isn't ambiguous in dbx.
 // Can we someday rename the other find to hsfind?
@@ -735,11 +663,6 @@
 }
 
 
-extern "C" void hsfindref(intptr_t x) {
-  Command c("hsfindref");
-  findref(x);
-}
-
 extern "C" void find(intptr_t x) {
   Command c("find");
   os::print_location(tty, x, false);
@@ -752,6 +675,17 @@
 }
 
 
+// Need method pointer to find bcp, when not in permgen.
+extern "C" void findbcp(intptr_t method, intptr_t bcp) {
+  Command c("findbcp");
+  Method* mh = (Method*)method;
+  if (!mh->is_native()) {
+    tty->print_cr("bci_from(%p) = %d; print_codes():",
+                        mh, mh->bci_from(address(bcp)));
+    mh->print_codes_on(tty);
+  }
+}
+
 // int versions of all methods to avoid having to type type casts in the debugger
 
 void pp(intptr_t p)          { pp((void*)p); }
@@ -764,8 +698,8 @@
   tty->print_cr("  pv(intptr_t p)- ((PrintableResourceObj*) p)->print()");
   tty->print_cr("  ps()          - print current thread stack");
   tty->print_cr("  pss()         - print all thread stacks");
-  tty->print_cr("  pm(int pc)    - print methodOop given compiled PC");
-  tty->print_cr("  findm(intptr_t pc) - finds methodOop");
+  tty->print_cr("  pm(int pc)    - print Method* given compiled PC");
+  tty->print_cr("  findm(intptr_t pc) - finds Method*");
   tty->print_cr("  find(intptr_t x)   - finds & prints nmethod/stub/bytecode/oop based on pointer into it");
 
   tty->print_cr("misc.");
@@ -812,7 +746,7 @@
   (char *)"ps", CMDID_PS, "    Print Current Thread Stack Trace",
   (char *)"pss", CMDID_PSS, "   Print All Thread Stack Trace",
   (char *)"psf", CMDID_PSF, "   Print All Stack Frames",
-  (char *)"findm", CMDID_FINDM, " Find a methodOop from a PC",
+  (char *)"findm", CMDID_FINDM, " Find a Method* from a PC",
   (char *)"findnm", CMDID_FINDNM, "Find an nmethod from a PC",
   (char *)"pp", CMDID_PP, "    Find out something about a pointer",
   (char *)"break", CMDID_BPT, " Execute a breakpoint",
@@ -837,7 +771,7 @@
   intptr_t addr;
   char buffer[256];
   nmethod *nm;
-  methodOop m;
+  Method* m;
 
   tty->print_cr("You have entered the diagnostic command interpreter");
   tty->print("The supported commands are:\n");
@@ -872,7 +806,7 @@
               case CMDID_FINDM:
                 tty->print("Please enter the hex addr to pass to findm: ");
                 scanf("%I64X", &addr);
-                m = (methodOop)findm(addr);
+                m = (Method*)findm(addr);
                 tty->print("findm(0x%I64X) returned 0x%I64X\n", addr, m);
                 break;
               case CMDID_FINDNM: