< prev index next >
src/hotspot/share/runtime/serviceThread.cpp
Print this page
rev 54572 : Checkpoint latest preliminary review patches for full OpenJDK review; merge with 8222295.patch.
*** 124,133 ****
--- 124,134 ----
bool symboltable_work = false;
bool resolved_method_table_work = false;
bool protection_domain_table_work = false;
bool oopstorage_work = false;
bool oopstorages_cleanup[oopstorage_count] = {}; // Zero (false) initialize.
+ bool deflate_idle_monitors = false;
JvmtiDeferredEvent jvmti_event;
{
// Need state transition ThreadBlockInVM so that this thread
// will be handled by safepoint correctly when this thread is
// notified at a safepoint.
*** 151,163 ****
(symboltable_work = SymbolTable::has_work()) |
(resolved_method_table_work = ResolvedMethodTable::has_work()) |
(protection_domain_table_work = SystemDictionary::pd_cache_table()->has_work()) |
(oopstorage_work = needs_oopstorage_cleanup(oopstorages,
oopstorages_cleanup,
! oopstorage_count)))
!
! == 0) {
// Wait until notified that there is some work to do.
ml.wait(Mutex::_no_safepoint_check_flag);
}
if (has_jvmti_events) {
--- 152,164 ----
(symboltable_work = SymbolTable::has_work()) |
(resolved_method_table_work = ResolvedMethodTable::has_work()) |
(protection_domain_table_work = SystemDictionary::pd_cache_table()->has_work()) |
(oopstorage_work = needs_oopstorage_cleanup(oopstorages,
oopstorages_cleanup,
! oopstorage_count)) |
! (deflate_idle_monitors = ObjectSynchronizer::gOmShouldDeflateIdleMonitors())
! ) == 0) {
// Wait until notified that there is some work to do.
ml.wait(Mutex::_no_safepoint_check_flag);
}
if (has_jvmti_events) {
*** 198,207 ****
--- 199,215 ----
}
if (oopstorage_work) {
cleanup_oopstorages(oopstorages, oopstorages_cleanup, oopstorage_count);
}
+
+ if (deflate_idle_monitors) {
+ // Deflate any global idle monitors.
+ // deflate_per_thread_idle_monitors_using_JT() is called by
+ // each JavaThread from ObjectSynchronizer::omAlloc() as needed.
+ ObjectSynchronizer::deflate_global_idle_monitors_using_JT();
+ }
}
}
bool ServiceThread::is_service_thread(Thread* thread) {
return thread == _instance;
< prev index next >