< prev index next >
src/hotspot/share/runtime/safepoint.cpp
Print this page
rev 56046 : v2.00 -> v2.05 (CR5/v2.05/8-for-jdk13) patches combined into one; merge with 8229212.patch; merge with jdk-14+11; merge with 8230184.patch.
*** 521,532 ****
post_safepoint_end_event(event, safepoint_id());
}
bool SafepointSynchronize::is_cleanup_needed() {
! // Need a safepoint if there are many monitors to deflate.
! if (ObjectSynchronizer::is_cleanup_needed()) return true;
// Need a safepoint if some inline cache buffers is non-empty
if (!InlineCacheBuffer::is_empty()) return true;
if (StringTable::needs_rehashing()) return true;
if (SymbolTable::needs_rehashing()) return true;
return false;
--- 521,533 ----
post_safepoint_end_event(event, safepoint_id());
}
bool SafepointSynchronize::is_cleanup_needed() {
! // Need a cleanup safepoint if there are too many monitors in use
! // and the monitor deflation needs to be done at a safepoint.
! if (ObjectSynchronizer::is_safepoint_deflation_needed()) return true;
// Need a safepoint if some inline cache buffers is non-empty
if (!InlineCacheBuffer::is_empty()) return true;
if (StringTable::needs_rehashing()) return true;
if (SymbolTable::needs_rehashing()) return true;
return false;
*** 541,550 ****
--- 542,555 ----
ParallelSPCleanupThreadClosure(DeflateMonitorCounters* counters) :
_nmethod_cl(UseCodeAging ? NMethodSweeper::prepare_reset_hotness_counters() : NULL),
_counters(counters) {}
void do_thread(Thread* thread) {
+ // deflate_thread_local_monitors() handles or requests deflation of
+ // this thread's idle monitors. If !AsyncDeflateIdleMonitors or if
+ // there is a special cleanup request, deflation is handled now.
+ // Otherwise, async deflation is requested via a flag.
ObjectSynchronizer::deflate_thread_local_monitors(thread, _counters);
if (_nmethod_cl != NULL && thread->is_Java_thread() &&
! thread->is_Code_cache_sweeper_thread()) {
JavaThread* jt = (JavaThread*) thread;
jt->nmethods_do(_nmethod_cl);
*** 573,583 ****
if (_subtasks.try_claim_task(SafepointSynchronize::SAFEPOINT_CLEANUP_DEFLATE_MONITORS)) {
const char* name = "deflating global idle monitors";
EventSafepointCleanupTask event;
TraceTime timer(name, TRACETIME_LOG(Info, safepoint, cleanup));
! ObjectSynchronizer::deflate_idle_monitors(_counters);
post_safepoint_cleanup_task_event(event, safepoint_id, name);
}
if (_subtasks.try_claim_task(SafepointSynchronize::SAFEPOINT_CLEANUP_UPDATE_INLINE_CACHES)) {
--- 578,592 ----
if (_subtasks.try_claim_task(SafepointSynchronize::SAFEPOINT_CLEANUP_DEFLATE_MONITORS)) {
const char* name = "deflating global idle monitors";
EventSafepointCleanupTask event;
TraceTime timer(name, TRACETIME_LOG(Info, safepoint, cleanup));
! // AsyncDeflateIdleMonitors only uses DeflateMonitorCounters
! // when a special cleanup has been requested.
! // Note: This logging output will include global idle monitor
! // elapsed times, but not global idle monitor deflation count.
! ObjectSynchronizer::do_safepoint_work(_counters);
post_safepoint_cleanup_task_event(event, safepoint_id, name);
}
if (_subtasks.try_claim_task(SafepointSynchronize::SAFEPOINT_CLEANUP_UPDATE_INLINE_CACHES)) {
< prev index next >