2751 static int methoddata_size; // size of methodData objects in words
2752
2753 static void do_class(klassOop k) {
2754 nclasses++;
2755 class_size += k->size();
2756 if (k->klass_part()->oop_is_instance()) {
2757 instanceKlass* ik = (instanceKlass*)k->klass_part();
2758 class_size += ik->methods()->size();
2759 class_size += ik->constants()->size();
2760 class_size += ik->local_interfaces()->size();
2761 class_size += ik->transitive_interfaces()->size();
2762 // We do not have to count implementors, since we only store one!
2763 class_size += ik->all_fields_count() * FieldInfo::field_slots;
2764 }
2765 }
2766
2767 static void do_method(methodOop m) {
2768 nmethods++;
2769 method_size += m->size();
2770 // class loader uses same objArray for empty vectors, so don't count these
2771 if (m->exception_table()->length() != 0) method_size += m->exception_table()->size();
2772 if (m->has_stackmap_table()) {
2773 method_size += m->stackmap_data()->size();
2774 }
2775
2776 methodDataOop mdo = m->method_data();
2777 if (mdo != NULL) {
2778 nmethoddata++;
2779 methoddata_size += mdo->size();
2780 }
2781 }
2782
2783 public:
2784 static void print() {
2785 SystemDictionary::classes_do(do_class);
2786 SystemDictionary::methods_do(do_method);
2787 tty->print_cr("Class statistics:");
2788 tty->print_cr("%d classes (%d bytes)", nclasses, class_size * oopSize);
2789 tty->print_cr("%d methods (%d bytes = %d base + %d debug info)", nmethods,
2790 (method_size + debug_size) * oopSize, method_size * oopSize, debug_size * oopSize);
2791 tty->print_cr("%d methoddata (%d bytes)", nmethoddata, methoddata_size * oopSize);
|
2751 static int methoddata_size; // size of methodData objects in words
2752
2753 static void do_class(klassOop k) {
2754 nclasses++;
2755 class_size += k->size();
2756 if (k->klass_part()->oop_is_instance()) {
2757 instanceKlass* ik = (instanceKlass*)k->klass_part();
2758 class_size += ik->methods()->size();
2759 class_size += ik->constants()->size();
2760 class_size += ik->local_interfaces()->size();
2761 class_size += ik->transitive_interfaces()->size();
2762 // We do not have to count implementors, since we only store one!
2763 class_size += ik->all_fields_count() * FieldInfo::field_slots;
2764 }
2765 }
2766
2767 static void do_method(methodOop m) {
2768 nmethods++;
2769 method_size += m->size();
2770 // class loader uses same objArray for empty vectors, so don't count these
2771 if (m->has_stackmap_table()) {
2772 method_size += m->stackmap_data()->size();
2773 }
2774
2775 methodDataOop mdo = m->method_data();
2776 if (mdo != NULL) {
2777 nmethoddata++;
2778 methoddata_size += mdo->size();
2779 }
2780 }
2781
2782 public:
2783 static void print() {
2784 SystemDictionary::classes_do(do_class);
2785 SystemDictionary::methods_do(do_method);
2786 tty->print_cr("Class statistics:");
2787 tty->print_cr("%d classes (%d bytes)", nclasses, class_size * oopSize);
2788 tty->print_cr("%d methods (%d bytes = %d base + %d debug info)", nmethods,
2789 (method_size + debug_size) * oopSize, method_size * oopSize, debug_size * oopSize);
2790 tty->print_cr("%d methoddata (%d bytes)", nmethoddata, methoddata_size * oopSize);
|