diff --git a/src/hotspot/share/gc/shared/parallelCleaning.cpp b/src/hotspot/share/gc/shared/parallelCleaning.cpp index 0cba1f8e166..0334230eb4e 100644 --- a/src/hotspot/share/gc/shared/parallelCleaning.cpp +++ b/src/hotspot/share/gc/shared/parallelCleaning.cpp @@ -95,7 +95,7 @@ void CodeCacheUnloadingTask::work(uint worker_id) { } KlassCleaningTask::KlassCleaningTask() : - _clean_klass_tree_claimed(0), + _clean_klass_tree_claimed(false), _klass_iterator() { } @@ -104,7 +104,7 @@ bool KlassCleaningTask::claim_clean_klass_tree_task() { return false; } - return Atomic::cmpxchg(&_clean_klass_tree_claimed, 0, 1) == 0; + return !Atomic::cmpxchg(&_clean_klass_tree_claimed, false, true); } InstanceKlass* KlassCleaningTask::claim_next_klass() { @@ -118,8 +118,6 @@ InstanceKlass* KlassCleaningTask::claim_next_klass() { } void KlassCleaningTask::work() { - ResourceMark rm; - // One worker will clean the subklass/sibling klass tree. if (claim_clean_klass_tree_task()) { Klass::clean_weak_klass_links(true /* class_unloading_occurred */, false /* clean_alive_klasses */); diff --git a/src/hotspot/share/gc/shared/parallelCleaning.hpp b/src/hotspot/share/gc/shared/parallelCleaning.hpp index 6b16894954c..4a7c724fef5 100644 --- a/src/hotspot/share/gc/shared/parallelCleaning.hpp +++ b/src/hotspot/share/gc/shared/parallelCleaning.hpp @@ -52,19 +52,16 @@ public: void work(uint worker_id); }; - +// Cleans out the Klass tree from stale data. class KlassCleaningTask : public StackObj { - volatile int _clean_klass_tree_claimed; + volatile bool _clean_klass_tree_claimed; ClassLoaderDataGraphKlassIteratorAtomic _klass_iterator; -public: - KlassCleaningTask(); - -private: bool claim_clean_klass_tree_task(); InstanceKlass* claim_next_klass(); public: + KlassCleaningTask(); void work(); };