mirror of
https://github.com/openjdk/jdk.git
synced 2025-09-18 01:54:47 +02:00
8165808: Add release barriers when allocating objects with concurrent collection
Add release_set_klass, use in slow-path allocators. Reviewed-by: jmasa, dholmes
This commit is contained in:
parent
94bbcbd378
commit
b77d0de3d9
4 changed files with 51 additions and 40 deletions
|
@ -129,10 +129,14 @@ narrowKlass* oopDesc::compressed_klass_addr() {
|
|||
return &_metadata._compressed_klass;
|
||||
}
|
||||
|
||||
#define CHECK_SET_KLASS(k) \
|
||||
do { \
|
||||
assert(Universe::is_bootstrapping() || k != NULL, "NULL Klass"); \
|
||||
assert(Universe::is_bootstrapping() || k->is_klass(), "not a Klass"); \
|
||||
} while (0)
|
||||
|
||||
void oopDesc::set_klass(Klass* k) {
|
||||
// since klasses are promoted no store check is needed
|
||||
assert(Universe::is_bootstrapping() || k != NULL, "must be a real Klass*");
|
||||
assert(Universe::is_bootstrapping() || k->is_klass(), "not a Klass*");
|
||||
CHECK_SET_KLASS(k);
|
||||
if (UseCompressedClassPointers) {
|
||||
*compressed_klass_addr() = Klass::encode_klass_not_null(k);
|
||||
} else {
|
||||
|
@ -140,6 +144,18 @@ void oopDesc::set_klass(Klass* k) {
|
|||
}
|
||||
}
|
||||
|
||||
void oopDesc::release_set_klass(Klass* k) {
|
||||
CHECK_SET_KLASS(k);
|
||||
if (UseCompressedClassPointers) {
|
||||
OrderAccess::release_store(compressed_klass_addr(),
|
||||
Klass::encode_klass_not_null(k));
|
||||
} else {
|
||||
OrderAccess::release_store_ptr(klass_addr(), k);
|
||||
}
|
||||
}
|
||||
|
||||
#undef CHECK_SET_KLASS
|
||||
|
||||
int oopDesc::klass_gap() const {
|
||||
return *(int*)(((intptr_t)this) + klass_gap_offset_in_bytes());
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue