Mercurial > hg > graal-compiler
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: