src/share/vm/services/heapDumper.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File hotspot Sdiff src/share/vm/services

src/share/vm/services/heapDumper.cpp

Print this page
rev 7046 : 8059340: ConstantPool::_resolved_references is missing in heap dump
Reviewed-by: ?


 797         case JVM_SIGNATURE_DOUBLE  : size += 8; break;
 798 
 799         default : ShouldNotReachHere();
 800       }
 801     }
 802   }
 803   return (u4)size;
 804 }
 805 
 806 // dumps static fields of the given class
 807 void DumperSupport::dump_static_fields(DumpWriter* writer, Klass* k) {
 808   HandleMark hm;
 809   instanceKlassHandle ikh = instanceKlassHandle(Thread::current(), k);
 810 
 811   // pass 1 - count the static fields
 812   u2 field_count = 0;
 813   for (FieldStream fldc(ikh, true, true); !fldc.eos(); fldc.next()) {
 814     if (fldc.access_flags().is_static()) field_count++;
 815   }
 816 






 817   writer->write_u2(field_count);
 818 
 819   // pass 2 - dump the field descriptors and raw values
 820   for (FieldStream fld(ikh, true, true); !fld.eos(); fld.next()) {
 821     if (fld.access_flags().is_static()) {
 822       Symbol* sig = fld.signature();
 823 
 824       writer->write_symbolID(fld.name());   // name
 825       writer->write_u1(sig2tag(sig));       // type
 826 
 827       // value
 828       int offset = fld.offset();
 829       address addr = (address)ikh->java_mirror() + offset;
 830 
 831       dump_field_value(writer, sig->byte_at(0), addr);
 832     }
 833   }






 834 }
 835 
 836 // dump the raw values of the instance fields of the given object
 837 void DumperSupport::dump_instance_fields(DumpWriter* writer, oop o) {
 838   HandleMark hm;
 839   instanceKlassHandle ikh = instanceKlassHandle(Thread::current(), o->klass());
 840 
 841   for (FieldStream fld(ikh, false, false); !fld.eos(); fld.next()) {
 842     if (!fld.access_flags().is_static()) {
 843       Symbol* sig = fld.signature();
 844       address addr = (address)o + fld.offset();
 845 
 846       dump_field_value(writer, sig->byte_at(0), addr);
 847     }
 848   }
 849 }
 850 
 851 // dumps the definition of the instance fields for a given class
 852 void DumperSupport::dump_instance_field_descriptors(DumpWriter* writer, Klass* k) {
 853   HandleMark hm;




 797         case JVM_SIGNATURE_DOUBLE  : size += 8; break;
 798 
 799         default : ShouldNotReachHere();
 800       }
 801     }
 802   }
 803   return (u4)size;
 804 }
 805 
 806 // dumps static fields of the given class
 807 void DumperSupport::dump_static_fields(DumpWriter* writer, Klass* k) {
 808   HandleMark hm;
 809   instanceKlassHandle ikh = instanceKlassHandle(Thread::current(), k);
 810 
 811   // pass 1 - count the static fields
 812   u2 field_count = 0;
 813   for (FieldStream fldc(ikh, true, true); !fldc.eos(); fldc.next()) {
 814     if (fldc.access_flags().is_static()) field_count++;
 815   }
 816 
 817   oop resolved_references = ((InstanceKlass*)k)->constants()->resolved_references();
 818 
 819   if (resolved_references != NULL) {
 820     ++field_count;
 821   }
 822 
 823   writer->write_u2(field_count);
 824 
 825   // pass 2 - dump the field descriptors and raw values
 826   for (FieldStream fld(ikh, true, true); !fld.eos(); fld.next()) {
 827     if (fld.access_flags().is_static()) {
 828       Symbol* sig = fld.signature();
 829 
 830       writer->write_symbolID(fld.name());   // name
 831       writer->write_u1(sig2tag(sig));       // type
 832 
 833       // value
 834       int offset = fld.offset();
 835       address addr = (address)ikh->java_mirror() + offset;
 836 
 837       dump_field_value(writer, sig->byte_at(0), addr);
 838     }
 839   }
 840 
 841   if (resolved_references != NULL) {
 842     writer->write_symbolID(vmSymbols::resolved_references_name());
 843     writer->write_u1(HPROF_NORMAL_OBJECT);
 844     writer->write_objectID(resolved_references);
 845   }
 846 }
 847 
 848 // dump the raw values of the instance fields of the given object
 849 void DumperSupport::dump_instance_fields(DumpWriter* writer, oop o) {
 850   HandleMark hm;
 851   instanceKlassHandle ikh = instanceKlassHandle(Thread::current(), o->klass());
 852 
 853   for (FieldStream fld(ikh, false, false); !fld.eos(); fld.next()) {
 854     if (!fld.access_flags().is_static()) {
 855       Symbol* sig = fld.signature();
 856       address addr = (address)o + fld.offset();
 857 
 858       dump_field_value(writer, sig->byte_at(0), addr);
 859     }
 860   }
 861 }
 862 
 863 // dumps the definition of the instance fields for a given class
 864 void DumperSupport::dump_instance_field_descriptors(DumpWriter* writer, Klass* k) {
 865   HandleMark hm;


src/share/vm/services/heapDumper.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File