Replace Klass::_metadata union with narrowKlass member

This commit is contained in:
tstuefe 2026-02-09 13:03:18 +01:00
parent 970bff3f86
commit 642604acfe
7 changed files with 13 additions and 19 deletions

View File

@ -50,7 +50,7 @@ define zpo
end
printf "\t Page: %llu\n", ((uintptr_t)$obj & ZAddressOffsetMask) >> ZGranuleSizeShift
x/16gx $obj
set $klass = (Klass*)(void*)((uintptr_t)CompressedKlassPointers::_base +((uintptr_t)$obj->_metadata->_compressed_klass << CompressedKlassPointers::_shift))
set $klass = (Klass*)(void*)((uintptr_t)CompressedKlassPointers::_base +((uintptr_t)$obj->_compressed_klass << CompressedKlassPointers::_shift))
printf "Mark: 0x%016llx\tKlass: %s\n", (uintptr_t)$obj->_mark, (char*)$klass->_name->_body
end

View File

@ -342,7 +342,7 @@
volatile_nonstatic_field(ObjectMonitor, _succ, int64_t) \
\
volatile_nonstatic_field(oopDesc, _mark, markWord) \
volatile_nonstatic_field(oopDesc, _metadata._klass, Klass*) \
volatile_nonstatic_field(oopDesc, _compressed_klass, narrowKlass) \
\
static_field(StubRoutines, _verify_oop_count, jint) \
\

View File

@ -152,7 +152,7 @@ bool oopDesc::is_typeArray_noinline() const { return is_typeArray(); }
#if INCLUDE_CDS_JAVA_HEAP
void oopDesc::set_narrow_klass(narrowKlass nk) {
assert(CDSConfig::is_dumping_heap(), "Used by CDS only. Do not abuse!");
_metadata._compressed_klass = nk;
_compressed_klass = nk;
}
#endif

View File

@ -49,10 +49,7 @@ class oopDesc {
friend class JVMCIVMStructs;
private:
volatile markWord _mark;
union _metadata {
Klass* _klass;
narrowKlass _compressed_klass;
} _metadata;
narrowKlass _compressed_klass;
// There may be ordering constraints on the initialization of fields that
// make use of the C++ copy/assign incorrect.
@ -338,7 +335,7 @@ class oopDesc {
} else
#endif
{
return (int)offset_of(oopDesc, _metadata._klass);
return (int)offset_of(oopDesc, _compressed_klass);
}
}
static int klass_gap_offset_in_bytes() {

View File

@ -99,7 +99,7 @@ Klass* oopDesc::klass() const {
case ObjLayout::Compact:
return mark().klass();
case ObjLayout::Compressed:
return CompressedKlassPointers::decode_not_null(_metadata._compressed_klass);
return CompressedKlassPointers::decode_not_null(_compressed_klass);
default:
ShouldNotReachHere();
}
@ -110,7 +110,7 @@ Klass* oopDesc::klass_or_null() const {
case ObjLayout::Compact:
return mark().klass_or_null();
case ObjLayout::Compressed:
return CompressedKlassPointers::decode(_metadata._compressed_klass);
return CompressedKlassPointers::decode(_compressed_klass);
default:
ShouldNotReachHere();
}
@ -121,7 +121,7 @@ Klass* oopDesc::klass_or_null_acquire() const {
case ObjLayout::Compact:
return mark_acquire().klass();
case ObjLayout::Compressed: {
narrowKlass narrow_klass = AtomicAccess::load_acquire(&_metadata._compressed_klass);
narrowKlass narrow_klass = AtomicAccess::load_acquire(&_compressed_klass);
return CompressedKlassPointers::decode(narrow_klass);
}
default:
@ -134,7 +134,7 @@ Klass* oopDesc::klass_without_asserts() const {
case ObjLayout::Compact:
return mark().klass_without_asserts();
case ObjLayout::Compressed:
return CompressedKlassPointers::decode_without_asserts(_metadata._compressed_klass);
return CompressedKlassPointers::decode_without_asserts(_compressed_klass);
default:
ShouldNotReachHere();
}
@ -145,7 +145,7 @@ narrowKlass oopDesc::narrow_klass() const {
case ObjLayout::Compact:
return mark().narrow_klass();
case ObjLayout::Compressed:
return _metadata._compressed_klass;
return _compressed_klass;
default:
ShouldNotReachHere();
}
@ -154,7 +154,7 @@ narrowKlass oopDesc::narrow_klass() const {
void oopDesc::set_klass(Klass* k) {
assert(Universe::is_bootstrapping() || (k != nullptr && k->is_klass()), "incorrect Klass");
assert(!UseCompactObjectHeaders, "don't set Klass* with compact headers");
_metadata._compressed_klass = CompressedKlassPointers::encode_not_null(k);
_compressed_klass = CompressedKlassPointers::encode_not_null(k);
}
void oopDesc::release_set_klass(HeapWord* mem, Klass* k) {

View File

@ -162,8 +162,7 @@
/******************************************************************/ \
\
volatile_nonstatic_field(oopDesc, _mark, markWord) \
volatile_nonstatic_field(oopDesc, _metadata._klass, Klass*) \
volatile_nonstatic_field(oopDesc, _metadata._compressed_klass, narrowKlass) \
volatile_nonstatic_field(oopDesc, _compressed_klass, narrowKlass) \
static_field(BarrierSet, _barrier_set, BarrierSet*) \
nonstatic_field(ArrayKlass, _dimension, int) \
volatile_nonstatic_field(ArrayKlass, _higher_dimension, ObjArrayKlass*) \

View File

@ -51,8 +51,7 @@ public class Oop {
headerSize = markType.getSize();
} else {
headerSize = type.getSize();
klass = new MetadataField(type.getAddressField("_metadata._klass"), 0);
compressedKlass = new NarrowKlassField(type.getAddressField("_metadata._compressed_klass"), 0);
compressedKlass = new NarrowKlassField(type.getAddressField("_compressed_klass"), 0);
}
}
@ -75,7 +74,6 @@ public class Oop {
public static long getHeaderSize() { return headerSize; } // Header size in bytes.
private static CIntField mark;
private static MetadataField klass;
private static NarrowKlassField compressedKlass;
// Accessors for declared fields