mirror of
https://github.com/openjdk/jdk.git
synced 2026-07-13 12:38:07 +00:00
8387404: Make ClassLoaderData::oops_do inlineable
Reviewed-by: coleenp, xpeng
This commit is contained in:
parent
ab116d00a8
commit
095cf06e73
@ -289,19 +289,6 @@ void ClassLoaderData::verify_not_claimed(int claim) {
|
||||
}
|
||||
#endif
|
||||
|
||||
bool ClassLoaderData::try_claim(int claim) {
|
||||
for (;;) {
|
||||
int old_claim = AtomicAccess::load(&_claim);
|
||||
if ((old_claim & claim) == claim) {
|
||||
return false;
|
||||
}
|
||||
int new_claim = old_claim | claim;
|
||||
if (AtomicAccess::cmpxchg(&_claim, old_claim, new_claim) == old_claim) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void ClassLoaderData::demote_strong_roots() {
|
||||
// The oop handle area contains strong roots that the GC traces from. We are about
|
||||
// to demote them to strong native oops that the GC does *not* trace from. Conceptually,
|
||||
@ -369,11 +356,7 @@ void ClassLoaderData::dec_keep_alive_ref_count() {
|
||||
}
|
||||
}
|
||||
|
||||
void ClassLoaderData::oops_do(OopClosure* f, int claim_value, bool clear_mod_oops) {
|
||||
if (claim_value != ClassLoaderData::_claim_none && !try_claim(claim_value)) {
|
||||
return;
|
||||
}
|
||||
|
||||
void ClassLoaderData::oops_do_slow(OopClosure* f, bool clear_mod_oops) {
|
||||
// Only clear modified_oops after the ClassLoaderData is claimed.
|
||||
if (clear_mod_oops) {
|
||||
clear_modified_oops();
|
||||
|
||||
@ -242,7 +242,7 @@ private:
|
||||
void verify_not_claimed(int claim) NOT_DEBUG_RETURN;
|
||||
bool claimed() const { return _claim != 0; }
|
||||
bool claimed(int claim) const { return (_claim & claim) == claim; }
|
||||
bool try_claim(int claim);
|
||||
inline bool try_claim(int claim);
|
||||
|
||||
// Computes if the CLD is alive or not. This is safe to call in concurrent
|
||||
// contexts.
|
||||
@ -305,7 +305,8 @@ private:
|
||||
|
||||
void initialize_holder(Handle holder);
|
||||
|
||||
void oops_do(OopClosure* f, int claim_value, bool clear_modified_oops = false);
|
||||
inline void oops_do(OopClosure* f, int claim_value, bool clear_modified_oops = false);
|
||||
void oops_do_slow(OopClosure* f, bool clear_modified_oops);
|
||||
|
||||
void classes_do(KlassClosure* klass_closure);
|
||||
Klass* klasses() { return _klasses; }
|
||||
|
||||
@ -85,4 +85,23 @@ inline ClassLoaderData* ClassLoaderData::class_loader_data(oop loader) {
|
||||
return loader_data;
|
||||
}
|
||||
|
||||
inline bool ClassLoaderData::try_claim(int claim) {
|
||||
for (;;) {
|
||||
int old_claim = AtomicAccess::load(&_claim);
|
||||
if ((old_claim & claim) == claim) {
|
||||
return false;
|
||||
}
|
||||
int new_claim = old_claim | claim;
|
||||
if (AtomicAccess::cmpxchg(&_claim, old_claim, new_claim) == old_claim) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
inline void ClassLoaderData::oops_do(OopClosure* f, int claim_value, bool clear_mod_oops) {
|
||||
if (claim_value == _claim_none || try_claim(claim_value)) {
|
||||
oops_do_slow(f, clear_mod_oops);
|
||||
}
|
||||
}
|
||||
|
||||
#endif // SHARE_CLASSFILE_CLASSLOADERDATA_INLINE_HPP
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user