============================================================== struct Klass : public Metadata { public: /* class Metadata { } ; */ /* 0 0 */ /* XXX 8 bytes hole, try to pack */ protected: /* typedef jint */ int _layout_helper; /* 8 4 */ /* typedef juint -> uint32_t */ unsigned int _super_check_offset; /* 12 4 */ class Symbol * _name; /* 16 8 */ class Klass * _secondary_super_cache; /* 24 8 */ class Array * _secondary_supers; /* 32 8 */ class Klass * _primary_supers[8]; /* 40 64 */ /* --- cacheline 1 boundary (64 bytes) was 40 bytes ago --- */ /* typedef oop */ class oopDesc * _java_mirror; /* 104 8 */ class Klass * _super; /* 112 8 */ class Klass * _subklass; /* 120 8 */ /* --- cacheline 2 boundary (128 bytes) --- */ class Klass * _next_sibling; /* 128 8 */ class Klass * _next_link; /* 136 8 */ class ClassLoaderData * _class_loader_data; /* 144 8 */ /* typedef jint */ int _modifier_flags; /* 152 4 */ class AccessFlags { private: /* typedef jint */ int _flags; /* 156 4 */ } _access_flags; /* 156 4 */ /* typedef juint -> uint32_t */ unsigned int _alloc_count; /* 160 4 */ /* XXX 4 bytes hole, try to pack */ /* typedef jlong */ long int _last_biased_lock_bulk_revocation_time; /* 168 8 */ /* typedef markOop */ class markOopDesc * _prototype_header; /* 176 8 */ /* typedef jint */ int _biased_lock_revocation_count; /* 184 4 */ /* XXX 4 bytes hole, try to pack */ /* --- cacheline 3 boundary (192 bytes) --- */ /* typedef u8 -> julong -> uint64_t */ long unsigned int _trace_id; /* 192 8 */ /* typedef jbyte */ signed char _modified_oops; /* 200 1 */ /* typedef jbyte */ signed char _accumulated_modified_oops; /* 201 1 */ private: /* size: 208, cachelines: 4, members: 22 */ /* sum members: 186, holes: 3, sum holes: 16 */ /* padding: 6 */ /* last cacheline: 16 bytes */ }; ============================================================== struct InstanceKlass : public Klass { public: /* struct Klass { protected: } ; */ /* 0 0 */ private: volatile int _total_instanceKlass_count; /* 0 4 */ /* XXX 204 bytes hole, try to pack */ protected: /* --- cacheline 3 boundary (192 bytes) was 16 bytes ago --- */ /* typedef oop */ class oopDesc * _protection_domain; /* 208 8 */ /* typedef objArrayOop */ class objArrayOopDesc * _signers; /* 216 8 */ volatile oop _init_lock; /* 224 8 */ class Annotations * _annotations; /* 232 8 */ class Klass * _array_klasses; /* 240 8 */ class ConstantPool * _constants; /* 248 8 */ /* --- cacheline 4 boundary (256 bytes) --- */ class Array * _inner_classes; /* 256 8 */ class Symbol * _source_file_name; /* 264 8 */ char * _source_debug_extension; /* 272 8 */ class Symbol * _generic_signature; /* 280 8 */ class Symbol * _array_name; /* 288 8 */ int _nonstatic_field_size; /* 296 4 */ int _static_field_size; /* 300 4 */ /* typedef u2 -> jushort -> uint16_t */ short unsigned int _static_oop_field_count; /* 304 2 */ /* typedef u2 -> jushort -> uint16_t */ short unsigned int _java_fields_count; /* 306 2 */ int _nonstatic_oop_map_size; /* 308 4 */ bool _is_marked_dependent; /* 312 1 */ /* XXX 1 byte hole, try to pack */ /* typedef u2 -> jushort -> uint16_t */ short unsigned int _misc_flags; /* 314 2 */ /* typedef u2 -> jushort -> uint16_t */ short unsigned int _minor_version; /* 316 2 */ /* typedef u2 -> jushort -> uint16_t */ short unsigned int _major_version; /* 318 2 */ /* --- cacheline 5 boundary (320 bytes) --- */ class Thread * _init_thread; /* 320 8 */ int _vtable_len; /* 328 4 */ int _itable_len; /* 332 4 */ volatile class OopMapCache * _oop_map_cache; /* 336 8 */ class JNIid * _jni_ids; /* 344 8 */ jmethodID * _methods_jmethod_ids; /* 352 8 */ int * _methods_cached_itable_indices; /* 360 8 */ class nmethodBucket * _dependencies; /* 368 8 */ class nmethod * _osr_nmethods_head; /* 376 8 */ /* --- cacheline 6 boundary (384 bytes) --- */ class BreakpointInfo * _breakpoints; /* 384 8 */ class GrowableArray * _previous_versions; /* 392 8 */ unsigned char * _cached_class_file_bytes; /* 400 8 */ /* typedef jint */ int _cached_class_file_len; /* 408 4 */ /* XXX 4 bytes hole, try to pack */ class JvmtiCachedClassFieldMap * _jvmti_cached_class_field_map; /* 416 8 */ bool _has_default_methods; /* 424 1 */ /* XXX 1 byte hole, try to pack */ volatile u2 _idnum_allocated_count; /* 426 2 */ /* XXX 4 bytes hole, try to pack */ class Array * _methods; /* 432 8 */ class Array * _local_interfaces; /* 440 8 */ /* --- cacheline 7 boundary (448 bytes) --- */ class Array * _transitive_interfaces; /* 448 8 */ class Array * _method_ordering; /* 456 8 */ class Array * _fields; /* 464 8 */ /* typedef u1 -> jubyte -> uint8_t */ unsigned char _init_state; /* 472 1 */ /* typedef u1 -> jubyte -> uint8_t */ unsigned char _reference_type; /* 473 1 */ private: /* size: 480, cachelines: 8, members: 45 */ /* sum members: 260, holes: 5, sum holes: 214 */ /* padding: 6 */ /* last cacheline: 32 bytes */ }; ============================================================== class ArrayKlass : public Klass { public: /* struct Klass { protected: } ; */ /* 0 0 */ /* XXX 204 bytes hole, try to pack */ private: /* --- cacheline 3 boundary (192 bytes) was 12 bytes ago --- */ int _dimension; /* 204 4 */ volatile class Klass * _higher_dimension; /* 208 8 */ volatile class Klass * _lower_dimension; /* 216 8 */ int _vtable_len; /* 224 4 */ /* typedef juint -> uint32_t */ unsigned int _alloc_size; /* 228 4 */ /* typedef oop */ class oopDesc * _component_mirror; /* 232 8 */ protected: /* size: 240, cachelines: 4, members: 7 */ /* sum members: 36, holes: 1, sum holes: 204 */ /* last cacheline: 48 bytes */ }; ============================================================== struct Method : public Metadata { public: /* class Metadata { } ; */ /* 0 0 */ /* XXX 8 bytes hole, try to pack */ private: class ConstMethod * _constMethod; /* 8 8 */ class MethodData * _method_data; /* 16 8 */ int _interpreter_invocation_count; /* 24 4 */ class AccessFlags { private: /* typedef jint */ int _flags; /* 28 4 */ } _access_flags; /* 28 4 */ int _vtable_index; /* 32 4 */ /* typedef u2 -> jushort -> uint16_t */ short unsigned int _method_size; /* 36 2 */ /* typedef u1 -> jubyte -> uint8_t */ unsigned char _intrinsic_id; /* 38 1 */ /* typedef u1 -> jubyte -> uint8_t */ unsigned char _jfr_towrite:1; /* 39: 7 1 */ /* typedef u1 -> jubyte -> uint8_t */ unsigned char _force_inline:1; /* 39: 6 1 */ /* typedef u1 -> jubyte -> uint8_t */ unsigned char _hidden:1; /* 39: 5 1 */ /* typedef u1 -> jubyte -> uint8_t */ unsigned char _dont_inline:1; /* 39: 4 1 */ /* XXX 4 bits hole, try to pack */ /* typedef u2 -> jushort -> uint16_t */ short unsigned int _interpreter_throwout_count; /* 40 2 */ /* typedef u2 -> jushort -> uint16_t */ short unsigned int _number_of_breakpoints; /* 42 2 */ class InvocationCounter { private: unsigned int _counter; /* 44 4 */ int InterpreterInvocationLimit; /* 44 4 */ int InterpreterBackwardBranchLimit; /* 44 4 */ int InterpreterProfileLimit; /* 44 4 */ int _init[2]; /* 44 8 */ address (*_action)(class methodHandle, class Thread *)[2]; /* 44 16 */ } _invocation_counter; /* 44 4 */ class InvocationCounter { private: unsigned int _counter; /* 48 4 */ int InterpreterInvocationLimit; /* 48 4 */ int InterpreterBackwardBranchLimit; /* 48 4 */ int InterpreterProfileLimit; /* 48 4 */ int _init[2]; /* 48 8 */ address (*_action)(class methodHandle, class Thread *)[2]; /* 48 16 */ } _backedge_counter; /* 48 4 */ /* XXX 4 bytes hole, try to pack */ /* typedef jlong */ long int _prev_time; /* 56 8 */ /* --- cacheline 1 boundary (64 bytes) --- */ float _rate; /* 64 4 */ /* XXX 4 bytes hole, try to pack */ /* typedef address */ unsigned char * _i2i_entry; /* 72 8 */ class AdapterHandlerEntry * _adapter; /* 80 8 */ volatile address _from_compiled_entry; /* 88 8 */ volatile class nmethod * _code; /* 96 8 */ volatile address _from_interpreted_entry; /* 104 8 */ /* size: 112, cachelines: 2, members: 23 */ /* sum members: 96, holes: 3, sum holes: 16 */ /* bit holes: 1, sum bit holes: 4 bits */ /* last cacheline: 48 bytes */ }; ============================================================== class ConstMethod : public MetaspaceObj { public: /* class MetaspaceObj { } ; */ /* 0 0 */ private: volatile uint64_t _fingerprint; /* 0 8 */ class ConstantPool * _constants; /* 8 8 */ class Array * _stackmap_data; /* 16 8 */ int _constMethod_size; /* 24 4 */ /* typedef jbyte */ signed char _interpreter_kind; /* 28 1 */ /* typedef jbyte */ signed char _flags; /* 29 1 */ /* typedef u2 -> jushort -> uint16_t */ short unsigned int _code_size; /* 30 2 */ /* typedef u2 -> jushort -> uint16_t */ short unsigned int _name_index; /* 32 2 */ /* typedef u2 -> jushort -> uint16_t */ short unsigned int _signature_index; /* 34 2 */ /* typedef u2 -> jushort -> uint16_t */ short unsigned int _method_idnum; /* 36 2 */ /* typedef u2 -> jushort -> uint16_t */ short unsigned int _max_stack; /* 38 2 */ /* typedef u2 -> jushort -> uint16_t */ short unsigned int _max_locals; /* 40 2 */ /* typedef u2 -> jushort -> uint16_t */ short unsigned int _size_of_parameters; /* 42 2 */ /* Bitfield combined with previous fields */ u2const MAX_IDNUM; /* 0 2 */ u2const UNSET_IDNUM; /* 0 2 */ /* size: 48, cachelines: 1, members: 16 */ /* padding: 46 */ /* last cacheline: 48 bytes */ /* BRAIN FART ALERT! 48 != 48 + 0(holes), diff = 0 */ }; ============================================================== class MethodData : public Metadata { public: /* class Metadata { } ; */ /* 0 0 */ /* XXX 8 bytes hole, try to pack */ private: class Method * _method; /* 8 8 */ int _size; /* 16 4 */ int _hint_di; /* 20 4 */ /* typedef uint */ unsigned int _nof_decompiles; /* 24 4 */ /* typedef uint */ unsigned int _nof_overflow_recompiles; /* 28 4 */ /* typedef uint */ unsigned int _nof_overflow_traps; /* 32 4 */ /* XXX 4 bytes hole, try to pack */ union { /* typedef intptr_t -> __intptr_t */ long int _align; /* 8 */ unsigned char _array[17]; /* 17 */ } _trap_hist; /* 40 24 */ /* --- cacheline 1 boundary (64 bytes) --- */ /* typedef intx -> intptr_t -> __intptr_t */ long int _eflags; /* 64 8 */ /* typedef intx -> intptr_t -> __intptr_t */ long int _arg_local; /* 72 8 */ /* typedef intx -> intptr_t -> __intptr_t */ long int _arg_stack; /* 80 8 */ /* typedef intx -> intptr_t -> __intptr_t */ long int _arg_returned; /* 88 8 */ int _creation_mileage; /* 96 4 */ class InvocationCounter { private: unsigned int _counter; /* 100 4 */ int InterpreterInvocationLimit; /* 100 4 */ int InterpreterBackwardBranchLimit; /* 100 4 */ int InterpreterProfileLimit; /* 100 4 */ int _init[2]; /* 100 8 */ address (*_action)(class methodHandle, class Thread *)[2]; /* 100 16 */ } _invocation_counter; /* 100 4 */ class InvocationCounter { private: unsigned int _counter; /* 104 4 */ int InterpreterInvocationLimit; /* 104 4 */ int InterpreterBackwardBranchLimit; /* 104 4 */ int InterpreterProfileLimit; /* 104 4 */ int _init[2]; /* 104 8 */ address (*_action)(class methodHandle, class Thread *)[2]; /* 104 16 */ } _backedge_counter; /* 104 4 */ int _invocation_counter_start; /* 108 4 */ int _backedge_counter_start; /* 112 4 */ short int _num_loops; /* 116 2 */ short int _num_blocks; /* 118 2 */ /* typedef u1 -> jubyte -> uint8_t */ unsigned char _highest_comp_level; /* 120 1 */ /* typedef u1 -> jubyte -> uint8_t */ unsigned char _highest_osr_comp_level; /* 121 1 */ bool _would_profile; /* 122 1 */ /* XXX 1 byte hole, try to pack */ int _data_size; /* 124 4 */ /* --- cacheline 2 boundary (128 bytes) --- */ long int _data[1]; /* 128 8 */ /* size: 136, cachelines: 3, members: 24 */ /* sum members: 123, holes: 3, sum holes: 13 */ /* last cacheline: 8 bytes */ }; ============================================================== struct ConstantPool : public Metadata { public: /* class Metadata { } ; */ /* 0 0 */ /* XXX 8 bytes hole, try to pack */ private: class Array * _tags; /* 8 8 */ class ConstantPoolCache * _cache; /* 16 8 */ class InstanceKlass * _pool_holder; /* 24 8 */ class Array * _operands; /* 32 8 */ /* typedef jobject */ class _jobject * _resolved_references; /* 40 8 */ class Array * _reference_map; /* 48 8 */ int _flags; /* 56 4 */ int _length; /* 60 4 */ /* --- cacheline 1 boundary (64 bytes) --- */ bool _on_stack; /* 64 1 */ /* XXX 3 bytes hole, try to pack */ union { int _resolved_reference_length; /* 4 */ int _orig_length; /* 4 */ } _saved; /* 68 4 */ class Monitor * _lock; /* 72 8 */ /* size: 80, cachelines: 2, members: 12 */ /* sum members: 69, holes: 2, sum holes: 11 */ /* last cacheline: 16 bytes */ }; ============================================================== class ConstantPoolCache : public MetaspaceObj { public: /* class MetaspaceObj { } ; */ /* 0 0 */ private: int _length; /* 0 4 */ /* XXX 4 bytes hole, try to pack */ class ConstantPool * _constant_pool; /* 8 8 */ /* size: 16, cachelines: 1, members: 3 */ /* sum members: 12, holes: 1, sum holes: 4 */ /* last cacheline: 16 bytes */ }; ============================================================== class Annotations : public MetaspaceObj { public: /* class MetaspaceObj { } ; */ /* 0 0 */ private: AnnotationArray * _class_annotations; /* 0 8 */ class Array*> * _fields_annotations; /* 8 8 */ class Array*> * _methods_annotations; /* 16 8 */ class Array*> * _methods_parameter_annotations; /* 24 8 */ class Array*> * _methods_default_annotations; /* 32 8 */ class Annotations * _type_annotations; /* 40 8 */ /* size: 48, cachelines: 1, members: 7 */ /* last cacheline: 48 bytes */ };