< prev index next >

src/share/vm/services/heapDumper.cpp

Print this page




 882   writer->write_objectID(o);
 883   writer->write_u4(STACK_TRACE_ID);
 884 
 885   // class ID
 886   writer->write_classID(k);
 887 
 888   // number of bytes that follow
 889   writer->write_u4(instance_size(k) );
 890 
 891   // field values
 892   dump_instance_fields(writer, o);
 893 }
 894 
 895 // creates HPROF_GC_CLASS_DUMP record for the given class and each of
 896 // its array classes
 897 void DumperSupport::dump_class_and_array_classes(DumpWriter* writer, Klass* k) {
 898   Klass* klass = k;
 899   assert(klass->oop_is_instance(), "not an InstanceKlass");
 900   InstanceKlass* ik = (InstanceKlass*)klass;
 901 





 902   writer->write_u1(HPROF_GC_CLASS_DUMP);
 903 
 904   // class ID
 905   writer->write_classID(ik);
 906   writer->write_u4(STACK_TRACE_ID);
 907 
 908   // super class ID
 909   Klass* java_super = ik->java_super();
 910   if (java_super == NULL) {
 911     writer->write_objectID(oop(NULL));
 912   } else {
 913     writer->write_classID(java_super);
 914   }
 915 
 916   writer->write_objectID(ik->class_loader());
 917   writer->write_objectID(ik->signers());
 918   writer->write_objectID(ik->protection_domain());
 919 
 920   // reserved
 921   writer->write_objectID(oop(NULL));
 922   writer->write_objectID(oop(NULL));
 923 
 924   // instance size
 925   writer->write_u4(DumperSupport::instance_size(k));
 926 
 927   // size of constant pool - ignored by HAT 1.1
 928   writer->write_u2(0);
 929 
 930   // number of static fields
 931   dump_static_fields(writer, k);
 932 
 933   // description of instance fields
 934   dump_instance_field_descriptors(writer, k);
 935 
 936   // array classes
 937   k = klass->array_klass_or_null();
 938   while (k != NULL) {

 939     Klass* klass = k;
 940     assert(klass->oop_is_objArray(), "not an ObjArrayKlass");
 941 
 942     writer->write_u1(HPROF_GC_CLASS_DUMP);
 943     writer->write_classID(klass);
 944     writer->write_u4(STACK_TRACE_ID);
 945 
 946     // super class of array classes is java.lang.Object
 947     java_super = klass->java_super();
 948     assert(java_super != NULL, "checking");
 949     writer->write_classID(java_super);
 950 
 951     writer->write_objectID(ik->class_loader());
 952     writer->write_objectID(ik->signers());
 953     writer->write_objectID(ik->protection_domain());
 954 
 955     writer->write_objectID(oop(NULL));    // reserved
 956     writer->write_objectID(oop(NULL));
 957     writer->write_u4(0);             // instance size
 958     writer->write_u2(0);             // constant pool




 882   writer->write_objectID(o);
 883   writer->write_u4(STACK_TRACE_ID);
 884 
 885   // class ID
 886   writer->write_classID(k);
 887 
 888   // number of bytes that follow
 889   writer->write_u4(instance_size(k) );
 890 
 891   // field values
 892   dump_instance_fields(writer, o);
 893 }
 894 
 895 // creates HPROF_GC_CLASS_DUMP record for the given class and each of
 896 // its array classes
 897 void DumperSupport::dump_class_and_array_classes(DumpWriter* writer, Klass* k) {
 898   Klass* klass = k;
 899   assert(klass->oop_is_instance(), "not an InstanceKlass");
 900   InstanceKlass* ik = (InstanceKlass*)klass;
 901 
 902   // Ignore the class if it hasn't been initialized yet
 903   if (!ik->is_linked()) {
 904     return;
 905   }
 906 
 907   writer->write_u1(HPROF_GC_CLASS_DUMP);
 908 
 909   // class ID
 910   writer->write_classID(ik);
 911   writer->write_u4(STACK_TRACE_ID);
 912 
 913   // super class ID
 914   Klass* java_super = ik->java_super();
 915   if (java_super == NULL) {
 916     writer->write_objectID(oop(NULL));
 917   } else {
 918     writer->write_classID(java_super);
 919   }
 920 
 921   writer->write_objectID(ik->class_loader());
 922   writer->write_objectID(ik->signers());
 923   writer->write_objectID(ik->protection_domain());
 924 
 925   // reserved
 926   writer->write_objectID(oop(NULL));
 927   writer->write_objectID(oop(NULL));
 928 
 929   // instance size
 930   writer->write_u4(DumperSupport::instance_size(k));
 931 
 932   // size of constant pool - ignored by HAT 1.1
 933   writer->write_u2(0);
 934 
 935   // number of static fields
 936   dump_static_fields(writer, k);
 937 
 938   // description of instance fields
 939   dump_instance_field_descriptors(writer, k);
 940 
 941   // array classes
 942   k = klass->array_klass_or_null();
 943   // Check mirror != NULL to make sure that this class has been properly initialized
 944   while (k != NULL && k->java_mirror() != NULL) {
 945     Klass* klass = k;
 946     assert(klass->oop_is_objArray(), "not an ObjArrayKlass");
 947 
 948     writer->write_u1(HPROF_GC_CLASS_DUMP);
 949     writer->write_classID(klass);
 950     writer->write_u4(STACK_TRACE_ID);
 951 
 952     // super class of array classes is java.lang.Object
 953     java_super = klass->java_super();
 954     assert(java_super != NULL, "checking");
 955     writer->write_classID(java_super);
 956 
 957     writer->write_objectID(ik->class_loader());
 958     writer->write_objectID(ik->signers());
 959     writer->write_objectID(ik->protection_domain());
 960 
 961     writer->write_objectID(oop(NULL));    // reserved
 962     writer->write_objectID(oop(NULL));
 963     writer->write_u4(0);             // instance size
 964     writer->write_u2(0);             // constant pool


< prev index next >