< prev index next >
src/hotspot/share/gc/g1/g1CollectedHeap.cpp
Print this page
*** 3620,3630 ****
Monitor* G1CodeCacheUnloadingTask::_lock = new Monitor(Mutex::leaf, "Code Cache Unload lock", false, Monitor::_safepoint_check_never);
class G1KlassCleaningTask : public StackObj {
BoolObjectClosure* _is_alive;
! volatile jint _clean_klass_tree_claimed;
ClassLoaderDataGraphKlassIteratorAtomic _klass_iterator;
public:
G1KlassCleaningTask(BoolObjectClosure* is_alive) :
_is_alive(is_alive),
--- 3620,3630 ----
Monitor* G1CodeCacheUnloadingTask::_lock = new Monitor(Mutex::leaf, "Code Cache Unload lock", false, Monitor::_safepoint_check_never);
class G1KlassCleaningTask : public StackObj {
BoolObjectClosure* _is_alive;
! volatile int _clean_klass_tree_claimed;
ClassLoaderDataGraphKlassIteratorAtomic _klass_iterator;
public:
G1KlassCleaningTask(BoolObjectClosure* is_alive) :
_is_alive(is_alive),
*** 3636,3646 ****
bool claim_clean_klass_tree_task() {
if (_clean_klass_tree_claimed) {
return false;
}
! return Atomic::cmpxchg(1, (jint*)&_clean_klass_tree_claimed, 0) == 0;
}
InstanceKlass* claim_next_klass() {
Klass* klass;
do {
--- 3636,3646 ----
bool claim_clean_klass_tree_task() {
if (_clean_klass_tree_claimed) {
return false;
}
! return Atomic::cmpxchg(1, &_clean_klass_tree_claimed, 0) == 0;
}
InstanceKlass* claim_next_klass() {
Klass* klass;
do {
*** 3673,3692 ****
}
};
class G1ResolvedMethodCleaningTask : public StackObj {
BoolObjectClosure* _is_alive;
! volatile jint _resolved_method_task_claimed;
public:
G1ResolvedMethodCleaningTask(BoolObjectClosure* is_alive) :
_is_alive(is_alive), _resolved_method_task_claimed(0) {}
bool claim_resolved_method_task() {
if (_resolved_method_task_claimed) {
return false;
}
! return Atomic::cmpxchg(1, (jint*)&_resolved_method_task_claimed, 0) == 0;
}
// These aren't big, one thread can do it all.
void work() {
if (claim_resolved_method_task()) {
--- 3673,3692 ----
}
};
class G1ResolvedMethodCleaningTask : public StackObj {
BoolObjectClosure* _is_alive;
! volatile int _resolved_method_task_claimed;
public:
G1ResolvedMethodCleaningTask(BoolObjectClosure* is_alive) :
_is_alive(is_alive), _resolved_method_task_claimed(0) {}
bool claim_resolved_method_task() {
if (_resolved_method_task_claimed) {
return false;
}
! return Atomic::cmpxchg(1, &_resolved_method_task_claimed, 0) == 0;
}
// These aren't big, one thread can do it all.
void work() {
if (claim_resolved_method_task()) {
< prev index next >