comparison src/share/vm/services/heapDumper.cpp @ 113:ba764ed4b6f2

6420645: Create a vm that uses compressed oops for up to 32gb heapsizes Summary: Compressed oops in instances, arrays, and headers. Code contributors are coleenp, phh, never, swamyv Reviewed-by: jmasa, kamg, acorn, tbell, kvn, rasbold
author coleenp
date Sun, 13 Apr 2008 17:43:42 -0400
parents d5fc211aea19
children d1605aabd0a1 37f87013dfd8
comparison
equal deleted inserted replaced
110:a49a647afe9a 113:ba764ed4b6f2
668 // dumps the raw value of the given field 668 // dumps the raw value of the given field
669 void DumperSupport::dump_field_value(DumpWriter* writer, char type, address addr) { 669 void DumperSupport::dump_field_value(DumpWriter* writer, char type, address addr) {
670 switch (type) { 670 switch (type) {
671 case JVM_SIGNATURE_CLASS : 671 case JVM_SIGNATURE_CLASS :
672 case JVM_SIGNATURE_ARRAY : { 672 case JVM_SIGNATURE_ARRAY : {
673 oop* f = (oop*)addr; 673 oop o;
674 oop o = *f; 674 if (UseCompressedOops) {
675 o = oopDesc::load_decode_heap_oop((narrowOop*)addr);
676 } else {
677 o = oopDesc::load_decode_heap_oop((oop*)addr);
678 }
675 679
676 // reflection and sun.misc.Unsafe classes may have a reference to a 680 // reflection and sun.misc.Unsafe classes may have a reference to a
677 // klassOop so filter it out. 681 // klassOop so filter it out.
678 if (o != NULL && o->is_klass()) { 682 if (o != NULL && o->is_klass()) {
679 o = NULL; 683 o = NULL;
1075 DumpWriter* _writer; 1079 DumpWriter* _writer;
1076 DumpWriter* writer() const { return _writer; } 1080 DumpWriter* writer() const { return _writer; }
1077 public: 1081 public:
1078 SymbolTableDumper(DumpWriter* writer) { _writer = writer; } 1082 SymbolTableDumper(DumpWriter* writer) { _writer = writer; }
1079 void do_oop(oop* obj_p); 1083 void do_oop(oop* obj_p);
1084 void do_oop(narrowOop* obj_p) { ShouldNotReachHere(); }
1080 }; 1085 };
1081 1086
1082 void SymbolTableDumper::do_oop(oop* obj_p) { 1087 void SymbolTableDumper::do_oop(oop* obj_p) {
1083 ResourceMark rm; 1088 ResourceMark rm;
1084 symbolOop sym = (symbolOop)*obj_p; 1089 symbolOop sym = (symbolOop)*obj_p;
1104 JNILocalsDumper(DumpWriter* writer, u4 thread_serial_num) { 1109 JNILocalsDumper(DumpWriter* writer, u4 thread_serial_num) {
1105 _writer = writer; 1110 _writer = writer;
1106 _thread_serial_num = thread_serial_num; 1111 _thread_serial_num = thread_serial_num;
1107 } 1112 }
1108 void do_oop(oop* obj_p); 1113 void do_oop(oop* obj_p);
1114 void do_oop(narrowOop* obj_p) { ShouldNotReachHere(); }
1109 }; 1115 };
1110 1116
1111 1117
1112 void JNILocalsDumper::do_oop(oop* obj_p) { 1118 void JNILocalsDumper::do_oop(oop* obj_p) {
1113 // ignore null or deleted handles 1119 // ignore null or deleted handles
1131 public: 1137 public:
1132 JNIGlobalsDumper(DumpWriter* writer) { 1138 JNIGlobalsDumper(DumpWriter* writer) {
1133 _writer = writer; 1139 _writer = writer;
1134 } 1140 }
1135 void do_oop(oop* obj_p); 1141 void do_oop(oop* obj_p);
1142 void do_oop(narrowOop* obj_p) { ShouldNotReachHere(); }
1136 }; 1143 };
1137 1144
1138 void JNIGlobalsDumper::do_oop(oop* obj_p) { 1145 void JNIGlobalsDumper::do_oop(oop* obj_p) {
1139 oop o = *obj_p; 1146 oop o = *obj_p;
1140 1147
1162 } 1169 }
1163 void do_oop(oop* obj_p) { 1170 void do_oop(oop* obj_p) {
1164 writer()->write_u1(HPROF_GC_ROOT_MONITOR_USED); 1171 writer()->write_u1(HPROF_GC_ROOT_MONITOR_USED);
1165 writer()->write_objectID(*obj_p); 1172 writer()->write_objectID(*obj_p);
1166 } 1173 }
1174 void do_oop(narrowOop* obj_p) { ShouldNotReachHere(); }
1167 }; 1175 };
1168 1176
1169 1177
1170 // Support class used to generate HPROF_GC_ROOT_STICKY_CLASS records 1178 // Support class used to generate HPROF_GC_ROOT_STICKY_CLASS records
1171 1179
1176 public: 1184 public:
1177 StickyClassDumper(DumpWriter* writer) { 1185 StickyClassDumper(DumpWriter* writer) {
1178 _writer = writer; 1186 _writer = writer;
1179 } 1187 }
1180 void do_oop(oop* obj_p); 1188 void do_oop(oop* obj_p);
1189 void do_oop(narrowOop* obj_p) { ShouldNotReachHere(); }
1181 }; 1190 };
1182 1191
1183 void StickyClassDumper::do_oop(oop* obj_p) { 1192 void StickyClassDumper::do_oop(oop* obj_p) {
1184 if (*obj_p != NULL) { 1193 if (*obj_p != NULL) {
1185 oop o = *obj_p; 1194 oop o = *obj_p;