From cbd3926a7c53a066f0ea24ec3c074fa5a57695b2 Mon Sep 17 00:00:00 2001 From: Thomas Schatzl Date: Mon, 11 Sep 2023 13:58:24 +0200 Subject: [PATCH 1/2] 8315998 Remove dead ClassLoaderDataGraphKlassIteratorStatic --- .../share/classfile/classLoaderData.cpp | 6 -- .../share/classfile/classLoaderDataGraph.cpp | 79 ------------------- .../share/classfile/classLoaderDataGraph.hpp | 5 -- 3 files changed, 90 deletions(-) diff --git a/src/hotspot/share/classfile/classLoaderData.cpp b/src/hotspot/share/classfile/classLoaderData.cpp index aa1f6f531077b..47e8569d934ef 100644 --- a/src/hotspot/share/classfile/classLoaderData.cpp +++ b/src/hotspot/share/classfile/classLoaderData.cpp @@ -558,9 +558,6 @@ void ClassLoaderData::initialize_holder(Handle loader_or_mirror) { void ClassLoaderData::remove_class(Klass* scratch_class) { assert_locked_or_safepoint(ClassLoaderDataGraph_lock); - // Adjust global class iterator. - ClassLoaderDataGraph::adjust_saved_class(scratch_class); - Klass* prev = nullptr; for (Klass* k = _klasses; k != nullptr; k = k->next_link()) { if (k == scratch_class) { @@ -620,9 +617,6 @@ void ClassLoaderData::unload() { if (_jmethod_ids != nullptr) { Method::clear_jmethod_ids(this); } - - // Clean up global class iterator for compiler - ClassLoaderDataGraph::adjust_saved_class(this); } ModuleEntryTable* ClassLoaderData::modules() { diff --git a/src/hotspot/share/classfile/classLoaderDataGraph.cpp b/src/hotspot/share/classfile/classLoaderDataGraph.cpp index 5645ab4aafe67..8d510f708dc9e 100644 --- a/src/hotspot/share/classfile/classLoaderDataGraph.cpp +++ b/src/hotspot/share/classfile/classLoaderDataGraph.cpp @@ -80,85 +80,6 @@ void ClassLoaderDataGraph::verify_claimed_marks_cleared(int claim) { #endif } -// Class iterator used by the compiler. It gets some number of classes at -// a safepoint to decay invocation counters on the methods. -class ClassLoaderDataGraphKlassIteratorStatic { - ClassLoaderData* _current_loader_data; - Klass* _current_class_entry; - public: - - ClassLoaderDataGraphKlassIteratorStatic() : _current_loader_data(nullptr), _current_class_entry(nullptr) {} - - InstanceKlass* try_get_next_class() { - assert(SafepointSynchronize::is_at_safepoint(), "only called at safepoint"); - size_t max_classes = ClassLoaderDataGraph::num_instance_classes(); - assert(max_classes > 0, "should not be called with no instance classes"); - for (size_t i = 0; i < max_classes; ) { - - if (_current_class_entry != nullptr) { - Klass* k = _current_class_entry; - _current_class_entry = _current_class_entry->next_link(); - - if (k->is_instance_klass()) { - InstanceKlass* ik = InstanceKlass::cast(k); - i++; // count all instance classes found - // Not yet loaded classes are counted in max_classes - // but only return loaded classes. - if (ik->is_loaded()) { - return ik; - } - } - } else { - // Go to next CLD - if (_current_loader_data != nullptr) { - _current_loader_data = _current_loader_data->next(); - } - // Start at the beginning - if (_current_loader_data == nullptr) { - _current_loader_data = ClassLoaderDataGraph::_head; - } - - _current_class_entry = _current_loader_data->klasses(); - } - } - // Should never be reached unless all instance classes have failed or are not fully loaded. - // Caller handles null. - return nullptr; - } - - // If the current class for the static iterator is a class being unloaded or - // deallocated, adjust the current class. - void adjust_saved_class(ClassLoaderData* cld) { - if (_current_loader_data == cld) { - _current_loader_data = cld->next(); - if (_current_loader_data != nullptr) { - _current_class_entry = _current_loader_data->klasses(); - } // else try_get_next_class will start at the head - } - } - - void adjust_saved_class(Klass* klass) { - if (_current_class_entry == klass) { - _current_class_entry = klass->next_link(); - } - } -}; - -static ClassLoaderDataGraphKlassIteratorStatic static_klass_iterator; - -InstanceKlass* ClassLoaderDataGraph::try_get_next_class() { - assert(SafepointSynchronize::is_at_safepoint(), "only called at safepoint"); - return static_klass_iterator.try_get_next_class(); -} - -void ClassLoaderDataGraph::adjust_saved_class(ClassLoaderData* cld) { - return static_klass_iterator.adjust_saved_class(cld); -} - -void ClassLoaderDataGraph::adjust_saved_class(Klass* klass) { - return static_klass_iterator.adjust_saved_class(klass); -} - void ClassLoaderDataGraph::clean_deallocate_lists(bool walk_previous_versions) { assert(SafepointSynchronize::is_at_safepoint(), "must only be called at safepoint"); uint loaders_processed = 0; diff --git a/src/hotspot/share/classfile/classLoaderDataGraph.hpp b/src/hotspot/share/classfile/classLoaderDataGraph.hpp index c27a03ec671c2..ae502b6d30d9d 100644 --- a/src/hotspot/share/classfile/classLoaderDataGraph.hpp +++ b/src/hotspot/share/classfile/classLoaderDataGraph.hpp @@ -97,11 +97,6 @@ class ClassLoaderDataGraph : public AllStatic { // Called from VMOperation static void walk_metadata_and_clean_metaspaces(); - // VM_CounterDecay iteration support - static InstanceKlass* try_get_next_class(); - static void adjust_saved_class(ClassLoaderData* cld); - static void adjust_saved_class(Klass* klass); - static void verify_dictionary(); static void print_dictionary(outputStream* st); static void print_table_statistics(outputStream* st); From 072ad0f323d099859243116a002c81ff6b1108b4 Mon Sep 17 00:00:00 2001 From: Thomas Schatzl Date: Mon, 11 Sep 2023 15:26:06 +0200 Subject: [PATCH 2/2] Also remove InvocationCounter::decay() --- src/hotspot/share/interpreter/invocationCounter.cpp | 4 ---- src/hotspot/share/interpreter/invocationCounter.hpp | 1 - 2 files changed, 5 deletions(-) diff --git a/src/hotspot/share/interpreter/invocationCounter.cpp b/src/hotspot/share/interpreter/invocationCounter.cpp index d1165d29ac9c1..6793ff039e060 100644 --- a/src/hotspot/share/interpreter/invocationCounter.cpp +++ b/src/hotspot/share/interpreter/invocationCounter.cpp @@ -59,10 +59,6 @@ void InvocationCounter::reset() { update(0); } -void InvocationCounter::decay() { - update(count() >> 1); -} - void InvocationCounter::print() { uint counter = raw_counter(); tty->print_cr("invocation count: up = %d, limit = " INTX_FORMAT ", carry = %s", diff --git a/src/hotspot/share/interpreter/invocationCounter.hpp b/src/hotspot/share/interpreter/invocationCounter.hpp index 5ae6fb91b1565..3578f2ed77733 100644 --- a/src/hotspot/share/interpreter/invocationCounter.hpp +++ b/src/hotspot/share/interpreter/invocationCounter.hpp @@ -60,7 +60,6 @@ class InvocationCounter { // Manipulation void reset(); void init(); - void decay(); // decay counter (divide by two) void set_carry_on_overflow(); void set(uint count); void increment() { _counter += count_increment; }