--- old/src/hotspot/share/runtime/heapMonitoring.cpp 2017-10-31 13:44:23.647658399 -0700 +++ new/src/hotspot/share/runtime/heapMonitoring.cpp 2017-10-31 13:44:23.295659805 -0700 @@ -209,7 +209,7 @@ } void initialize(int max_storage) { - MutexLocker mu(HeapMonitor_lock); + MutexLocker mu(HeapMonitorStorage_lock); free_storage(); allocate_storage(max_storage); memset(&_stats, 0, sizeof(_stats)); @@ -295,7 +295,6 @@ // Statics for Sampler double HeapMonitoring::_log_table[1 << FastLogNumBits]; bool HeapMonitoring::_enabled; -AlwaysTrueClosure HeapMonitoring::_always_true; jint HeapMonitoring::_monitoring_rate; // Cheap random number generator @@ -382,7 +381,7 @@ } void StackTraceStorage::add_trace(jvmtiStackTrace *trace, oop o) { - MutexLocker mu(HeapMonitor_lock); + MutexLocker mu(HeapMonitorStorage_lock); StackTraceData new_data(trace, o); _stats.sample_count++; _stats.stack_depth_accumulation += trace->frame_count; @@ -391,7 +390,7 @@ void StackTraceStorage::weak_oops_do(BoolObjectClosure *is_alive, OopClosure *f) { - MutexLocker mu(HeapMonitor_lock); + MutexLocker mu(HeapMonitorStorage_lock); size_t count = 0; if (initialized()) { int len = _allocated_traces->length(); @@ -476,7 +475,7 @@ void StackTraceStorage::copy_stack_traces(const StackTraceDataCopier &copier, jvmtiStackTraces *traces) { - MutexLocker mu(HeapMonitor_lock); + MutexLocker mu(HeapMonitorStorage_lock); int len = copier.size(); // Create a new array to store the StackTraceData objects. @@ -566,6 +565,7 @@ void HeapMonitoring::initialize_profiling(jint monitoring_rate, jint max_gc_storage) { + MutexLocker mu(HeapMonitor_lock); // Ignore if already enabled. if (_enabled) { return; @@ -592,6 +592,7 @@ } void HeapMonitoring::stop_profiling() { + MutexLocker mu(HeapMonitor_lock); _enabled = false; } @@ -613,10 +614,10 @@ // 5194297183973780480 bytes. In this case, // for sample_parameter = 1<<19, max possible step is // 9448372 bytes (24 bits). - const uint64_t prng_mod_power = 48; // Number of bits in prng + const uint64_t PrngModPower = 48; // Number of bits in prng // The uint32_t cast is to prevent a (hard-to-reproduce) NAN // under piii debug for some binaries. - double q = static_cast(_rnd >> (prng_mod_power - 26)) + 1.0; + double q = static_cast(_rnd >> (PrngModPower - 26)) + 1.0; // Put the computed p-value through the CDF of a geometric. // For faster performance (save ~1/20th exec time), replace // min(0.0, FastLog2(q) - 26) by (Fastlog2(q) - 26.000705)