Skip to content

Commit

Permalink
SapMachine #1438: Vitals: ClassLoaderDataGraph by SamplerThread is un…
Browse files Browse the repository at this point in the history
…synchronized
  • Loading branch information
reinrich authored Jul 12, 2023
1 parent 223ac34 commit 6346209
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 26 deletions.
9 changes: 9 additions & 0 deletions src/hotspot/share/classfile/classLoaderData.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -183,6 +183,11 @@ ClassLoaderData::ClassLoaderData(Handle h_class_loader, bool is_anonymous) :
NOT_PRODUCT(_dependency_count = 0); // number of class loader dependencies

JFR_ONLY(INIT_ID(this);)

// SapMachine 2023-07-04 : vitals
if (EnableVitals) {
sapmachine_vitals::counters::inc_cld_count(is_anonymous);
}
}

ClassLoaderData::ChunkedHandleList::~ChunkedHandleList() {
Expand Down Expand Up @@ -1400,6 +1405,10 @@ bool ClassLoaderDataGraph::do_unloading(bool clean_previous_versions) {
}
seen_dead_loader = true;
loaders_removed++;
// SapMachine 2023-07-04 : vitals
if (EnableVitals) {
sapmachine_vitals::counters::dec_cld_count(data->is_anonymous());
}
ClassLoaderData* dead = data;
dead->unload();
data = data->next();
Expand Down
44 changes: 18 additions & 26 deletions src/hotspot/share/vitals/vitals.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -63,10 +63,26 @@ static Lock g_vitals_lock("VitalsLock");

namespace counters {

static volatile size_t g_number_of_clds = 0;
static volatile size_t g_number_of_anon_clds = 0;
static volatile size_t g_classes_loaded = 0;
static volatile size_t g_classes_unloaded = 0;
static volatile size_t g_threads_created = 0;

void inc_cld_count(bool is_anon_cld) {
Atomic::inc(&g_number_of_clds);
if (is_anon_cld) {
Atomic::inc(&g_number_of_anon_clds);
}
}

void dec_cld_count(bool is_anon_cld) {
Atomic::dec(&g_number_of_clds);
if (is_anon_cld) {
Atomic::dec(&g_number_of_anon_clds);
}
}

void inc_classes_loaded(size_t count) {
Atomic::add(count, &g_classes_loaded);
}
Expand Down Expand Up @@ -1102,22 +1118,6 @@ static void set_value_in_sample(const Column* col, Sample* sample, T t) {
}
}

// Count CLDs
// Not in 11
//class CLDCounterClosure: public CLDClosure {
//public:
// int _cnt;
// int _anon_cnt;
// CLDCounterClosure() : _cnt(0), _anon_cnt(0) {}
// void do_cld(ClassLoaderData* cld) {
// _cnt ++;
// if (cld->has_class_mirror_holder()) {
// _anon_cnt ++;
// }
// }
//};


struct nmt_values_t {
// How much memory, in total, was committed via mmap
value_t mapped_total;
Expand Down Expand Up @@ -1233,16 +1233,8 @@ void sample_jvm_values(Sample* sample, bool avoid_locking) {
}

// CLDG
// (not in 11)
// if (!avoid_locking) {
// CLDCounterClosure cl;
// {
// MutexLocker lck(ClassLoaderDataGraph_lock);
// ClassLoaderDataGraph::cld_do(&cl);
// }
// set_value_in_sample(g_col_number_of_clds, sample, cl._cnt);
// set_value_in_sample(g_col_number_of_anon_clds, sample, cl._anon_cnt);
// }
set_value_in_sample(g_col_number_of_clds, sample, counters::g_number_of_clds);
set_value_in_sample(g_col_number_of_anon_clds, sample, counters::g_number_of_anon_clds);

// Classes
set_value_in_sample(g_col_number_of_classes, sample,
Expand Down
2 changes: 2 additions & 0 deletions src/hotspot/share/vitals/vitals.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,8 @@ namespace sapmachine_vitals {
const Thread* samplerthread();

namespace counters {
void inc_cld_count(bool is_anon_cld);
void dec_cld_count(bool is_anon_cld);
void inc_classes_loaded(size_t count);
void inc_classes_unloaded(size_t count);
void inc_threads_created(size_t count);
Expand Down

0 comments on commit 6346209

Please sign in to comment.