hotspot/src/share/vm/services/heapDumper.cpp
changeset 360 21d113ecbf6a
parent 202 dc13bf0e5d5d
child 670 ddf3e9583f2f
child 1374 4c24294029a9
equal deleted inserted replaced
357:f4edb0d9f109 360:21d113ecbf6a
   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;