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
|