From fd2ee0844a8b96491787c318f2eb6fe4d8fd75c2 Mon Sep 17 00:00:00 2001 From: Thomas Schatzl Date: Wed, 16 Jul 2025 07:20:15 +0000 Subject: [PATCH] 8361705: Clean up KlassCleaningTask Reviewed-by: shade, ayang --- src/hotspot/share/gc/shared/parallelCleaning.cpp | 6 ++---- src/hotspot/share/gc/shared/parallelCleaning.hpp | 9 +++------ 2 files changed, 5 insertions(+), 10 deletions(-) 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(); };