< prev index next >

src/hotspot/share/runtime/synchronizer.cpp

Print this page
rev 56044 : imported patch 8230184.patch
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.
rev 56047 : renames, comment cleanups and additions, whitespace and indent fixes; add PaddedObjectMonitor typdef to make 'PaddedEnd<ObjectMonitor' cleanups easier; add a couple of missing 'private' decls; delete unused next() function; merge pieces from dcubed.monitor_deflate_conc.v2.06d in dcubed.monitor_deflate_conc.v2.06[ac]; merge with 8229212.patch; merge with jdk-14+11; merge with 8230184.patch.

*** 1093,1102 **** --- 1093,1105 ---- list_oops_do(thread->om_in_use_list, f); } void ObjectSynchronizer::list_oops_do(ObjectMonitor* list, OopClosure* f) { assert(SafepointSynchronize::is_at_safepoint(), "must be at safepoint"); + // The oops_do() phase does not overlap with monitor deflation + // so no need to update the ObjectMonitor's ref_count for this + // ObjectMonitor* use. ObjectMonitor* mid; for (mid = list; mid != NULL; mid = mid->_next_om) { if (mid->object() != NULL) { f->do_oop((oop*)mid->object_addr()); }
*** 2080,2090 **** while (mid != NULL) { // Only try to deflate if there is an associated Java object and if // mid is old (is not newly allocated and is not newly freed). if (mid->object() != NULL && mid->is_old() && deflate_monitor_using_JT(mid, free_head_p, free_tail_p)) { ! // Deflation succeeded so update the in-use list. if (mid == *list_p) { *list_p = mid->_next_om; } else if (cur_mid_in_use != NULL) { // Maintain the current in-use list. cur_mid_in_use->_next_om = mid->_next_om; --- 2083,2095 ---- while (mid != NULL) { // Only try to deflate if there is an associated Java object and if // mid is old (is not newly allocated and is not newly freed). if (mid->object() != NULL && mid->is_old() && deflate_monitor_using_JT(mid, free_head_p, free_tail_p)) { ! // Deflation succeeded and already updated free_head_p and ! // free_tail_p as needed. Finish the move to the local free list ! // by unlinking mid from the global or per-thread in-use list. if (mid == *list_p) { *list_p = mid->_next_om; } else if (cur_mid_in_use != NULL) { // Maintain the current in-use list. cur_mid_in_use->_next_om = mid->_next_om;
*** 2248,2258 **** self->om_in_use_count -= local_deflated_count; } deflated_count += local_deflated_count; if (free_head_p != NULL) { ! // Move the scavenged ObjectMonitors to the global free list. guarantee(free_tail_p != NULL && local_deflated_count > 0, "free_tail_p=" INTPTR_FORMAT ", local_deflated_count=%d", p2i(free_tail_p), local_deflated_count); assert(free_tail_p->_next_om == NULL, "invariant"); if (!is_global) { Thread::muxAcquire(&gListLock, "deflate_per_thread_idle_monitors_using_JT(2)"); --- 2253,2263 ---- self->om_in_use_count -= local_deflated_count; } deflated_count += local_deflated_count; if (free_head_p != NULL) { ! // Move the deflated ObjectMonitors to the global free list. guarantee(free_tail_p != NULL && local_deflated_count > 0, "free_tail_p=" INTPTR_FORMAT ", local_deflated_count=%d", p2i(free_tail_p), local_deflated_count); assert(free_tail_p->_next_om == NULL, "invariant"); if (!is_global) { Thread::muxAcquire(&gListLock, "deflate_per_thread_idle_monitors_using_JT(2)");
< prev index next >