comparison src/share/vm/services/heapDumper.cpp @ 12848:539144972c1e

8024425: VM_HeapDumper doesn't put anonymous classes in the heap dump Summary: Switched from using SystemDictionary to using ClassLoaderDataGraph to get the anonymous classes included. Reviewed-by: sla, sspitsyn Contributed-by: fredrik.arvidsson@oracle.com
author sla
date Fri, 11 Oct 2013 14:08:02 +0200
parents 190899198332
children dcca80b5e7e7 78bbf4d43a14
comparison
equal deleted inserted replaced
12846:e831448418ac 12848:539144972c1e
1543 } while (k != NULL); 1543 } while (k != NULL);
1544 } 1544 }
1545 1545
1546 // writes a HPROF_GC_CLASS_DUMP record for the given class 1546 // writes a HPROF_GC_CLASS_DUMP record for the given class
1547 void VM_HeapDumper::do_class_dump(Klass* k) { 1547 void VM_HeapDumper::do_class_dump(Klass* k) {
1548 DumperSupport::dump_class_and_array_classes(writer(), k); 1548 if (k->oop_is_instance()) {
1549 DumperSupport::dump_class_and_array_classes(writer(), k);
1550 }
1549 } 1551 }
1550 1552
1551 // writes a HPROF_GC_CLASS_DUMP records for a given basic type 1553 // writes a HPROF_GC_CLASS_DUMP records for a given basic type
1552 // array (and each multi-dimensional array too) 1554 // array (and each multi-dimensional array too)
1553 void VM_HeapDumper::do_basic_type_array_class_dump(Klass* k) { 1555 void VM_HeapDumper::do_basic_type_array_class_dump(Klass* k) {
1720 // HPROF_UTF8 records 1722 // HPROF_UTF8 records
1721 SymbolTableDumper sym_dumper(writer()); 1723 SymbolTableDumper sym_dumper(writer());
1722 SymbolTable::symbols_do(&sym_dumper); 1724 SymbolTable::symbols_do(&sym_dumper);
1723 1725
1724 // write HPROF_LOAD_CLASS records 1726 // write HPROF_LOAD_CLASS records
1725 SystemDictionary::classes_do(&do_load_class); 1727 ClassLoaderDataGraph::classes_do(&do_load_class);
1726 Universe::basic_type_classes_do(&do_load_class); 1728 Universe::basic_type_classes_do(&do_load_class);
1727 1729
1728 // write HPROF_FRAME and HPROF_TRACE records 1730 // write HPROF_FRAME and HPROF_TRACE records
1729 // this must be called after _klass_map is built when iterating the classes above. 1731 // this must be called after _klass_map is built when iterating the classes above.
1730 dump_stack_traces(); 1732 dump_stack_traces();
1731 1733
1732 // write HPROF_HEAP_DUMP or HPROF_HEAP_DUMP_SEGMENT 1734 // write HPROF_HEAP_DUMP or HPROF_HEAP_DUMP_SEGMENT
1733 write_dump_header(); 1735 write_dump_header();
1734 1736
1735 // Writes HPROF_GC_CLASS_DUMP records 1737 // Writes HPROF_GC_CLASS_DUMP records
1736 SystemDictionary::classes_do(&do_class_dump); 1738 ClassLoaderDataGraph::classes_do(&do_class_dump);
1737 Universe::basic_type_classes_do(&do_basic_type_array_class_dump); 1739 Universe::basic_type_classes_do(&do_basic_type_array_class_dump);
1738 check_segment_length(); 1740 check_segment_length();
1739 1741
1740 // writes HPROF_GC_INSTANCE_DUMP records. 1742 // writes HPROF_GC_INSTANCE_DUMP records.
1741 // After each sub-record is written check_segment_length will be invoked. When 1743 // After each sub-record is written check_segment_length will be invoked. When