synchronizer.cpp revision 7050:03835eaaab2d
1/*
2 * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.
8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 *
23 */
24
25#include "precompiled.hpp"
26#include "classfile/vmSymbols.hpp"
27#include "memory/resourceArea.hpp"
28#include "oops/markOop.hpp"
29#include "oops/oop.inline.hpp"
30#include "runtime/atomic.inline.hpp"
31#include "runtime/biasedLocking.hpp"
32#include "runtime/handles.inline.hpp"
33#include "runtime/interfaceSupport.hpp"
34#include "runtime/mutexLocker.hpp"
35#include "runtime/objectMonitor.hpp"
36#include "runtime/objectMonitor.inline.hpp"
37#include "runtime/osThread.hpp"
38#include "runtime/stubRoutines.hpp"
39#include "runtime/synchronizer.hpp"
40#include "runtime/thread.inline.hpp"
41#include "utilities/dtrace.hpp"
42#include "utilities/events.hpp"
43#include "utilities/preserveException.hpp"
44
45#if defined(__GNUC__) && !defined(PPC64)
46// Need to inhibit inlining for older versions of GCC to avoid build-time failures
47  #define NOINLINE __attribute__((noinline))
48#else
49  #define NOINLINE
50#endif
51
52PRAGMA_FORMAT_MUTE_WARNINGS_FOR_GCC
53
54// The "core" versions of monitor enter and exit reside in this file.
55// The interpreter and compilers contain specialized transliterated
56// variants of the enter-exit fast-path operations.  See i486.ad fast_lock(),
57// for instance.  If you make changes here, make sure to modify the
58// interpreter, and both C1 and C2 fast-path inline locking code emission.
59//
60//
61// -----------------------------------------------------------------------------
62
63#ifdef DTRACE_ENABLED
64
65// Only bother with this argument setup if dtrace is available
66// TODO-FIXME: probes should not fire when caller is _blocked.  assert() accordingly.
67
68#define DTRACE_MONITOR_PROBE_COMMON(obj, thread)                           \
69  char* bytes = NULL;                                                      \
70  int len = 0;                                                             \
71  jlong jtid = SharedRuntime::get_java_tid(thread);                        \
72  Symbol* klassname = ((oop)(obj))->klass()->name();                       \
73  if (klassname != NULL) {                                                 \
74    bytes = (char*)klassname->bytes();                                     \
75    len = klassname->utf8_length();                                        \
76  }
77
78#define DTRACE_MONITOR_WAIT_PROBE(monitor, obj, thread, millis)            \
79  {                                                                        \
80    if (DTraceMonitorProbes) {                                            \
81      DTRACE_MONITOR_PROBE_COMMON(obj, thread);                            \
82      HOTSPOT_MONITOR_WAIT(jtid,                                           \
83                           (uintptr_t)(monitor), bytes, len, (millis));  \
84    }                                                                      \
85  }
86
87#define HOTSPOT_MONITOR_PROBE_waited HOTSPOT_MONITOR_WAITED
88
89#define DTRACE_MONITOR_PROBE(probe, monitor, obj, thread)                  \
90  {                                                                        \
91    if (DTraceMonitorProbes) {                                            \
92      DTRACE_MONITOR_PROBE_COMMON(obj, thread);                            \
93      HOTSPOT_MONITOR_PROBE_##probe(jtid, /* probe = waited */             \
94                       (uintptr_t)(monitor), bytes, len);                  \
95    }                                                                      \
96  }
97
98#else //  ndef DTRACE_ENABLED
99
100#define DTRACE_MONITOR_WAIT_PROBE(obj, thread, millis, mon)    {;}
101#define DTRACE_MONITOR_PROBE(probe, obj, thread, mon)          {;}
102
103#endif // ndef DTRACE_ENABLED
104
105// This exists only as a workaround of dtrace bug 6254741
106int dtrace_waited_probe(ObjectMonitor* monitor, Handle obj, Thread* thr) {
107  DTRACE_MONITOR_PROBE(waited, monitor, obj(), thr);
108  return 0;
109}
110
111#define NINFLATIONLOCKS 256
112static volatile intptr_t InflationLocks[NINFLATIONLOCKS];
113
114ObjectMonitor * ObjectSynchronizer::gBlockList = NULL;
115ObjectMonitor * volatile ObjectSynchronizer::gFreeList  = NULL;
116ObjectMonitor * volatile ObjectSynchronizer::gOmInUseList  = NULL;
117int ObjectSynchronizer::gOmInUseCount = 0;
118static volatile intptr_t ListLock = 0;      // protects global monitor free-list cache
119static volatile int MonitorFreeCount  = 0;      // # on gFreeList
120static volatile int MonitorPopulation = 0;      // # Extant -- in circulation
121#define CHAINMARKER (cast_to_oop<intptr_t>(-1))
122
123// -----------------------------------------------------------------------------
124//  Fast Monitor Enter/Exit
125// This the fast monitor enter. The interpreter and compiler use
126// some assembly copies of this code. Make sure update those code
127// if the following function is changed. The implementation is
128// extremely sensitive to race condition. Be careful.
129
130void ObjectSynchronizer::fast_enter(Handle obj, BasicLock* lock, bool attempt_rebias, TRAPS) {
131  if (UseBiasedLocking) {
132    if (!SafepointSynchronize::is_at_safepoint()) {
133      BiasedLocking::Condition cond = BiasedLocking::revoke_and_rebias(obj, attempt_rebias, THREAD);
134      if (cond == BiasedLocking::BIAS_REVOKED_AND_REBIASED) {
135        return;
136      }
137    } else {
138      assert(!attempt_rebias, "can not rebias toward VM thread");
139      BiasedLocking::revoke_at_safepoint(obj);
140    }
141    assert(!obj->mark()->has_bias_pattern(), "biases should be revoked by now");
142  }
143
144  slow_enter(obj, lock, THREAD);
145}
146
147void ObjectSynchronizer::fast_exit(oop object, BasicLock* lock, TRAPS) {
148  assert(!object->mark()->has_bias_pattern(), "should not see bias pattern here");
149  // if displaced header is null, the previous enter is recursive enter, no-op
150  markOop dhw = lock->displaced_header();
151  markOop mark;
152  if (dhw == NULL) {
153    // Recursive stack-lock.
154    // Diagnostics -- Could be: stack-locked, inflating, inflated.
155    mark = object->mark();
156    assert(!mark->is_neutral(), "invariant");
157    if (mark->has_locker() && mark != markOopDesc::INFLATING()) {
158      assert(THREAD->is_lock_owned((address)mark->locker()), "invariant");
159    }
160    if (mark->has_monitor()) {
161      ObjectMonitor * m = mark->monitor();
162      assert(((oop)(m->object()))->mark() == mark, "invariant");
163      assert(m->is_entered(THREAD), "invariant");
164    }
165    return;
166  }
167
168  mark = object->mark();
169
170  // If the object is stack-locked by the current thread, try to
171  // swing the displaced header from the box back to the mark.
172  if (mark == (markOop) lock) {
173    assert(dhw->is_neutral(), "invariant");
174    if ((markOop) Atomic::cmpxchg_ptr (dhw, object->mark_addr(), mark) == mark) {
175      TEVENT(fast_exit: release stacklock);
176      return;
177    }
178  }
179
180  ObjectSynchronizer::inflate(THREAD, object)->exit(true, THREAD);
181}
182
183// -----------------------------------------------------------------------------
184// Interpreter/Compiler Slow Case
185// This routine is used to handle interpreter/compiler slow case
186// We don't need to use fast path here, because it must have been
187// failed in the interpreter/compiler code.
188void ObjectSynchronizer::slow_enter(Handle obj, BasicLock* lock, TRAPS) {
189  markOop mark = obj->mark();
190  assert(!mark->has_bias_pattern(), "should not see bias pattern here");
191
192  if (mark->is_neutral()) {
193    // Anticipate successful CAS -- the ST of the displaced mark must
194    // be visible <= the ST performed by the CAS.
195    lock->set_displaced_header(mark);
196    if (mark == (markOop) Atomic::cmpxchg_ptr(lock, obj()->mark_addr(), mark)) {
197      TEVENT(slow_enter: release stacklock);
198      return;
199    }
200    // Fall through to inflate() ...
201  } else
202  if (mark->has_locker() && THREAD->is_lock_owned((address)mark->locker())) {
203    assert(lock != mark->locker(), "must not re-lock the same lock");
204    assert(lock != (BasicLock*)obj->mark(), "don't relock with same BasicLock");
205    lock->set_displaced_header(NULL);
206    return;
207  }
208
209  // The object header will never be displaced to this lock,
210  // so it does not matter what the value is, except that it
211  // must be non-zero to avoid looking like a re-entrant lock,
212  // and must not look locked either.
213  lock->set_displaced_header(markOopDesc::unused_mark());
214  ObjectSynchronizer::inflate(THREAD, obj())->enter(THREAD);
215}
216
217// This routine is used to handle interpreter/compiler slow case
218// We don't need to use fast path here, because it must have
219// failed in the interpreter/compiler code. Simply use the heavy
220// weight monitor should be ok, unless someone find otherwise.
221void ObjectSynchronizer::slow_exit(oop object, BasicLock* lock, TRAPS) {
222  fast_exit(object, lock, THREAD);
223}
224
225// -----------------------------------------------------------------------------
226// Class Loader  support to workaround deadlocks on the class loader lock objects
227// Also used by GC
228// complete_exit()/reenter() are used to wait on a nested lock
229// i.e. to give up an outer lock completely and then re-enter
230// Used when holding nested locks - lock acquisition order: lock1 then lock2
231//  1) complete_exit lock1 - saving recursion count
232//  2) wait on lock2
233//  3) when notified on lock2, unlock lock2
234//  4) reenter lock1 with original recursion count
235//  5) lock lock2
236// NOTE: must use heavy weight monitor to handle complete_exit/reenter()
237intptr_t ObjectSynchronizer::complete_exit(Handle obj, TRAPS) {
238  TEVENT(complete_exit);
239  if (UseBiasedLocking) {
240    BiasedLocking::revoke_and_rebias(obj, false, THREAD);
241    assert(!obj->mark()->has_bias_pattern(), "biases should be revoked by now");
242  }
243
244  ObjectMonitor* monitor = ObjectSynchronizer::inflate(THREAD, obj());
245
246  return monitor->complete_exit(THREAD);
247}
248
249// NOTE: must use heavy weight monitor to handle complete_exit/reenter()
250void ObjectSynchronizer::reenter(Handle obj, intptr_t recursion, TRAPS) {
251  TEVENT(reenter);
252  if (UseBiasedLocking) {
253    BiasedLocking::revoke_and_rebias(obj, false, THREAD);
254    assert(!obj->mark()->has_bias_pattern(), "biases should be revoked by now");
255  }
256
257  ObjectMonitor* monitor = ObjectSynchronizer::inflate(THREAD, obj());
258
259  monitor->reenter(recursion, THREAD);
260}
261// -----------------------------------------------------------------------------
262// JNI locks on java objects
263// NOTE: must use heavy weight monitor to handle jni monitor enter
264void ObjectSynchronizer::jni_enter(Handle obj, TRAPS) { // possible entry from jni enter
265  // the current locking is from JNI instead of Java code
266  TEVENT(jni_enter);
267  if (UseBiasedLocking) {
268    BiasedLocking::revoke_and_rebias(obj, false, THREAD);
269    assert(!obj->mark()->has_bias_pattern(), "biases should be revoked by now");
270  }
271  THREAD->set_current_pending_monitor_is_from_java(false);
272  ObjectSynchronizer::inflate(THREAD, obj())->enter(THREAD);
273  THREAD->set_current_pending_monitor_is_from_java(true);
274}
275
276// NOTE: must use heavy weight monitor to handle jni monitor enter
277bool ObjectSynchronizer::jni_try_enter(Handle obj, Thread* THREAD) {
278  if (UseBiasedLocking) {
279    BiasedLocking::revoke_and_rebias(obj, false, THREAD);
280    assert(!obj->mark()->has_bias_pattern(), "biases should be revoked by now");
281  }
282
283  ObjectMonitor* monitor = ObjectSynchronizer::inflate_helper(obj());
284  return monitor->try_enter(THREAD);
285}
286
287
288// NOTE: must use heavy weight monitor to handle jni monitor exit
289void ObjectSynchronizer::jni_exit(oop obj, Thread* THREAD) {
290  TEVENT(jni_exit);
291  if (UseBiasedLocking) {
292    Handle h_obj(THREAD, obj);
293    BiasedLocking::revoke_and_rebias(h_obj, false, THREAD);
294    obj = h_obj();
295  }
296  assert(!obj->mark()->has_bias_pattern(), "biases should be revoked by now");
297
298  ObjectMonitor* monitor = ObjectSynchronizer::inflate(THREAD, obj);
299  // If this thread has locked the object, exit the monitor.  Note:  can't use
300  // monitor->check(CHECK); must exit even if an exception is pending.
301  if (monitor->check(THREAD)) {
302    monitor->exit(true, THREAD);
303  }
304}
305
306// -----------------------------------------------------------------------------
307// Internal VM locks on java objects
308// standard constructor, allows locking failures
309ObjectLocker::ObjectLocker(Handle obj, Thread* thread, bool doLock) {
310  _dolock = doLock;
311  _thread = thread;
312  debug_only(if (StrictSafepointChecks) _thread->check_for_valid_safepoint_state(false);)
313  _obj = obj;
314
315  if (_dolock) {
316    TEVENT(ObjectLocker);
317
318    ObjectSynchronizer::fast_enter(_obj, &_lock, false, _thread);
319  }
320}
321
322ObjectLocker::~ObjectLocker() {
323  if (_dolock) {
324    ObjectSynchronizer::fast_exit(_obj(), &_lock, _thread);
325  }
326}
327
328
329// -----------------------------------------------------------------------------
330//  Wait/Notify/NotifyAll
331// NOTE: must use heavy weight monitor to handle wait()
332int ObjectSynchronizer::wait(Handle obj, jlong millis, TRAPS) {
333  if (UseBiasedLocking) {
334    BiasedLocking::revoke_and_rebias(obj, false, THREAD);
335    assert(!obj->mark()->has_bias_pattern(), "biases should be revoked by now");
336  }
337  if (millis < 0) {
338    TEVENT(wait - throw IAX);
339    THROW_MSG_0(vmSymbols::java_lang_IllegalArgumentException(), "timeout value is negative");
340  }
341  ObjectMonitor* monitor = ObjectSynchronizer::inflate(THREAD, obj());
342  DTRACE_MONITOR_WAIT_PROBE(monitor, obj(), THREAD, millis);
343  monitor->wait(millis, true, THREAD);
344
345  // This dummy call is in place to get around dtrace bug 6254741.  Once
346  // that's fixed we can uncomment the following line, remove the call
347  // and change this function back into a "void" func.
348  // DTRACE_MONITOR_PROBE(waited, monitor, obj(), THREAD);
349  return dtrace_waited_probe(monitor, obj, THREAD);
350}
351
352void ObjectSynchronizer::waitUninterruptibly (Handle obj, jlong millis, TRAPS) {
353  if (UseBiasedLocking) {
354    BiasedLocking::revoke_and_rebias(obj, false, THREAD);
355    assert(!obj->mark()->has_bias_pattern(), "biases should be revoked by now");
356  }
357  if (millis < 0) {
358    TEVENT(wait - throw IAX);
359    THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(), "timeout value is negative");
360  }
361  ObjectSynchronizer::inflate(THREAD, obj()) -> wait(millis, false, THREAD);
362}
363
364void ObjectSynchronizer::notify(Handle obj, TRAPS) {
365  if (UseBiasedLocking) {
366    BiasedLocking::revoke_and_rebias(obj, false, THREAD);
367    assert(!obj->mark()->has_bias_pattern(), "biases should be revoked by now");
368  }
369
370  markOop mark = obj->mark();
371  if (mark->has_locker() && THREAD->is_lock_owned((address)mark->locker())) {
372    return;
373  }
374  ObjectSynchronizer::inflate(THREAD, obj())->notify(THREAD);
375}
376
377// NOTE: see comment of notify()
378void ObjectSynchronizer::notifyall(Handle obj, TRAPS) {
379  if (UseBiasedLocking) {
380    BiasedLocking::revoke_and_rebias(obj, false, THREAD);
381    assert(!obj->mark()->has_bias_pattern(), "biases should be revoked by now");
382  }
383
384  markOop mark = obj->mark();
385  if (mark->has_locker() && THREAD->is_lock_owned((address)mark->locker())) {
386    return;
387  }
388  ObjectSynchronizer::inflate(THREAD, obj())->notifyAll(THREAD);
389}
390
391// -----------------------------------------------------------------------------
392// Hash Code handling
393//
394// Performance concern:
395// OrderAccess::storestore() calls release() which at one time stored 0
396// into the global volatile OrderAccess::dummy variable. This store was
397// unnecessary for correctness. Many threads storing into a common location
398// causes considerable cache migration or "sloshing" on large SMP systems.
399// As such, I avoided using OrderAccess::storestore(). In some cases
400// OrderAccess::fence() -- which incurs local latency on the executing
401// processor -- is a better choice as it scales on SMP systems.
402//
403// See http://blogs.oracle.com/dave/entry/biased_locking_in_hotspot for
404// a discussion of coherency costs. Note that all our current reference
405// platforms provide strong ST-ST order, so the issue is moot on IA32,
406// x64, and SPARC.
407//
408// As a general policy we use "volatile" to control compiler-based reordering
409// and explicit fences (barriers) to control for architectural reordering
410// performed by the CPU(s) or platform.
411
412struct SharedGlobals {
413  // These are highly shared mostly-read variables.
414  // To avoid false-sharing they need to be the sole occupants of a $ line.
415  double padPrefix[8];
416  volatile int stwRandom;
417  volatile int stwCycle;
418
419  // Hot RW variables -- Sequester to avoid false-sharing
420  double padSuffix[16];
421  volatile int hcSequence;
422  double padFinal[8];
423};
424
425static SharedGlobals GVars;
426static int MonitorScavengeThreshold = 1000000;
427static volatile int ForceMonitorScavenge = 0; // Scavenge required and pending
428
429static markOop ReadStableMark (oop obj) {
430  markOop mark = obj->mark();
431  if (!mark->is_being_inflated()) {
432    return mark;       // normal fast-path return
433  }
434
435  int its = 0;
436  for (;;) {
437    markOop mark = obj->mark();
438    if (!mark->is_being_inflated()) {
439      return mark;    // normal fast-path return
440    }
441
442    // The object is being inflated by some other thread.
443    // The caller of ReadStableMark() must wait for inflation to complete.
444    // Avoid live-lock
445    // TODO: consider calling SafepointSynchronize::do_call_back() while
446    // spinning to see if there's a safepoint pending.  If so, immediately
447    // yielding or blocking would be appropriate.  Avoid spinning while
448    // there is a safepoint pending.
449    // TODO: add inflation contention performance counters.
450    // TODO: restrict the aggregate number of spinners.
451
452    ++its;
453    if (its > 10000 || !os::is_MP()) {
454      if (its & 1) {
455        os::naked_yield();
456        TEVENT(Inflate: INFLATING - yield);
457      } else {
458        // Note that the following code attenuates the livelock problem but is not
459        // a complete remedy.  A more complete solution would require that the inflating
460        // thread hold the associated inflation lock.  The following code simply restricts
461        // the number of spinners to at most one.  We'll have N-2 threads blocked
462        // on the inflationlock, 1 thread holding the inflation lock and using
463        // a yield/park strategy, and 1 thread in the midst of inflation.
464        // A more refined approach would be to change the encoding of INFLATING
465        // to allow encapsulation of a native thread pointer.  Threads waiting for
466        // inflation to complete would use CAS to push themselves onto a singly linked
467        // list rooted at the markword.  Once enqueued, they'd loop, checking a per-thread flag
468        // and calling park().  When inflation was complete the thread that accomplished inflation
469        // would detach the list and set the markword to inflated with a single CAS and
470        // then for each thread on the list, set the flag and unpark() the thread.
471        // This is conceptually similar to muxAcquire-muxRelease, except that muxRelease
472        // wakes at most one thread whereas we need to wake the entire list.
473        int ix = (cast_from_oop<intptr_t>(obj) >> 5) & (NINFLATIONLOCKS-1);
474        int YieldThenBlock = 0;
475        assert(ix >= 0 && ix < NINFLATIONLOCKS, "invariant");
476        assert((NINFLATIONLOCKS & (NINFLATIONLOCKS-1)) == 0, "invariant");
477        Thread::muxAcquire(InflationLocks + ix, "InflationLock");
478        while (obj->mark() == markOopDesc::INFLATING()) {
479          // Beware: NakedYield() is advisory and has almost no effect on some platforms
480          // so we periodically call Self->_ParkEvent->park(1).
481          // We use a mixed spin/yield/block mechanism.
482          if ((YieldThenBlock++) >= 16) {
483            Thread::current()->_ParkEvent->park(1);
484          } else {
485            os::naked_yield();
486          }
487        }
488        Thread::muxRelease(InflationLocks + ix);
489        TEVENT(Inflate: INFLATING - yield/park);
490      }
491    } else {
492      SpinPause();       // SMP-polite spinning
493    }
494  }
495}
496
497// hashCode() generation :
498//
499// Possibilities:
500// * MD5Digest of {obj,stwRandom}
501// * CRC32 of {obj,stwRandom} or any linear-feedback shift register function.
502// * A DES- or AES-style SBox[] mechanism
503// * One of the Phi-based schemes, such as:
504//   2654435761 = 2^32 * Phi (golden ratio)
505//   HashCodeValue = ((uintptr_t(obj) >> 3) * 2654435761) ^ GVars.stwRandom ;
506// * A variation of Marsaglia's shift-xor RNG scheme.
507// * (obj ^ stwRandom) is appealing, but can result
508//   in undesirable regularity in the hashCode values of adjacent objects
509//   (objects allocated back-to-back, in particular).  This could potentially
510//   result in hashtable collisions and reduced hashtable efficiency.
511//   There are simple ways to "diffuse" the middle address bits over the
512//   generated hashCode values:
513//
514
515static inline intptr_t get_next_hash(Thread * Self, oop obj) {
516  intptr_t value = 0;
517  if (hashCode == 0) {
518    // This form uses an unguarded global Park-Miller RNG,
519    // so it's possible for two threads to race and generate the same RNG.
520    // On MP system we'll have lots of RW access to a global, so the
521    // mechanism induces lots of coherency traffic.
522    value = os::random();
523  } else
524  if (hashCode == 1) {
525    // This variation has the property of being stable (idempotent)
526    // between STW operations.  This can be useful in some of the 1-0
527    // synchronization schemes.
528    intptr_t addrBits = cast_from_oop<intptr_t>(obj) >> 3;
529    value = addrBits ^ (addrBits >> 5) ^ GVars.stwRandom;
530  } else
531  if (hashCode == 2) {
532    value = 1;            // for sensitivity testing
533  } else
534  if (hashCode == 3) {
535    value = ++GVars.hcSequence;
536  } else
537  if (hashCode == 4) {
538    value = cast_from_oop<intptr_t>(obj);
539  } else {
540    // Marsaglia's xor-shift scheme with thread-specific state
541    // This is probably the best overall implementation -- we'll
542    // likely make this the default in future releases.
543    unsigned t = Self->_hashStateX;
544    t ^= (t << 11);
545    Self->_hashStateX = Self->_hashStateY;
546    Self->_hashStateY = Self->_hashStateZ;
547    Self->_hashStateZ = Self->_hashStateW;
548    unsigned v = Self->_hashStateW;
549    v = (v ^ (v >> 19)) ^ (t ^ (t >> 8));
550    Self->_hashStateW = v;
551    value = v;
552  }
553
554  value &= markOopDesc::hash_mask;
555  if (value == 0) value = 0xBAD;
556  assert(value != markOopDesc::no_hash, "invariant");
557  TEVENT(hashCode: GENERATE);
558  return value;
559}
560//
561intptr_t ObjectSynchronizer::FastHashCode (Thread * Self, oop obj) {
562  if (UseBiasedLocking) {
563    // NOTE: many places throughout the JVM do not expect a safepoint
564    // to be taken here, in particular most operations on perm gen
565    // objects. However, we only ever bias Java instances and all of
566    // the call sites of identity_hash that might revoke biases have
567    // been checked to make sure they can handle a safepoint. The
568    // added check of the bias pattern is to avoid useless calls to
569    // thread-local storage.
570    if (obj->mark()->has_bias_pattern()) {
571      // Handle for oop obj in case of STW safepoint
572      Handle hobj(Self, obj);
573      // Relaxing assertion for bug 6320749.
574      assert(Universe::verify_in_progress() ||
575             !SafepointSynchronize::is_at_safepoint(),
576             "biases should not be seen by VM thread here");
577      BiasedLocking::revoke_and_rebias(hobj, false, JavaThread::current());
578      obj = hobj();
579      assert(!obj->mark()->has_bias_pattern(), "biases should be revoked by now");
580    }
581  }
582
583  // hashCode() is a heap mutator ...
584  // Relaxing assertion for bug 6320749.
585  assert(Universe::verify_in_progress() ||
586         !SafepointSynchronize::is_at_safepoint(), "invariant");
587  assert(Universe::verify_in_progress() ||
588         Self->is_Java_thread() , "invariant");
589  assert(Universe::verify_in_progress() ||
590         ((JavaThread *)Self)->thread_state() != _thread_blocked, "invariant");
591
592  ObjectMonitor* monitor = NULL;
593  markOop temp, test;
594  intptr_t hash;
595  markOop mark = ReadStableMark (obj);
596
597  // object should remain ineligible for biased locking
598  assert(!mark->has_bias_pattern(), "invariant");
599
600  if (mark->is_neutral()) {
601    hash = mark->hash();              // this is a normal header
602    if (hash) {                       // if it has hash, just return it
603      return hash;
604    }
605    hash = get_next_hash(Self, obj);  // allocate a new hash code
606    temp = mark->copy_set_hash(hash); // merge the hash code into header
607    // use (machine word version) atomic operation to install the hash
608    test = (markOop) Atomic::cmpxchg_ptr(temp, obj->mark_addr(), mark);
609    if (test == mark) {
610      return hash;
611    }
612    // If atomic operation failed, we must inflate the header
613    // into heavy weight monitor. We could add more code here
614    // for fast path, but it does not worth the complexity.
615  } else if (mark->has_monitor()) {
616    monitor = mark->monitor();
617    temp = monitor->header();
618    assert(temp->is_neutral(), "invariant");
619    hash = temp->hash();
620    if (hash) {
621      return hash;
622    }
623    // Skip to the following code to reduce code size
624  } else if (Self->is_lock_owned((address)mark->locker())) {
625    temp = mark->displaced_mark_helper(); // this is a lightweight monitor owned
626    assert(temp->is_neutral(), "invariant");
627    hash = temp->hash();              // by current thread, check if the displaced
628    if (hash) {                       // header contains hash code
629      return hash;
630    }
631    // WARNING:
632    //   The displaced header is strictly immutable.
633    // It can NOT be changed in ANY cases. So we have
634    // to inflate the header into heavyweight monitor
635    // even the current thread owns the lock. The reason
636    // is the BasicLock (stack slot) will be asynchronously
637    // read by other threads during the inflate() function.
638    // Any change to stack may not propagate to other threads
639    // correctly.
640  }
641
642  // Inflate the monitor to set hash code
643  monitor = ObjectSynchronizer::inflate(Self, obj);
644  // Load displaced header and check it has hash code
645  mark = monitor->header();
646  assert(mark->is_neutral(), "invariant");
647  hash = mark->hash();
648  if (hash == 0) {
649    hash = get_next_hash(Self, obj);
650    temp = mark->copy_set_hash(hash); // merge hash code into header
651    assert(temp->is_neutral(), "invariant");
652    test = (markOop) Atomic::cmpxchg_ptr(temp, monitor, mark);
653    if (test != mark) {
654      // The only update to the header in the monitor (outside GC)
655      // is install the hash code. If someone add new usage of
656      // displaced header, please update this code
657      hash = test->hash();
658      assert(test->is_neutral(), "invariant");
659      assert(hash != 0, "Trivial unexpected object/monitor header usage.");
660    }
661  }
662  // We finally get the hash
663  return hash;
664}
665
666// Deprecated -- use FastHashCode() instead.
667
668intptr_t ObjectSynchronizer::identity_hash_value_for(Handle obj) {
669  return FastHashCode(Thread::current(), obj());
670}
671
672
673bool ObjectSynchronizer::current_thread_holds_lock(JavaThread* thread,
674                                                   Handle h_obj) {
675  if (UseBiasedLocking) {
676    BiasedLocking::revoke_and_rebias(h_obj, false, thread);
677    assert(!h_obj->mark()->has_bias_pattern(), "biases should be revoked by now");
678  }
679
680  assert(thread == JavaThread::current(), "Can only be called on current thread");
681  oop obj = h_obj();
682
683  markOop mark = ReadStableMark(obj);
684
685  // Uncontended case, header points to stack
686  if (mark->has_locker()) {
687    return thread->is_lock_owned((address)mark->locker());
688  }
689  // Contended case, header points to ObjectMonitor (tagged pointer)
690  if (mark->has_monitor()) {
691    ObjectMonitor* monitor = mark->monitor();
692    return monitor->is_entered(thread) != 0;
693  }
694  // Unlocked case, header in place
695  assert(mark->is_neutral(), "sanity check");
696  return false;
697}
698
699// Be aware of this method could revoke bias of the lock object.
700// This method queries the ownership of the lock handle specified by 'h_obj'.
701// If the current thread owns the lock, it returns owner_self. If no
702// thread owns the lock, it returns owner_none. Otherwise, it will return
703// owner_other.
704ObjectSynchronizer::LockOwnership ObjectSynchronizer::query_lock_ownership
705(JavaThread *self, Handle h_obj) {
706  // The caller must beware this method can revoke bias, and
707  // revocation can result in a safepoint.
708  assert(!SafepointSynchronize::is_at_safepoint(), "invariant");
709  assert(self->thread_state() != _thread_blocked , "invariant");
710
711  // Possible mark states: neutral, biased, stack-locked, inflated
712
713  if (UseBiasedLocking && h_obj()->mark()->has_bias_pattern()) {
714    // CASE: biased
715    BiasedLocking::revoke_and_rebias(h_obj, false, self);
716    assert(!h_obj->mark()->has_bias_pattern(),
717           "biases should be revoked by now");
718  }
719
720  assert(self == JavaThread::current(), "Can only be called on current thread");
721  oop obj = h_obj();
722  markOop mark = ReadStableMark(obj);
723
724  // CASE: stack-locked.  Mark points to a BasicLock on the owner's stack.
725  if (mark->has_locker()) {
726    return self->is_lock_owned((address)mark->locker()) ?
727      owner_self : owner_other;
728  }
729
730  // CASE: inflated. Mark (tagged pointer) points to an objectMonitor.
731  // The Object:ObjectMonitor relationship is stable as long as we're
732  // not at a safepoint.
733  if (mark->has_monitor()) {
734    void * owner = mark->monitor()->_owner;
735    if (owner == NULL) return owner_none;
736    return (owner == self ||
737            self->is_lock_owned((address)owner)) ? owner_self : owner_other;
738  }
739
740  // CASE: neutral
741  assert(mark->is_neutral(), "sanity check");
742  return owner_none;           // it's unlocked
743}
744
745// FIXME: jvmti should call this
746JavaThread* ObjectSynchronizer::get_lock_owner(Handle h_obj, bool doLock) {
747  if (UseBiasedLocking) {
748    if (SafepointSynchronize::is_at_safepoint()) {
749      BiasedLocking::revoke_at_safepoint(h_obj);
750    } else {
751      BiasedLocking::revoke_and_rebias(h_obj, false, JavaThread::current());
752    }
753    assert(!h_obj->mark()->has_bias_pattern(), "biases should be revoked by now");
754  }
755
756  oop obj = h_obj();
757  address owner = NULL;
758
759  markOop mark = ReadStableMark(obj);
760
761  // Uncontended case, header points to stack
762  if (mark->has_locker()) {
763    owner = (address) mark->locker();
764  }
765
766  // Contended case, header points to ObjectMonitor (tagged pointer)
767  if (mark->has_monitor()) {
768    ObjectMonitor* monitor = mark->monitor();
769    assert(monitor != NULL, "monitor should be non-null");
770    owner = (address) monitor->owner();
771  }
772
773  if (owner != NULL) {
774    // owning_thread_from_monitor_owner() may also return NULL here
775    return Threads::owning_thread_from_monitor_owner(owner, doLock);
776  }
777
778  // Unlocked case, header in place
779  // Cannot have assertion since this object may have been
780  // locked by another thread when reaching here.
781  // assert(mark->is_neutral(), "sanity check");
782
783  return NULL;
784}
785// Visitors ...
786
787void ObjectSynchronizer::monitors_iterate(MonitorClosure* closure) {
788  ObjectMonitor* block = gBlockList;
789  ObjectMonitor* mid;
790  while (block) {
791    assert(block->object() == CHAINMARKER, "must be a block header");
792    for (int i = _BLOCKSIZE - 1; i > 0; i--) {
793      mid = block + i;
794      oop object = (oop) mid->object();
795      if (object != NULL) {
796        closure->do_monitor(mid);
797      }
798    }
799    block = (ObjectMonitor*) block->FreeNext;
800  }
801}
802
803// Get the next block in the block list.
804static inline ObjectMonitor* next(ObjectMonitor* block) {
805  assert(block->object() == CHAINMARKER, "must be a block header");
806  block = block->FreeNext;
807  assert(block == NULL || block->object() == CHAINMARKER, "must be a block header");
808  return block;
809}
810
811
812void ObjectSynchronizer::oops_do(OopClosure* f) {
813  assert(SafepointSynchronize::is_at_safepoint(), "must be at safepoint");
814  for (ObjectMonitor* block = gBlockList; block != NULL; block = next(block)) {
815    assert(block->object() == CHAINMARKER, "must be a block header");
816    for (int i = 1; i < _BLOCKSIZE; i++) {
817      ObjectMonitor* mid = &block[i];
818      if (mid->object() != NULL) {
819        f->do_oop((oop*)mid->object_addr());
820      }
821    }
822  }
823}
824
825
826// -----------------------------------------------------------------------------
827// ObjectMonitor Lifecycle
828// -----------------------
829// Inflation unlinks monitors from the global gFreeList and
830// associates them with objects.  Deflation -- which occurs at
831// STW-time -- disassociates idle monitors from objects.  Such
832// scavenged monitors are returned to the gFreeList.
833//
834// The global list is protected by ListLock.  All the critical sections
835// are short and operate in constant-time.
836//
837// ObjectMonitors reside in type-stable memory (TSM) and are immortal.
838//
839// Lifecycle:
840// --   unassigned and on the global free list
841// --   unassigned and on a thread's private omFreeList
842// --   assigned to an object.  The object is inflated and the mark refers
843//      to the objectmonitor.
844//
845
846
847// Constraining monitor pool growth via MonitorBound ...
848//
849// The monitor pool is grow-only.  We scavenge at STW safepoint-time, but the
850// the rate of scavenging is driven primarily by GC.  As such,  we can find
851// an inordinate number of monitors in circulation.
852// To avoid that scenario we can artificially induce a STW safepoint
853// if the pool appears to be growing past some reasonable bound.
854// Generally we favor time in space-time tradeoffs, but as there's no
855// natural back-pressure on the # of extant monitors we need to impose some
856// type of limit.  Beware that if MonitorBound is set to too low a value
857// we could just loop. In addition, if MonitorBound is set to a low value
858// we'll incur more safepoints, which are harmful to performance.
859// See also: GuaranteedSafepointInterval
860//
861// The current implementation uses asynchronous VM operations.
862//
863
864static void InduceScavenge (Thread * Self, const char * Whence) {
865  // Induce STW safepoint to trim monitors
866  // Ultimately, this results in a call to deflate_idle_monitors() in the near future.
867  // More precisely, trigger an asynchronous STW safepoint as the number
868  // of active monitors passes the specified threshold.
869  // TODO: assert thread state is reasonable
870
871  if (ForceMonitorScavenge == 0 && Atomic::xchg (1, &ForceMonitorScavenge) == 0) {
872    if (ObjectMonitor::Knob_Verbose) {
873      ::printf ("Monitor scavenge - Induced STW @%s (%d)\n", Whence, ForceMonitorScavenge) ;
874      ::fflush(stdout);
875    }
876    // Induce a 'null' safepoint to scavenge monitors
877    // Must VM_Operation instance be heap allocated as the op will be enqueue and posted
878    // to the VMthread and have a lifespan longer than that of this activation record.
879    // The VMThread will delete the op when completed.
880    VMThread::execute(new VM_ForceAsyncSafepoint());
881
882    if (ObjectMonitor::Knob_Verbose) {
883      ::printf ("Monitor scavenge - STW posted @%s (%d)\n", Whence, ForceMonitorScavenge) ;
884      ::fflush(stdout);
885    }
886  }
887}
888
889void ObjectSynchronizer::verifyInUse (Thread *Self) {
890  ObjectMonitor* mid;
891  int inusetally = 0;
892  for (mid = Self->omInUseList; mid != NULL; mid = mid->FreeNext) {
893    inusetally++;
894  }
895  assert(inusetally == Self->omInUseCount, "inuse count off");
896
897  int freetally = 0;
898  for (mid = Self->omFreeList; mid != NULL; mid = mid->FreeNext) {
899    freetally++;
900  }
901  assert(freetally == Self->omFreeCount, "free count off");
902}
903
904ObjectMonitor * NOINLINE ObjectSynchronizer::omAlloc (Thread * Self) {
905  // A large MAXPRIVATE value reduces both list lock contention
906  // and list coherency traffic, but also tends to increase the
907  // number of objectMonitors in circulation as well as the STW
908  // scavenge costs.  As usual, we lean toward time in space-time
909  // tradeoffs.
910  const int MAXPRIVATE = 1024;
911  for (;;) {
912    ObjectMonitor * m;
913
914    // 1: try to allocate from the thread's local omFreeList.
915    // Threads will attempt to allocate first from their local list, then
916    // from the global list, and only after those attempts fail will the thread
917    // attempt to instantiate new monitors.   Thread-local free lists take
918    // heat off the ListLock and improve allocation latency, as well as reducing
919    // coherency traffic on the shared global list.
920    m = Self->omFreeList;
921    if (m != NULL) {
922      Self->omFreeList = m->FreeNext;
923      Self->omFreeCount--;
924      // CONSIDER: set m->FreeNext = BAD -- diagnostic hygiene
925      guarantee(m->object() == NULL, "invariant");
926      if (MonitorInUseLists) {
927        m->FreeNext = Self->omInUseList;
928        Self->omInUseList = m;
929        Self->omInUseCount++;
930        if (ObjectMonitor::Knob_VerifyInUse) {
931          verifyInUse(Self);
932        }
933      } else {
934        m->FreeNext = NULL;
935      }
936      return m;
937    }
938
939    // 2: try to allocate from the global gFreeList
940    // CONSIDER: use muxTry() instead of muxAcquire().
941    // If the muxTry() fails then drop immediately into case 3.
942    // If we're using thread-local free lists then try
943    // to reprovision the caller's free list.
944    if (gFreeList != NULL) {
945      // Reprovision the thread's omFreeList.
946      // Use bulk transfers to reduce the allocation rate and heat
947      // on various locks.
948      Thread::muxAcquire(&ListLock, "omAlloc");
949      for (int i = Self->omFreeProvision; --i >= 0 && gFreeList != NULL;) {
950        MonitorFreeCount--;
951        ObjectMonitor * take = gFreeList;
952        gFreeList = take->FreeNext;
953        guarantee(take->object() == NULL, "invariant");
954        guarantee(!take->is_busy(), "invariant");
955        take->Recycle();
956        omRelease(Self, take, false);
957      }
958      Thread::muxRelease(&ListLock);
959      Self->omFreeProvision += 1 + (Self->omFreeProvision/2);
960      if (Self->omFreeProvision > MAXPRIVATE) Self->omFreeProvision = MAXPRIVATE;
961      TEVENT(omFirst - reprovision);
962
963      const int mx = MonitorBound;
964      if (mx > 0 && (MonitorPopulation-MonitorFreeCount) > mx) {
965        // We can't safely induce a STW safepoint from omAlloc() as our thread
966        // state may not be appropriate for such activities and callers may hold
967        // naked oops, so instead we defer the action.
968        InduceScavenge(Self, "omAlloc");
969      }
970      continue;
971    }
972
973    // 3: allocate a block of new ObjectMonitors
974    // Both the local and global free lists are empty -- resort to malloc().
975    // In the current implementation objectMonitors are TSM - immortal.
976    assert(_BLOCKSIZE > 1, "invariant");
977    ObjectMonitor * temp = new ObjectMonitor[_BLOCKSIZE];
978
979    // NOTE: (almost) no way to recover if allocation failed.
980    // We might be able to induce a STW safepoint and scavenge enough
981    // objectMonitors to permit progress.
982    if (temp == NULL) {
983      vm_exit_out_of_memory(sizeof (ObjectMonitor[_BLOCKSIZE]), OOM_MALLOC_ERROR,
984                            "Allocate ObjectMonitors");
985    }
986
987    // Format the block.
988    // initialize the linked list, each monitor points to its next
989    // forming the single linked free list, the very first monitor
990    // will points to next block, which forms the block list.
991    // The trick of using the 1st element in the block as gBlockList
992    // linkage should be reconsidered.  A better implementation would
993    // look like: class Block { Block * next; int N; ObjectMonitor Body [N] ; }
994
995    for (int i = 1; i < _BLOCKSIZE; i++) {
996      temp[i].FreeNext = &temp[i+1];
997    }
998
999    // terminate the last monitor as the end of list
1000    temp[_BLOCKSIZE - 1].FreeNext = NULL;
1001
1002    // Element [0] is reserved for global list linkage
1003    temp[0].set_object(CHAINMARKER);
1004
1005    // Consider carving out this thread's current request from the
1006    // block in hand.  This avoids some lock traffic and redundant
1007    // list activity.
1008
1009    // Acquire the ListLock to manipulate BlockList and FreeList.
1010    // An Oyama-Taura-Yonezawa scheme might be more efficient.
1011    Thread::muxAcquire(&ListLock, "omAlloc [2]");
1012    MonitorPopulation += _BLOCKSIZE-1;
1013    MonitorFreeCount += _BLOCKSIZE-1;
1014
1015    // Add the new block to the list of extant blocks (gBlockList).
1016    // The very first objectMonitor in a block is reserved and dedicated.
1017    // It serves as blocklist "next" linkage.
1018    temp[0].FreeNext = gBlockList;
1019    gBlockList = temp;
1020
1021    // Add the new string of objectMonitors to the global free list
1022    temp[_BLOCKSIZE - 1].FreeNext = gFreeList;
1023    gFreeList = temp + 1;
1024    Thread::muxRelease(&ListLock);
1025    TEVENT(Allocate block of monitors);
1026  }
1027}
1028
1029// Place "m" on the caller's private per-thread omFreeList.
1030// In practice there's no need to clamp or limit the number of
1031// monitors on a thread's omFreeList as the only time we'll call
1032// omRelease is to return a monitor to the free list after a CAS
1033// attempt failed.  This doesn't allow unbounded #s of monitors to
1034// accumulate on a thread's free list.
1035//
1036
1037void ObjectSynchronizer::omRelease (Thread * Self, ObjectMonitor * m, bool fromPerThreadAlloc) {
1038  guarantee(m->object() == NULL, "invariant");
1039
1040  // Remove from omInUseList
1041  if (MonitorInUseLists && fromPerThreadAlloc) {
1042    ObjectMonitor* curmidinuse = NULL;
1043    for (ObjectMonitor* mid = Self->omInUseList; mid != NULL;) {
1044      if (m == mid) {
1045        // extract from per-thread in-use-list
1046        if (mid == Self->omInUseList) {
1047          Self->omInUseList = mid->FreeNext;
1048        } else if (curmidinuse != NULL) {
1049          curmidinuse->FreeNext = mid->FreeNext; // maintain the current thread inuselist
1050        }
1051        Self->omInUseCount--;
1052        if (ObjectMonitor::Knob_VerifyInUse) {
1053          verifyInUse(Self);
1054        }
1055        break;
1056      } else {
1057        curmidinuse = mid;
1058        mid = mid->FreeNext;
1059      }
1060    }
1061  }
1062
1063  // FreeNext is used for both omInUseList and omFreeList, so clear old before setting new
1064  m->FreeNext = Self->omFreeList;
1065  Self->omFreeList = m;
1066  Self->omFreeCount++;
1067}
1068
1069// Return the monitors of a moribund thread's local free list to
1070// the global free list.  Typically a thread calls omFlush() when
1071// it's dying.  We could also consider having the VM thread steal
1072// monitors from threads that have not run java code over a few
1073// consecutive STW safepoints.  Relatedly, we might decay
1074// omFreeProvision at STW safepoints.
1075//
1076// Also return the monitors of a moribund thread's omInUseList to
1077// a global gOmInUseList under the global list lock so these
1078// will continue to be scanned.
1079//
1080// We currently call omFlush() from the Thread:: dtor _after the thread
1081// has been excised from the thread list and is no longer a mutator.
1082// That means that omFlush() can run concurrently with a safepoint and
1083// the scavenge operator.  Calling omFlush() from JavaThread::exit() might
1084// be a better choice as we could safely reason that that the JVM is
1085// not at a safepoint at the time of the call, and thus there could
1086// be not inopportune interleavings between omFlush() and the scavenge
1087// operator.
1088
1089void ObjectSynchronizer::omFlush (Thread * Self) {
1090  ObjectMonitor * List = Self->omFreeList;  // Null-terminated SLL
1091  Self->omFreeList = NULL;
1092  ObjectMonitor * Tail = NULL;
1093  int Tally = 0;
1094  if (List != NULL) {
1095    ObjectMonitor * s;
1096    for (s = List; s != NULL; s = s->FreeNext) {
1097      Tally++;
1098      Tail = s;
1099      guarantee(s->object() == NULL, "invariant");
1100      guarantee(!s->is_busy(), "invariant");
1101      s->set_owner(NULL);   // redundant but good hygiene
1102      TEVENT(omFlush - Move one);
1103    }
1104    guarantee(Tail != NULL && List != NULL, "invariant");
1105  }
1106
1107  ObjectMonitor * InUseList = Self->omInUseList;
1108  ObjectMonitor * InUseTail = NULL;
1109  int InUseTally = 0;
1110  if (InUseList != NULL) {
1111    Self->omInUseList = NULL;
1112    ObjectMonitor *curom;
1113    for (curom = InUseList; curom != NULL; curom = curom->FreeNext) {
1114      InUseTail = curom;
1115      InUseTally++;
1116    }
1117    assert(Self->omInUseCount == InUseTally, "inuse count off");
1118    Self->omInUseCount = 0;
1119    guarantee(InUseTail != NULL && InUseList != NULL, "invariant");
1120  }
1121
1122  Thread::muxAcquire(&ListLock, "omFlush");
1123  if (Tail != NULL) {
1124    Tail->FreeNext = gFreeList;
1125    gFreeList = List;
1126    MonitorFreeCount += Tally;
1127  }
1128
1129  if (InUseTail != NULL) {
1130    InUseTail->FreeNext = gOmInUseList;
1131    gOmInUseList = InUseList;
1132    gOmInUseCount += InUseTally;
1133  }
1134
1135  Thread::muxRelease(&ListLock);
1136  TEVENT(omFlush);
1137}
1138
1139// Fast path code shared by multiple functions
1140ObjectMonitor* ObjectSynchronizer::inflate_helper(oop obj) {
1141  markOop mark = obj->mark();
1142  if (mark->has_monitor()) {
1143    assert(ObjectSynchronizer::verify_objmon_isinpool(mark->monitor()), "monitor is invalid");
1144    assert(mark->monitor()->header()->is_neutral(), "monitor must record a good object header");
1145    return mark->monitor();
1146  }
1147  return ObjectSynchronizer::inflate(Thread::current(), obj);
1148}
1149
1150
1151// Note that we could encounter some performance loss through false-sharing as
1152// multiple locks occupy the same $ line.  Padding might be appropriate.
1153
1154
1155ObjectMonitor * NOINLINE ObjectSynchronizer::inflate (Thread * Self, oop object) {
1156  // Inflate mutates the heap ...
1157  // Relaxing assertion for bug 6320749.
1158  assert(Universe::verify_in_progress() ||
1159         !SafepointSynchronize::is_at_safepoint(), "invariant");
1160
1161  for (;;) {
1162    const markOop mark = object->mark();
1163    assert(!mark->has_bias_pattern(), "invariant");
1164
1165    // The mark can be in one of the following states:
1166    // *  Inflated     - just return
1167    // *  Stack-locked - coerce it to inflated
1168    // *  INFLATING    - busy wait for conversion to complete
1169    // *  Neutral      - aggressively inflate the object.
1170    // *  BIASED       - Illegal.  We should never see this
1171
1172    // CASE: inflated
1173    if (mark->has_monitor()) {
1174      ObjectMonitor * inf = mark->monitor();
1175      assert(inf->header()->is_neutral(), "invariant");
1176      assert(inf->object() == object, "invariant");
1177      assert(ObjectSynchronizer::verify_objmon_isinpool(inf), "monitor is invalid");
1178      return inf;
1179    }
1180
1181    // CASE: inflation in progress - inflating over a stack-lock.
1182    // Some other thread is converting from stack-locked to inflated.
1183    // Only that thread can complete inflation -- other threads must wait.
1184    // The INFLATING value is transient.
1185    // Currently, we spin/yield/park and poll the markword, waiting for inflation to finish.
1186    // We could always eliminate polling by parking the thread on some auxiliary list.
1187    if (mark == markOopDesc::INFLATING()) {
1188      TEVENT(Inflate: spin while INFLATING);
1189      ReadStableMark(object);
1190      continue;
1191    }
1192
1193    // CASE: stack-locked
1194    // Could be stack-locked either by this thread or by some other thread.
1195    //
1196    // Note that we allocate the objectmonitor speculatively, _before_ attempting
1197    // to install INFLATING into the mark word.  We originally installed INFLATING,
1198    // allocated the objectmonitor, and then finally STed the address of the
1199    // objectmonitor into the mark.  This was correct, but artificially lengthened
1200    // the interval in which INFLATED appeared in the mark, thus increasing
1201    // the odds of inflation contention.
1202    //
1203    // We now use per-thread private objectmonitor free lists.
1204    // These list are reprovisioned from the global free list outside the
1205    // critical INFLATING...ST interval.  A thread can transfer
1206    // multiple objectmonitors en-mass from the global free list to its local free list.
1207    // This reduces coherency traffic and lock contention on the global free list.
1208    // Using such local free lists, it doesn't matter if the omAlloc() call appears
1209    // before or after the CAS(INFLATING) operation.
1210    // See the comments in omAlloc().
1211
1212    if (mark->has_locker()) {
1213      ObjectMonitor * m = omAlloc(Self);
1214      // Optimistically prepare the objectmonitor - anticipate successful CAS
1215      // We do this before the CAS in order to minimize the length of time
1216      // in which INFLATING appears in the mark.
1217      m->Recycle();
1218      m->_Responsible  = NULL;
1219      m->OwnerIsThread = 0;
1220      m->_recursions   = 0;
1221      m->_SpinDuration = ObjectMonitor::Knob_SpinLimit;   // Consider: maintain by type/class
1222
1223      markOop cmp = (markOop) Atomic::cmpxchg_ptr(markOopDesc::INFLATING(), object->mark_addr(), mark);
1224      if (cmp != mark) {
1225        omRelease(Self, m, true);
1226        continue;       // Interference -- just retry
1227      }
1228
1229      // We've successfully installed INFLATING (0) into the mark-word.
1230      // This is the only case where 0 will appear in a mark-work.
1231      // Only the singular thread that successfully swings the mark-word
1232      // to 0 can perform (or more precisely, complete) inflation.
1233      //
1234      // Why do we CAS a 0 into the mark-word instead of just CASing the
1235      // mark-word from the stack-locked value directly to the new inflated state?
1236      // Consider what happens when a thread unlocks a stack-locked object.
1237      // It attempts to use CAS to swing the displaced header value from the
1238      // on-stack basiclock back into the object header.  Recall also that the
1239      // header value (hashcode, etc) can reside in (a) the object header, or
1240      // (b) a displaced header associated with the stack-lock, or (c) a displaced
1241      // header in an objectMonitor.  The inflate() routine must copy the header
1242      // value from the basiclock on the owner's stack to the objectMonitor, all
1243      // the while preserving the hashCode stability invariants.  If the owner
1244      // decides to release the lock while the value is 0, the unlock will fail
1245      // and control will eventually pass from slow_exit() to inflate.  The owner
1246      // will then spin, waiting for the 0 value to disappear.   Put another way,
1247      // the 0 causes the owner to stall if the owner happens to try to
1248      // drop the lock (restoring the header from the basiclock to the object)
1249      // while inflation is in-progress.  This protocol avoids races that might
1250      // would otherwise permit hashCode values to change or "flicker" for an object.
1251      // Critically, while object->mark is 0 mark->displaced_mark_helper() is stable.
1252      // 0 serves as a "BUSY" inflate-in-progress indicator.
1253
1254
1255      // fetch the displaced mark from the owner's stack.
1256      // The owner can't die or unwind past the lock while our INFLATING
1257      // object is in the mark.  Furthermore the owner can't complete
1258      // an unlock on the object, either.
1259      markOop dmw = mark->displaced_mark_helper();
1260      assert(dmw->is_neutral(), "invariant");
1261
1262      // Setup monitor fields to proper values -- prepare the monitor
1263      m->set_header(dmw);
1264
1265      // Optimization: if the mark->locker stack address is associated
1266      // with this thread we could simply set m->_owner = Self and
1267      // m->OwnerIsThread = 1. Note that a thread can inflate an object
1268      // that it has stack-locked -- as might happen in wait() -- directly
1269      // with CAS.  That is, we can avoid the xchg-NULL .... ST idiom.
1270      m->set_owner(mark->locker());
1271      m->set_object(object);
1272      // TODO-FIXME: assert BasicLock->dhw != 0.
1273
1274      // Must preserve store ordering. The monitor state must
1275      // be stable at the time of publishing the monitor address.
1276      guarantee(object->mark() == markOopDesc::INFLATING(), "invariant");
1277      object->release_set_mark(markOopDesc::encode(m));
1278
1279      // Hopefully the performance counters are allocated on distinct cache lines
1280      // to avoid false sharing on MP systems ...
1281      if (ObjectMonitor::_sync_Inflations != NULL) ObjectMonitor::_sync_Inflations->inc();
1282      TEVENT(Inflate: overwrite stacklock);
1283      if (TraceMonitorInflation) {
1284        if (object->is_instance()) {
1285          ResourceMark rm;
1286          tty->print_cr("Inflating object " INTPTR_FORMAT " , mark " INTPTR_FORMAT " , type %s",
1287                        (void *) object, (intptr_t) object->mark(),
1288                        object->klass()->external_name());
1289        }
1290      }
1291      return m;
1292    }
1293
1294    // CASE: neutral
1295    // TODO-FIXME: for entry we currently inflate and then try to CAS _owner.
1296    // If we know we're inflating for entry it's better to inflate by swinging a
1297    // pre-locked objectMonitor pointer into the object header.   A successful
1298    // CAS inflates the object *and* confers ownership to the inflating thread.
1299    // In the current implementation we use a 2-step mechanism where we CAS()
1300    // to inflate and then CAS() again to try to swing _owner from NULL to Self.
1301    // An inflateTry() method that we could call from fast_enter() and slow_enter()
1302    // would be useful.
1303
1304    assert(mark->is_neutral(), "invariant");
1305    ObjectMonitor * m = omAlloc(Self);
1306    // prepare m for installation - set monitor to initial state
1307    m->Recycle();
1308    m->set_header(mark);
1309    m->set_owner(NULL);
1310    m->set_object(object);
1311    m->OwnerIsThread = 1;
1312    m->_recursions   = 0;
1313    m->_Responsible  = NULL;
1314    m->_SpinDuration = ObjectMonitor::Knob_SpinLimit;       // consider: keep metastats by type/class
1315
1316    if (Atomic::cmpxchg_ptr (markOopDesc::encode(m), object->mark_addr(), mark) != mark) {
1317      m->set_object(NULL);
1318      m->set_owner(NULL);
1319      m->OwnerIsThread = 0;
1320      m->Recycle();
1321      omRelease(Self, m, true);
1322      m = NULL;
1323      continue;
1324      // interference - the markword changed - just retry.
1325      // The state-transitions are one-way, so there's no chance of
1326      // live-lock -- "Inflated" is an absorbing state.
1327    }
1328
1329    // Hopefully the performance counters are allocated on distinct
1330    // cache lines to avoid false sharing on MP systems ...
1331    if (ObjectMonitor::_sync_Inflations != NULL) ObjectMonitor::_sync_Inflations->inc();
1332    TEVENT(Inflate: overwrite neutral);
1333    if (TraceMonitorInflation) {
1334      if (object->is_instance()) {
1335        ResourceMark rm;
1336        tty->print_cr("Inflating object " INTPTR_FORMAT " , mark " INTPTR_FORMAT " , type %s",
1337                      (void *) object, (intptr_t) object->mark(),
1338                      object->klass()->external_name());
1339      }
1340    }
1341    return m;
1342  }
1343}
1344
1345// Note that we could encounter some performance loss through false-sharing as
1346// multiple locks occupy the same $ line.  Padding might be appropriate.
1347
1348
1349// Deflate_idle_monitors() is called at all safepoints, immediately
1350// after all mutators are stopped, but before any objects have moved.
1351// It traverses the list of known monitors, deflating where possible.
1352// The scavenged monitor are returned to the monitor free list.
1353//
1354// Beware that we scavenge at *every* stop-the-world point.
1355// Having a large number of monitors in-circulation negatively
1356// impacts the performance of some applications (e.g., PointBase).
1357// Broadly, we want to minimize the # of monitors in circulation.
1358//
1359// We have added a flag, MonitorInUseLists, which creates a list
1360// of active monitors for each thread. deflate_idle_monitors()
1361// only scans the per-thread inuse lists. omAlloc() puts all
1362// assigned monitors on the per-thread list. deflate_idle_monitors()
1363// returns the non-busy monitors to the global free list.
1364// When a thread dies, omFlush() adds the list of active monitors for
1365// that thread to a global gOmInUseList acquiring the
1366// global list lock. deflate_idle_monitors() acquires the global
1367// list lock to scan for non-busy monitors to the global free list.
1368// An alternative could have used a single global inuse list. The
1369// downside would have been the additional cost of acquiring the global list lock
1370// for every omAlloc().
1371//
1372// Perversely, the heap size -- and thus the STW safepoint rate --
1373// typically drives the scavenge rate.  Large heaps can mean infrequent GC,
1374// which in turn can mean large(r) numbers of objectmonitors in circulation.
1375// This is an unfortunate aspect of this design.
1376//
1377
1378enum ManifestConstants {
1379  ClearResponsibleAtSTW   = 0,
1380  MaximumRecheckInterval  = 1000
1381};
1382
1383// Deflate a single monitor if not in use
1384// Return true if deflated, false if in use
1385bool ObjectSynchronizer::deflate_monitor(ObjectMonitor* mid, oop obj,
1386                                         ObjectMonitor** freeHeadp, ObjectMonitor** freeTailp) {
1387  bool deflated;
1388  // Normal case ... The monitor is associated with obj.
1389  guarantee(obj->mark() == markOopDesc::encode(mid), "invariant");
1390  guarantee(mid == obj->mark()->monitor(), "invariant");
1391  guarantee(mid->header()->is_neutral(), "invariant");
1392
1393  if (mid->is_busy()) {
1394    if (ClearResponsibleAtSTW) mid->_Responsible = NULL;
1395    deflated = false;
1396  } else {
1397    // Deflate the monitor if it is no longer being used
1398    // It's idle - scavenge and return to the global free list
1399    // plain old deflation ...
1400    TEVENT(deflate_idle_monitors - scavenge1);
1401    if (TraceMonitorInflation) {
1402      if (obj->is_instance()) {
1403        ResourceMark rm;
1404        tty->print_cr("Deflating object " INTPTR_FORMAT " , mark " INTPTR_FORMAT " , type %s",
1405                      (void *) obj, (intptr_t) obj->mark(), obj->klass()->external_name());
1406      }
1407    }
1408
1409    // Restore the header back to obj
1410    obj->release_set_mark(mid->header());
1411    mid->clear();
1412
1413    assert(mid->object() == NULL, "invariant");
1414
1415    // Move the object to the working free list defined by FreeHead,FreeTail.
1416    if (*freeHeadp == NULL) *freeHeadp = mid;
1417    if (*freeTailp != NULL) {
1418      ObjectMonitor * prevtail = *freeTailp;
1419      assert(prevtail->FreeNext == NULL, "cleaned up deflated?"); // TODO KK
1420      prevtail->FreeNext = mid;
1421    }
1422    *freeTailp = mid;
1423    deflated = true;
1424  }
1425  return deflated;
1426}
1427
1428// Caller acquires ListLock
1429int ObjectSynchronizer::walk_monitor_list(ObjectMonitor** listheadp,
1430                                          ObjectMonitor** freeHeadp, ObjectMonitor** freeTailp) {
1431  ObjectMonitor* mid;
1432  ObjectMonitor* next;
1433  ObjectMonitor* curmidinuse = NULL;
1434  int deflatedcount = 0;
1435
1436  for (mid = *listheadp; mid != NULL;) {
1437    oop obj = (oop) mid->object();
1438    bool deflated = false;
1439    if (obj != NULL) {
1440      deflated = deflate_monitor(mid, obj, freeHeadp, freeTailp);
1441    }
1442    if (deflated) {
1443      // extract from per-thread in-use-list
1444      if (mid == *listheadp) {
1445        *listheadp = mid->FreeNext;
1446      } else if (curmidinuse != NULL) {
1447        curmidinuse->FreeNext = mid->FreeNext; // maintain the current thread inuselist
1448      }
1449      next = mid->FreeNext;
1450      mid->FreeNext = NULL;  // This mid is current tail in the FreeHead list
1451      mid = next;
1452      deflatedcount++;
1453    } else {
1454      curmidinuse = mid;
1455      mid = mid->FreeNext;
1456    }
1457  }
1458  return deflatedcount;
1459}
1460
1461void ObjectSynchronizer::deflate_idle_monitors() {
1462  assert(SafepointSynchronize::is_at_safepoint(), "must be at safepoint");
1463  int nInuse = 0;              // currently associated with objects
1464  int nInCirculation = 0;      // extant
1465  int nScavenged = 0;          // reclaimed
1466  bool deflated = false;
1467
1468  ObjectMonitor * FreeHead = NULL;  // Local SLL of scavenged monitors
1469  ObjectMonitor * FreeTail = NULL;
1470
1471  TEVENT(deflate_idle_monitors);
1472  // Prevent omFlush from changing mids in Thread dtor's during deflation
1473  // And in case the vm thread is acquiring a lock during a safepoint
1474  // See e.g. 6320749
1475  Thread::muxAcquire(&ListLock, "scavenge - return");
1476
1477  if (MonitorInUseLists) {
1478    int inUse = 0;
1479    for (JavaThread* cur = Threads::first(); cur != NULL; cur = cur->next()) {
1480      nInCirculation+= cur->omInUseCount;
1481      int deflatedcount = walk_monitor_list(cur->omInUseList_addr(), &FreeHead, &FreeTail);
1482      cur->omInUseCount-= deflatedcount;
1483      if (ObjectMonitor::Knob_VerifyInUse) {
1484        verifyInUse(cur);
1485      }
1486      nScavenged += deflatedcount;
1487      nInuse += cur->omInUseCount;
1488    }
1489
1490    // For moribund threads, scan gOmInUseList
1491    if (gOmInUseList) {
1492      nInCirculation += gOmInUseCount;
1493      int deflatedcount = walk_monitor_list((ObjectMonitor **)&gOmInUseList, &FreeHead, &FreeTail);
1494      gOmInUseCount-= deflatedcount;
1495      nScavenged += deflatedcount;
1496      nInuse += gOmInUseCount;
1497    }
1498
1499  } else for (ObjectMonitor* block = gBlockList; block != NULL; block = next(block)) {
1500    // Iterate over all extant monitors - Scavenge all idle monitors.
1501    assert(block->object() == CHAINMARKER, "must be a block header");
1502    nInCirculation += _BLOCKSIZE;
1503    for (int i = 1; i < _BLOCKSIZE; i++) {
1504      ObjectMonitor* mid = &block[i];
1505      oop obj = (oop) mid->object();
1506
1507      if (obj == NULL) {
1508        // The monitor is not associated with an object.
1509        // The monitor should either be a thread-specific private
1510        // free list or the global free list.
1511        // obj == NULL IMPLIES mid->is_busy() == 0
1512        guarantee(!mid->is_busy(), "invariant");
1513        continue;
1514      }
1515      deflated = deflate_monitor(mid, obj, &FreeHead, &FreeTail);
1516
1517      if (deflated) {
1518        mid->FreeNext = NULL;
1519        nScavenged++;
1520      } else {
1521        nInuse++;
1522      }
1523    }
1524  }
1525
1526  MonitorFreeCount += nScavenged;
1527
1528  // Consider: audit gFreeList to ensure that MonitorFreeCount and list agree.
1529
1530  if (ObjectMonitor::Knob_Verbose) {
1531    ::printf("Deflate: InCirc=%d InUse=%d Scavenged=%d ForceMonitorScavenge=%d : pop=%d free=%d\n",
1532             nInCirculation, nInuse, nScavenged, ForceMonitorScavenge,
1533             MonitorPopulation, MonitorFreeCount);
1534    ::fflush(stdout);
1535  }
1536
1537  ForceMonitorScavenge = 0;    // Reset
1538
1539  // Move the scavenged monitors back to the global free list.
1540  if (FreeHead != NULL) {
1541    guarantee(FreeTail != NULL && nScavenged > 0, "invariant");
1542    assert(FreeTail->FreeNext == NULL, "invariant");
1543    // constant-time list splice - prepend scavenged segment to gFreeList
1544    FreeTail->FreeNext = gFreeList;
1545    gFreeList = FreeHead;
1546  }
1547  Thread::muxRelease(&ListLock);
1548
1549  if (ObjectMonitor::_sync_Deflations != NULL) ObjectMonitor::_sync_Deflations->inc(nScavenged);
1550  if (ObjectMonitor::_sync_MonExtant  != NULL) ObjectMonitor::_sync_MonExtant ->set_value(nInCirculation);
1551
1552  // TODO: Add objectMonitor leak detection.
1553  // Audit/inventory the objectMonitors -- make sure they're all accounted for.
1554  GVars.stwRandom = os::random();
1555  GVars.stwCycle++;
1556}
1557
1558// Monitor cleanup on JavaThread::exit
1559
1560// Iterate through monitor cache and attempt to release thread's monitors
1561// Gives up on a particular monitor if an exception occurs, but continues
1562// the overall iteration, swallowing the exception.
1563class ReleaseJavaMonitorsClosure: public MonitorClosure {
1564 private:
1565  TRAPS;
1566
1567 public:
1568  ReleaseJavaMonitorsClosure(Thread* thread) : THREAD(thread) {}
1569  void do_monitor(ObjectMonitor* mid) {
1570    if (mid->owner() == THREAD) {
1571      (void)mid->complete_exit(CHECK);
1572    }
1573  }
1574};
1575
1576// Release all inflated monitors owned by THREAD.  Lightweight monitors are
1577// ignored.  This is meant to be called during JNI thread detach which assumes
1578// all remaining monitors are heavyweight.  All exceptions are swallowed.
1579// Scanning the extant monitor list can be time consuming.
1580// A simple optimization is to add a per-thread flag that indicates a thread
1581// called jni_monitorenter() during its lifetime.
1582//
1583// Instead of No_Savepoint_Verifier it might be cheaper to
1584// use an idiom of the form:
1585//   auto int tmp = SafepointSynchronize::_safepoint_counter ;
1586//   <code that must not run at safepoint>
1587//   guarantee (((tmp ^ _safepoint_counter) | (tmp & 1)) == 0) ;
1588// Since the tests are extremely cheap we could leave them enabled
1589// for normal product builds.
1590
1591void ObjectSynchronizer::release_monitors_owned_by_thread(TRAPS) {
1592  assert(THREAD == JavaThread::current(), "must be current Java thread");
1593  No_Safepoint_Verifier nsv;
1594  ReleaseJavaMonitorsClosure rjmc(THREAD);
1595  Thread::muxAcquire(&ListLock, "release_monitors_owned_by_thread");
1596  ObjectSynchronizer::monitors_iterate(&rjmc);
1597  Thread::muxRelease(&ListLock);
1598  THREAD->clear_pending_exception();
1599}
1600
1601//------------------------------------------------------------------------------
1602// Debugging code
1603
1604void ObjectSynchronizer::sanity_checks(const bool verbose,
1605                                       const uint cache_line_size,
1606                                       int *error_cnt_ptr,
1607                                       int *warning_cnt_ptr) {
1608  u_char *addr_begin      = (u_char*)&GVars;
1609  u_char *addr_stwRandom  = (u_char*)&GVars.stwRandom;
1610  u_char *addr_hcSequence = (u_char*)&GVars.hcSequence;
1611
1612  if (verbose) {
1613    tty->print_cr("INFO: sizeof(SharedGlobals)=" SIZE_FORMAT,
1614                  sizeof(SharedGlobals));
1615  }
1616
1617  uint offset_stwRandom = (uint)(addr_stwRandom - addr_begin);
1618  if (verbose) tty->print_cr("INFO: offset(stwRandom)=%u", offset_stwRandom);
1619
1620  uint offset_hcSequence = (uint)(addr_hcSequence - addr_begin);
1621  if (verbose) {
1622    tty->print_cr("INFO: offset(_hcSequence)=%u", offset_hcSequence);
1623  }
1624
1625  if (cache_line_size != 0) {
1626    // We were able to determine the L1 data cache line size so
1627    // do some cache line specific sanity checks
1628
1629    if (offset_stwRandom < cache_line_size) {
1630      tty->print_cr("WARNING: the SharedGlobals.stwRandom field is closer "
1631                    "to the struct beginning than a cache line which permits "
1632                    "false sharing.");
1633      (*warning_cnt_ptr)++;
1634    }
1635
1636    if ((offset_hcSequence - offset_stwRandom) < cache_line_size) {
1637      tty->print_cr("WARNING: the SharedGlobals.stwRandom and "
1638                    "SharedGlobals.hcSequence fields are closer than a cache "
1639                    "line which permits false sharing.");
1640      (*warning_cnt_ptr)++;
1641    }
1642
1643    if ((sizeof(SharedGlobals) - offset_hcSequence) < cache_line_size) {
1644      tty->print_cr("WARNING: the SharedGlobals.hcSequence field is closer "
1645                    "to the struct end than a cache line which permits false "
1646                    "sharing.");
1647      (*warning_cnt_ptr)++;
1648    }
1649  }
1650}
1651
1652#ifndef PRODUCT
1653
1654// Verify all monitors in the monitor cache, the verification is weak.
1655void ObjectSynchronizer::verify() {
1656  ObjectMonitor* block = gBlockList;
1657  ObjectMonitor* mid;
1658  while (block) {
1659    assert(block->object() == CHAINMARKER, "must be a block header");
1660    for (int i = 1; i < _BLOCKSIZE; i++) {
1661      mid = block + i;
1662      oop object = (oop) mid->object();
1663      if (object != NULL) {
1664        mid->verify();
1665      }
1666    }
1667    block = (ObjectMonitor*) block->FreeNext;
1668  }
1669}
1670
1671// Check if monitor belongs to the monitor cache
1672// The list is grow-only so it's *relatively* safe to traverse
1673// the list of extant blocks without taking a lock.
1674
1675int ObjectSynchronizer::verify_objmon_isinpool(ObjectMonitor *monitor) {
1676  ObjectMonitor* block = gBlockList;
1677
1678  while (block) {
1679    assert(block->object() == CHAINMARKER, "must be a block header");
1680    if (monitor > &block[0] && monitor < &block[_BLOCKSIZE]) {
1681      address mon = (address) monitor;
1682      address blk = (address) block;
1683      size_t diff = mon - blk;
1684      assert((diff % sizeof(ObjectMonitor)) == 0, "check");
1685      return 1;
1686    }
1687    block = (ObjectMonitor*) block->FreeNext;
1688  }
1689  return 0;
1690}
1691
1692#endif
1693