< prev index next >

src/hotspot/share/services/heapDumper.cpp

Print this page




 679 
 680   // writes a HPROF_HEAP_DUMP_SEGMENT record
 681   static void write_dump_header(DumpWriter* writer);
 682 
 683   // fixes up the length of the current dump record
 684   static void write_current_dump_record_length(DumpWriter* writer);
 685 
 686   // fixes up the current dump record and writes HPROF_HEAP_DUMP_END record
 687   static void end_of_dump(DumpWriter* writer);
 688 };
 689 
 690 // write a header of the given type
 691 void DumperSupport:: write_header(DumpWriter* writer, hprofTag tag, u4 len) {
 692   writer->write_u1((u1)tag);
 693   writer->write_u4(0);                  // current ticks
 694   writer->write_u4(len);
 695 }
 696 
 697 // returns hprof tag for the given type signature
 698 hprofTag DumperSupport::sig2tag(Symbol* sig) {
 699   switch (sig->byte_at(0)) {
 700     case JVM_SIGNATURE_CLASS    : return HPROF_NORMAL_OBJECT;
 701     case JVM_SIGNATURE_ARRAY    : return HPROF_NORMAL_OBJECT;
 702     case JVM_SIGNATURE_BYTE     : return HPROF_BYTE;
 703     case JVM_SIGNATURE_CHAR     : return HPROF_CHAR;
 704     case JVM_SIGNATURE_FLOAT    : return HPROF_FLOAT;
 705     case JVM_SIGNATURE_DOUBLE   : return HPROF_DOUBLE;
 706     case JVM_SIGNATURE_INT      : return HPROF_INT;
 707     case JVM_SIGNATURE_LONG     : return HPROF_LONG;
 708     case JVM_SIGNATURE_SHORT    : return HPROF_SHORT;
 709     case JVM_SIGNATURE_BOOLEAN  : return HPROF_BOOLEAN;
 710     default : ShouldNotReachHere(); /* to shut up compiler */ return HPROF_BYTE;
 711   }
 712 }
 713 
 714 hprofTag DumperSupport::type2tag(BasicType type) {
 715   switch (type) {
 716     case T_BYTE     : return HPROF_BYTE;
 717     case T_CHAR     : return HPROF_CHAR;
 718     case T_FLOAT    : return HPROF_FLOAT;
 719     case T_DOUBLE   : return HPROF_DOUBLE;


 804       writer->write_u1((u1)b);
 805       break;
 806     }
 807     default : {
 808       ShouldNotReachHere();
 809       break;
 810     }
 811   }
 812 }
 813 
 814 // returns the size of the instance of the given class
 815 u4 DumperSupport::instance_size(Klass* k) {
 816   HandleMark hm;
 817   InstanceKlass* ik = InstanceKlass::cast(k);
 818 
 819   u4 size = 0;
 820 
 821   for (FieldStream fld(ik, false, false); !fld.eos(); fld.next()) {
 822     if (!fld.access_flags().is_static()) {
 823       Symbol* sig = fld.signature();
 824       switch (sig->byte_at(0)) {
 825         case JVM_SIGNATURE_CLASS   :
 826         case JVM_SIGNATURE_ARRAY   : size += oopSize; break;
 827 
 828         case JVM_SIGNATURE_BYTE    :
 829         case JVM_SIGNATURE_BOOLEAN : size += 1; break;
 830 
 831         case JVM_SIGNATURE_CHAR    :
 832         case JVM_SIGNATURE_SHORT   : size += 2; break;
 833 
 834         case JVM_SIGNATURE_INT     :
 835         case JVM_SIGNATURE_FLOAT   : size += 4; break;
 836 
 837         case JVM_SIGNATURE_LONG    :
 838         case JVM_SIGNATURE_DOUBLE  : size += 8; break;
 839 
 840         default : ShouldNotReachHere();
 841       }
 842     }
 843   }
 844   return size;




 679 
 680   // writes a HPROF_HEAP_DUMP_SEGMENT record
 681   static void write_dump_header(DumpWriter* writer);
 682 
 683   // fixes up the length of the current dump record
 684   static void write_current_dump_record_length(DumpWriter* writer);
 685 
 686   // fixes up the current dump record and writes HPROF_HEAP_DUMP_END record
 687   static void end_of_dump(DumpWriter* writer);
 688 };
 689 
 690 // write a header of the given type
 691 void DumperSupport:: write_header(DumpWriter* writer, hprofTag tag, u4 len) {
 692   writer->write_u1((u1)tag);
 693   writer->write_u4(0);                  // current ticks
 694   writer->write_u4(len);
 695 }
 696 
 697 // returns hprof tag for the given type signature
 698 hprofTag DumperSupport::sig2tag(Symbol* sig) {
 699   switch (sig->char_at(0)) {
 700     case JVM_SIGNATURE_CLASS    : return HPROF_NORMAL_OBJECT;
 701     case JVM_SIGNATURE_ARRAY    : return HPROF_NORMAL_OBJECT;
 702     case JVM_SIGNATURE_BYTE     : return HPROF_BYTE;
 703     case JVM_SIGNATURE_CHAR     : return HPROF_CHAR;
 704     case JVM_SIGNATURE_FLOAT    : return HPROF_FLOAT;
 705     case JVM_SIGNATURE_DOUBLE   : return HPROF_DOUBLE;
 706     case JVM_SIGNATURE_INT      : return HPROF_INT;
 707     case JVM_SIGNATURE_LONG     : return HPROF_LONG;
 708     case JVM_SIGNATURE_SHORT    : return HPROF_SHORT;
 709     case JVM_SIGNATURE_BOOLEAN  : return HPROF_BOOLEAN;
 710     default : ShouldNotReachHere(); /* to shut up compiler */ return HPROF_BYTE;
 711   }
 712 }
 713 
 714 hprofTag DumperSupport::type2tag(BasicType type) {
 715   switch (type) {
 716     case T_BYTE     : return HPROF_BYTE;
 717     case T_CHAR     : return HPROF_CHAR;
 718     case T_FLOAT    : return HPROF_FLOAT;
 719     case T_DOUBLE   : return HPROF_DOUBLE;


 804       writer->write_u1((u1)b);
 805       break;
 806     }
 807     default : {
 808       ShouldNotReachHere();
 809       break;
 810     }
 811   }
 812 }
 813 
 814 // returns the size of the instance of the given class
 815 u4 DumperSupport::instance_size(Klass* k) {
 816   HandleMark hm;
 817   InstanceKlass* ik = InstanceKlass::cast(k);
 818 
 819   u4 size = 0;
 820 
 821   for (FieldStream fld(ik, false, false); !fld.eos(); fld.next()) {
 822     if (!fld.access_flags().is_static()) {
 823       Symbol* sig = fld.signature();
 824       switch (sig->char_at(0)) {
 825         case JVM_SIGNATURE_CLASS   :
 826         case JVM_SIGNATURE_ARRAY   : size += oopSize; break;
 827 
 828         case JVM_SIGNATURE_BYTE    :
 829         case JVM_SIGNATURE_BOOLEAN : size += 1; break;
 830 
 831         case JVM_SIGNATURE_CHAR    :
 832         case JVM_SIGNATURE_SHORT   : size += 2; break;
 833 
 834         case JVM_SIGNATURE_INT     :
 835         case JVM_SIGNATURE_FLOAT   : size += 4; break;
 836 
 837         case JVM_SIGNATURE_LONG    :
 838         case JVM_SIGNATURE_DOUBLE  : size += 8; break;
 839 
 840         default : ShouldNotReachHere();
 841       }
 842     }
 843   }
 844   return size;


< prev index next >