--- old/src/share/vm/classfile/javaClasses.hpp 2014-10-31 13:39:05.000000000 -0400 +++ new/src/share/vm/classfile/javaClasses.hpp 2014-10-31 13:39:05.000000000 -0400 @@ -243,6 +243,7 @@ static int _component_mirror_offset; static bool offsets_computed; + static int _classData_offset; static int classRedefinedCount_offset; static GrowableArray* _fixup_mirror_list; @@ -285,6 +286,9 @@ // compiler support for class operations static int klass_offset_in_bytes() { return _klass_offset; } static int array_klass_offset_in_bytes() { return _array_klass_offset; } + + static oop classData(oop obj); + // Support for classRedefinedCount field static int classRedefinedCount(oop the_class_mirror); static void set_classRedefinedCount(oop the_class_mirror, int value); @@ -312,7 +316,29 @@ // Debugging friend class JavaClasses; friend class InstanceKlass; // verification code accesses offsets - friend class ClassFileParser; // access to number_of_fake_fields + friend class ClassFileParser; // access to number_of_fake_fields_sequenceNumber_offset +}; + +/** + * java.lang.Class$ClassData + */ +class java_lang_Class_ClassData : AllStatic { + friend class JavaClasses; + + private: + static int _elementData_offset; + static int _size_offset; + static int _sequenceNumber_offset; + + static void compute_offsets(); + + public: + static bool is_instance(oop obj); + static oop memberNameTable(oop obj); + static objArrayOop elementData(oop obj); + static int size(oop obj); + static void incSequenceNumber(oop obj); + }; // Interface to java.lang.Thread objects