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