synchronizer.cpp revision 7051:0420e825bb3c
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#ifdef DTRACE_ENABLED
63
64// Only bother with this argument setup if dtrace is available
65// TODO-FIXME: probes should not fire when caller is _blocked.  assert() accordingly.
66
67#define DTRACE_MONITOR_PROBE_COMMON(obj, thread)                           \
68  char* bytes = NULL;                                                      \
69  int len = 0;                                                             \
70  jlong jtid = SharedRuntime::get_java_tid(thread);                        \
71  Symbol* klassname = ((oop)(obj))->klass()->name();                       \
72  if (klassname != NULL) {                                                 \
73    bytes = (char*)klassname->bytes();                                     \
74    len = klassname->utf8_length();                                        \
75  }
76
77#define DTRACE_MONITOR_WAIT_PROBE(monitor, obj, thread, millis)            \
78  {                                                                        \
79    if (DTraceMonitorProbes) {                                             \
80      DTRACE_MONITOR_PROBE_COMMON(obj, thread);                            \
81      HOTSPOT_MONITOR_WAIT(jtid,                                           \
82                           (uintptr_t)(monitor), bytes, len, (millis));    \
83    }                                                                      \
84  }
85
86#define HOTSPOT_MONITOR_PROBE_waited HOTSPOT_MONITOR_WAITED
87
88#define DTRACE_MONITOR_PROBE(probe, monitor, obj, thread)                  \
89  {                                                                        \
90    if (DTraceMonitorProbes) {                                             \
91      DTRACE_MONITOR_PROBE_COMMON(obj, thread);                            \
92      HOTSPOT_MONITOR_PROBE_##probe(jtid, /* probe = waited */             \
93                                    (uintptr_t)(monitor), bytes, len);     \
94    }                                                                      \
95  }
96
97#else //  ndef DTRACE_ENABLED
98
99#define DTRACE_MONITOR_WAIT_PROBE(obj, thread, millis, mon)    {;}
100#define DTRACE_MONITOR_PROBE(probe, obj, thread, mon)          {;}
101
102#endif // ndef DTRACE_ENABLED
103
104// This exists only as a workaround of dtrace bug 6254741
105int dtrace_waited_probe(ObjectMonitor* monitor, Handle obj, Thread* thr) {
106  DTRACE_MONITOR_PROBE(waited, monitor, obj(), thr);
107  return 0;
108}
109
110#define NINFLATIONLOCKS 256
111static volatile intptr_t InflationLocks[NINFLATIONLOCKS];
112
113ObjectMonitor * ObjectSynchronizer::gBlockList = NULL;
114ObjectMonitor * volatile ObjectSynchronizer::gFreeList  = NULL;
115ObjectMonitor * volatile ObjectSynchronizer::gOmInUseList  = NULL;
116int ObjectSynchronizer::gOmInUseCount = 0;
117static volatile intptr_t ListLock = 0;      // protects global monitor free-list cache
118static volatile int MonitorFreeCount  = 0;  // # on gFreeList
119static volatile int MonitorPopulation = 0;  // # Extant -- in circulation
120#define CHAINMARKER (cast_to_oop<intptr_t>(-1))
121
122// -----------------------------------------------------------------------------
123//  Fast Monitor Enter/Exit
124// This the fast monitor enter. The interpreter and compiler use
125// some assembly copies of this code. Make sure update those code
126// if the following function is changed. The implementation is
127// extremely sensitive to race condition. Be careful.
128
129void ObjectSynchronizer::fast_enter(Handle obj, BasicLock* lock,
130                                    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 if (mark->has_locker() &&
202             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) {
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
514static inline intptr_t get_next_hash(Thread * Self, oop obj) {
515  intptr_t value = 0;
516  if (hashCode == 0) {
517    // This form uses an unguarded global Park-Miller RNG,
518    // so it's possible for two threads to race and generate the same RNG.
519    // On MP system we'll have lots of RW access to a global, so the
520    // mechanism induces lots of coherency traffic.
521    value = os::random();
522  } else if (hashCode == 1) {
523    // This variation has the property of being stable (idempotent)
524    // between STW operations.  This can be useful in some of the 1-0
525    // synchronization schemes.
526    intptr_t addrBits = cast_from_oop<intptr_t>(obj) >> 3;
527    value = addrBits ^ (addrBits >> 5) ^ GVars.stwRandom;
528  } else if (hashCode == 2) {
529    value = 1;            // for sensitivity testing
530  } else if (hashCode == 3) {
531    value = ++GVars.hcSequence;
532  } else if (hashCode == 4) {
533    value = cast_from_oop<intptr_t>(obj);
534  } else {
535    // Marsaglia's xor-shift scheme with thread-specific state
536    // This is probably the best overall implementation -- we'll
537    // likely make this the default in future releases.
538    unsigned t = Self->_hashStateX;
539    t ^= (t << 11);
540    Self->_hashStateX = Self->_hashStateY;
541    Self->_hashStateY = Self->_hashStateZ;
542    Self->_hashStateZ = Self->_hashStateW;
543    unsigned v = Self->_hashStateW;
544    v = (v ^ (v >> 19)) ^ (t ^ (t >> 8));
545    Self->_hashStateW = v;
546    value = v;
547  }
548
549  value &= markOopDesc::hash_mask;
550  if (value == 0) value = 0xBAD;
551  assert(value != markOopDesc::no_hash, "invariant");
552  TEVENT(hashCode: GENERATE);
553  return value;
554}
555
556intptr_t ObjectSynchronizer::FastHashCode(Thread * Self, oop obj) {
557  if (UseBiasedLocking) {
558    // NOTE: many places throughout the JVM do not expect a safepoint
559    // to be taken here, in particular most operations on perm gen
560    // objects. However, we only ever bias Java instances and all of
561    // the call sites of identity_hash that might revoke biases have
562    // been checked to make sure they can handle a safepoint. The
563    // added check of the bias pattern is to avoid useless calls to
564    // thread-local storage.
565    if (obj->mark()->has_bias_pattern()) {
566      // Handle for oop obj in case of STW safepoint
567      Handle hobj(Self, obj);
568      // Relaxing assertion for bug 6320749.
569      assert(Universe::verify_in_progress() ||
570             !SafepointSynchronize::is_at_safepoint(),
571             "biases should not be seen by VM thread here");
572      BiasedLocking::revoke_and_rebias(hobj, false, JavaThread::current());
573      obj = hobj();
574      assert(!obj->mark()->has_bias_pattern(), "biases should be revoked by now");
575    }
576  }
577
578  // hashCode() is a heap mutator ...
579  // Relaxing assertion for bug 6320749.
580  assert(Universe::verify_in_progress() ||
581         !SafepointSynchronize::is_at_safepoint(), "invariant");
582  assert(Universe::verify_in_progress() ||
583         Self->is_Java_thread() , "invariant");
584  assert(Universe::verify_in_progress() ||
585         ((JavaThread *)Self)->thread_state() != _thread_blocked, "invariant");
586
587  ObjectMonitor* monitor = NULL;
588  markOop temp, test;
589  intptr_t hash;
590  markOop mark = ReadStableMark(obj);
591
592  // object should remain ineligible for biased locking
593  assert(!mark->has_bias_pattern(), "invariant");
594
595  if (mark->is_neutral()) {
596    hash = mark->hash();              // this is a normal header
597    if (hash) {                       // if it has hash, just return it
598      return hash;
599    }
600    hash = get_next_hash(Self, obj);  // allocate a new hash code
601    temp = mark->copy_set_hash(hash); // merge the hash code into header
602    // use (machine word version) atomic operation to install the hash
603    test = (markOop) Atomic::cmpxchg_ptr(temp, obj->mark_addr(), mark);
604    if (test == mark) {
605      return hash;
606    }
607    // If atomic operation failed, we must inflate the header
608    // into heavy weight monitor. We could add more code here
609    // for fast path, but it does not worth the complexity.
610  } else if (mark->has_monitor()) {
611    monitor = mark->monitor();
612    temp = monitor->header();
613    assert(temp->is_neutral(), "invariant");
614    hash = temp->hash();
615    if (hash) {
616      return hash;
617    }
618    // Skip to the following code to reduce code size
619  } else if (Self->is_lock_owned((address)mark->locker())) {
620    temp = mark->displaced_mark_helper(); // this is a lightweight monitor owned
621    assert(temp->is_neutral(), "invariant");
622    hash = temp->hash();              // by current thread, check if the displaced
623    if (hash) {                       // header contains hash code
624      return hash;
625    }
626    // WARNING:
627    //   The displaced header is strictly immutable.
628    // It can NOT be changed in ANY cases. So we have
629    // to inflate the header into heavyweight monitor
630    // even the current thread owns the lock. The reason
631    // is the BasicLock (stack slot) will be asynchronously
632    // read by other threads during the inflate() function.
633    // Any change to stack may not propagate to other threads
634    // correctly.
635  }
636
637  // Inflate the monitor to set hash code
638  monitor = ObjectSynchronizer::inflate(Self, obj);
639  // Load displaced header and check it has hash code
640  mark = monitor->header();
641  assert(mark->is_neutral(), "invariant");
642  hash = mark->hash();
643  if (hash == 0) {
644    hash = get_next_hash(Self, obj);
645    temp = mark->copy_set_hash(hash); // merge hash code into header
646    assert(temp->is_neutral(), "invariant");
647    test = (markOop) Atomic::cmpxchg_ptr(temp, monitor, mark);
648    if (test != mark) {
649      // The only update to the header in the monitor (outside GC)
650      // is install the hash code. If someone add new usage of
651      // displaced header, please update this code
652      hash = test->hash();
653      assert(test->is_neutral(), "invariant");
654      assert(hash != 0, "Trivial unexpected object/monitor header usage.");
655    }
656  }
657  // We finally get the hash
658  return hash;
659}
660
661// Deprecated -- use FastHashCode() instead.
662
663intptr_t ObjectSynchronizer::identity_hash_value_for(Handle obj) {
664  return FastHashCode(Thread::current(), obj());
665}
666
667
668bool ObjectSynchronizer::current_thread_holds_lock(JavaThread* thread,
669                                                   Handle h_obj) {
670  if (UseBiasedLocking) {
671    BiasedLocking::revoke_and_rebias(h_obj, false, thread);
672    assert(!h_obj->mark()->has_bias_pattern(), "biases should be revoked by now");
673  }
674
675  assert(thread == JavaThread::current(), "Can only be called on current thread");
676  oop obj = h_obj();
677
678  markOop mark = ReadStableMark(obj);
679
680  // Uncontended case, header points to stack
681  if (mark->has_locker()) {
682    return thread->is_lock_owned((address)mark->locker());
683  }
684  // Contended case, header points to ObjectMonitor (tagged pointer)
685  if (mark->has_monitor()) {
686    ObjectMonitor* monitor = mark->monitor();
687    return monitor->is_entered(thread) != 0;
688  }
689  // Unlocked case, header in place
690  assert(mark->is_neutral(), "sanity check");
691  return false;
692}
693
694// Be aware of this method could revoke bias of the lock object.
695// This method queries the ownership of the lock handle specified by 'h_obj'.
696// If the current thread owns the lock, it returns owner_self. If no
697// thread owns the lock, it returns owner_none. Otherwise, it will return
698// owner_other.
699ObjectSynchronizer::LockOwnership ObjectSynchronizer::query_lock_ownership
700(JavaThread *self, Handle h_obj) {
701  // The caller must beware this method can revoke bias, and
702  // revocation can result in a safepoint.
703  assert(!SafepointSynchronize::is_at_safepoint(), "invariant");
704  assert(self->thread_state() != _thread_blocked, "invariant");
705
706  // Possible mark states: neutral, biased, stack-locked, inflated
707
708  if (UseBiasedLocking && h_obj()->mark()->has_bias_pattern()) {
709    // CASE: biased
710    BiasedLocking::revoke_and_rebias(h_obj, false, self);
711    assert(!h_obj->mark()->has_bias_pattern(),
712           "biases should be revoked by now");
713  }
714
715  assert(self == JavaThread::current(), "Can only be called on current thread");
716  oop obj = h_obj();
717  markOop mark = ReadStableMark(obj);
718
719  // CASE: stack-locked.  Mark points to a BasicLock on the owner's stack.
720  if (mark->has_locker()) {
721    return self->is_lock_owned((address)mark->locker()) ?
722      owner_self : owner_other;
723  }
724
725  // CASE: inflated. Mark (tagged pointer) points to an objectMonitor.
726  // The Object:ObjectMonitor relationship is stable as long as we're
727  // not at a safepoint.
728  if (mark->has_monitor()) {
729    void * owner = mark->monitor()->_owner;
730    if (owner == NULL) return owner_none;
731    return (owner == self ||
732            self->is_lock_owned((address)owner)) ? owner_self : owner_other;
733  }
734
735  // CASE: neutral
736  assert(mark->is_neutral(), "sanity check");
737  return owner_none;           // it's unlocked
738}
739
740// FIXME: jvmti should call this
741JavaThread* ObjectSynchronizer::get_lock_owner(Handle h_obj, bool doLock) {
742  if (UseBiasedLocking) {
743    if (SafepointSynchronize::is_at_safepoint()) {
744      BiasedLocking::revoke_at_safepoint(h_obj);
745    } else {
746      BiasedLocking::revoke_and_rebias(h_obj, false, JavaThread::current());
747    }
748    assert(!h_obj->mark()->has_bias_pattern(), "biases should be revoked by now");
749  }
750
751  oop obj = h_obj();
752  address owner = NULL;
753
754  markOop mark = ReadStableMark(obj);
755
756  // Uncontended case, header points to stack
757  if (mark->has_locker()) {
758    owner = (address) mark->locker();
759  }
760
761  // Contended case, header points to ObjectMonitor (tagged pointer)
762  if (mark->has_monitor()) {
763    ObjectMonitor* monitor = mark->monitor();
764    assert(monitor != NULL, "monitor should be non-null");
765    owner = (address) monitor->owner();
766  }
767
768  if (owner != NULL) {
769    // owning_thread_from_monitor_owner() may also return NULL here
770    return Threads::owning_thread_from_monitor_owner(owner, doLock);
771  }
772
773  // Unlocked case, header in place
774  // Cannot have assertion since this object may have been
775  // locked by another thread when reaching here.
776  // assert(mark->is_neutral(), "sanity check");
777
778  return NULL;
779}
780// Visitors ...
781
782void ObjectSynchronizer::monitors_iterate(MonitorClosure* closure) {
783  ObjectMonitor* block = gBlockList;
784  ObjectMonitor* mid;
785  while (block) {
786    assert(block->object() == CHAINMARKER, "must be a block header");
787    for (int i = _BLOCKSIZE - 1; i > 0; i--) {
788      mid = block + i;
789      oop object = (oop) mid->object();
790      if (object != NULL) {
791        closure->do_monitor(mid);
792      }
793    }
794    block = (ObjectMonitor*) block->FreeNext;
795  }
796}
797
798// Get the next block in the block list.
799static inline ObjectMonitor* next(ObjectMonitor* block) {
800  assert(block->object() == CHAINMARKER, "must be a block header");
801  block = block->FreeNext;
802  assert(block == NULL || block->object() == CHAINMARKER, "must be a block header");
803  return block;
804}
805
806
807void ObjectSynchronizer::oops_do(OopClosure* f) {
808  assert(SafepointSynchronize::is_at_safepoint(), "must be at safepoint");
809  for (ObjectMonitor* block = gBlockList; block != NULL; block = next(block)) {
810    assert(block->object() == CHAINMARKER, "must be a block header");
811    for (int i = 1; i < _BLOCKSIZE; i++) {
812      ObjectMonitor* mid = &block[i];
813      if (mid->object() != NULL) {
814        f->do_oop((oop*)mid->object_addr());
815      }
816    }
817  }
818}
819
820
821// -----------------------------------------------------------------------------
822// ObjectMonitor Lifecycle
823// -----------------------
824// Inflation unlinks monitors from the global gFreeList and
825// associates them with objects.  Deflation -- which occurs at
826// STW-time -- disassociates idle monitors from objects.  Such
827// scavenged monitors are returned to the gFreeList.
828//
829// The global list is protected by ListLock.  All the critical sections
830// are short and operate in constant-time.
831//
832// ObjectMonitors reside in type-stable memory (TSM) and are immortal.
833//
834// Lifecycle:
835// --   unassigned and on the global free list
836// --   unassigned and on a thread's private omFreeList
837// --   assigned to an object.  The object is inflated and the mark refers
838//      to the objectmonitor.
839
840
841// Constraining monitor pool growth via MonitorBound ...
842//
843// The monitor pool is grow-only.  We scavenge at STW safepoint-time, but the
844// the rate of scavenging is driven primarily by GC.  As such,  we can find
845// an inordinate number of monitors in circulation.
846// To avoid that scenario we can artificially induce a STW safepoint
847// if the pool appears to be growing past some reasonable bound.
848// Generally we favor time in space-time tradeoffs, but as there's no
849// natural back-pressure on the # of extant monitors we need to impose some
850// type of limit.  Beware that if MonitorBound is set to too low a value
851// we could just loop. In addition, if MonitorBound is set to a low value
852// we'll incur more safepoints, which are harmful to performance.
853// See also: GuaranteedSafepointInterval
854//
855// The current implementation uses asynchronous VM operations.
856
857static void InduceScavenge(Thread * Self, const char * Whence) {
858  // Induce STW safepoint to trim monitors
859  // Ultimately, this results in a call to deflate_idle_monitors() in the near future.
860  // More precisely, trigger an asynchronous STW safepoint as the number
861  // of active monitors passes the specified threshold.
862  // TODO: assert thread state is reasonable
863
864  if (ForceMonitorScavenge == 0 && Atomic::xchg (1, &ForceMonitorScavenge) == 0) {
865    if (ObjectMonitor::Knob_Verbose) {
866      ::printf ("Monitor scavenge - Induced STW @%s (%d)\n", Whence, ForceMonitorScavenge) ;
867      ::fflush(stdout);
868    }
869    // Induce a 'null' safepoint to scavenge monitors
870    // Must VM_Operation instance be heap allocated as the op will be enqueue and posted
871    // to the VMthread and have a lifespan longer than that of this activation record.
872    // The VMThread will delete the op when completed.
873    VMThread::execute(new VM_ForceAsyncSafepoint());
874
875    if (ObjectMonitor::Knob_Verbose) {
876      ::printf ("Monitor scavenge - STW posted @%s (%d)\n", Whence, ForceMonitorScavenge) ;
877      ::fflush(stdout);
878    }
879  }
880}
881
882void ObjectSynchronizer::verifyInUse(Thread *Self) {
883  ObjectMonitor* mid;
884  int inusetally = 0;
885  for (mid = Self->omInUseList; mid != NULL; mid = mid->FreeNext) {
886    inusetally++;
887  }
888  assert(inusetally == Self->omInUseCount, "inuse count off");
889
890  int freetally = 0;
891  for (mid = Self->omFreeList; mid != NULL; mid = mid->FreeNext) {
892    freetally++;
893  }
894  assert(freetally == Self->omFreeCount, "free count off");
895}
896
897ObjectMonitor * NOINLINE ObjectSynchronizer::omAlloc(Thread * Self) {
898  // A large MAXPRIVATE value reduces both list lock contention
899  // and list coherency traffic, but also tends to increase the
900  // number of objectMonitors in circulation as well as the STW
901  // scavenge costs.  As usual, we lean toward time in space-time
902  // tradeoffs.
903  const int MAXPRIVATE = 1024;
904  for (;;) {
905    ObjectMonitor * m;
906
907    // 1: try to allocate from the thread's local omFreeList.
908    // Threads will attempt to allocate first from their local list, then
909    // from the global list, and only after those attempts fail will the thread
910    // attempt to instantiate new monitors.   Thread-local free lists take
911    // heat off the ListLock and improve allocation latency, as well as reducing
912    // coherency traffic on the shared global list.
913    m = Self->omFreeList;
914    if (m != NULL) {
915      Self->omFreeList = m->FreeNext;
916      Self->omFreeCount--;
917      // CONSIDER: set m->FreeNext = BAD -- diagnostic hygiene
918      guarantee(m->object() == NULL, "invariant");
919      if (MonitorInUseLists) {
920        m->FreeNext = Self->omInUseList;
921        Self->omInUseList = m;
922        Self->omInUseCount++;
923        if (ObjectMonitor::Knob_VerifyInUse) {
924          verifyInUse(Self);
925        }
926      } else {
927        m->FreeNext = NULL;
928      }
929      return m;
930    }
931
932    // 2: try to allocate from the global gFreeList
933    // CONSIDER: use muxTry() instead of muxAcquire().
934    // If the muxTry() fails then drop immediately into case 3.
935    // If we're using thread-local free lists then try
936    // to reprovision the caller's free list.
937    if (gFreeList != NULL) {
938      // Reprovision the thread's omFreeList.
939      // Use bulk transfers to reduce the allocation rate and heat
940      // on various locks.
941      Thread::muxAcquire(&ListLock, "omAlloc");
942      for (int i = Self->omFreeProvision; --i >= 0 && gFreeList != NULL;) {
943        MonitorFreeCount--;
944        ObjectMonitor * take = gFreeList;
945        gFreeList = take->FreeNext;
946        guarantee(take->object() == NULL, "invariant");
947        guarantee(!take->is_busy(), "invariant");
948        take->Recycle();
949        omRelease(Self, take, false);
950      }
951      Thread::muxRelease(&ListLock);
952      Self->omFreeProvision += 1 + (Self->omFreeProvision/2);
953      if (Self->omFreeProvision > MAXPRIVATE) Self->omFreeProvision = MAXPRIVATE;
954      TEVENT(omFirst - reprovision);
955
956      const int mx = MonitorBound;
957      if (mx > 0 && (MonitorPopulation-MonitorFreeCount) > mx) {
958        // We can't safely induce a STW safepoint from omAlloc() as our thread
959        // state may not be appropriate for such activities and callers may hold
960        // naked oops, so instead we defer the action.
961        InduceScavenge(Self, "omAlloc");
962      }
963      continue;
964    }
965
966    // 3: allocate a block of new ObjectMonitors
967    // Both the local and global free lists are empty -- resort to malloc().
968    // In the current implementation objectMonitors are TSM - immortal.
969    assert(_BLOCKSIZE > 1, "invariant");
970    ObjectMonitor * temp = new ObjectMonitor[_BLOCKSIZE];
971
972    // NOTE: (almost) no way to recover if allocation failed.
973    // We might be able to induce a STW safepoint and scavenge enough
974    // objectMonitors to permit progress.
975    if (temp == NULL) {
976      vm_exit_out_of_memory(sizeof (ObjectMonitor[_BLOCKSIZE]), OOM_MALLOC_ERROR,
977                            "Allocate ObjectMonitors");
978    }
979
980    // Format the block.
981    // initialize the linked list, each monitor points to its next
982    // forming the single linked free list, the very first monitor
983    // will points to next block, which forms the block list.
984    // The trick of using the 1st element in the block as gBlockList
985    // linkage should be reconsidered.  A better implementation would
986    // look like: class Block { Block * next; int N; ObjectMonitor Body [N] ; }
987
988    for (int i = 1; i < _BLOCKSIZE; i++) {
989      temp[i].FreeNext = &temp[i+1];
990    }
991
992    // terminate the last monitor as the end of list
993    temp[_BLOCKSIZE - 1].FreeNext = NULL;
994
995    // Element [0] is reserved for global list linkage
996    temp[0].set_object(CHAINMARKER);
997
998    // Consider carving out this thread's current request from the
999    // block in hand.  This avoids some lock traffic and redundant
1000    // list activity.
1001
1002    // Acquire the ListLock to manipulate BlockList and FreeList.
1003    // An Oyama-Taura-Yonezawa scheme might be more efficient.
1004    Thread::muxAcquire(&ListLock, "omAlloc [2]");
1005    MonitorPopulation += _BLOCKSIZE-1;
1006    MonitorFreeCount += _BLOCKSIZE-1;
1007
1008    // Add the new block to the list of extant blocks (gBlockList).
1009    // The very first objectMonitor in a block is reserved and dedicated.
1010    // It serves as blocklist "next" linkage.
1011    temp[0].FreeNext = gBlockList;
1012    gBlockList = temp;
1013
1014    // Add the new string of objectMonitors to the global free list
1015    temp[_BLOCKSIZE - 1].FreeNext = gFreeList;
1016    gFreeList = temp + 1;
1017    Thread::muxRelease(&ListLock);
1018    TEVENT(Allocate block of monitors);
1019  }
1020}
1021
1022// Place "m" on the caller's private per-thread omFreeList.
1023// In practice there's no need to clamp or limit the number of
1024// monitors on a thread's omFreeList as the only time we'll call
1025// omRelease is to return a monitor to the free list after a CAS
1026// attempt failed.  This doesn't allow unbounded #s of monitors to
1027// accumulate on a thread's free list.
1028
1029void ObjectSynchronizer::omRelease(Thread * Self, ObjectMonitor * m,
1030                                   bool fromPerThreadAlloc) {
1031  guarantee(m->object() == NULL, "invariant");
1032
1033  // Remove from omInUseList
1034  if (MonitorInUseLists && fromPerThreadAlloc) {
1035    ObjectMonitor* curmidinuse = NULL;
1036    for (ObjectMonitor* mid = Self->omInUseList; mid != NULL;) {
1037      if (m == mid) {
1038        // extract from per-thread in-use-list
1039        if (mid == Self->omInUseList) {
1040          Self->omInUseList = mid->FreeNext;
1041        } else if (curmidinuse != NULL) {
1042          curmidinuse->FreeNext = mid->FreeNext; // maintain the current thread inuselist
1043        }
1044        Self->omInUseCount--;
1045        if (ObjectMonitor::Knob_VerifyInUse) {
1046          verifyInUse(Self);
1047        }
1048        break;
1049      } else {
1050        curmidinuse = mid;
1051        mid = mid->FreeNext;
1052      }
1053    }
1054  }
1055
1056  // FreeNext is used for both omInUseList and omFreeList, so clear old before setting new
1057  m->FreeNext = Self->omFreeList;
1058  Self->omFreeList = m;
1059  Self->omFreeCount++;
1060}
1061
1062// Return the monitors of a moribund thread's local free list to
1063// the global free list.  Typically a thread calls omFlush() when
1064// it's dying.  We could also consider having the VM thread steal
1065// monitors from threads that have not run java code over a few
1066// consecutive STW safepoints.  Relatedly, we might decay
1067// omFreeProvision at STW safepoints.
1068//
1069// Also return the monitors of a moribund thread's omInUseList to
1070// a global gOmInUseList under the global list lock so these
1071// will continue to be scanned.
1072//
1073// We currently call omFlush() from the Thread:: dtor _after the thread
1074// has been excised from the thread list and is no longer a mutator.
1075// That means that omFlush() can run concurrently with a safepoint and
1076// the scavenge operator.  Calling omFlush() from JavaThread::exit() might
1077// be a better choice as we could safely reason that that the JVM is
1078// not at a safepoint at the time of the call, and thus there could
1079// be not inopportune interleavings between omFlush() and the scavenge
1080// operator.
1081
1082void ObjectSynchronizer::omFlush(Thread * Self) {
1083  ObjectMonitor * List = Self->omFreeList;  // Null-terminated SLL
1084  Self->omFreeList = NULL;
1085  ObjectMonitor * Tail = NULL;
1086  int Tally = 0;
1087  if (List != NULL) {
1088    ObjectMonitor * s;
1089    for (s = List; s != NULL; s = s->FreeNext) {
1090      Tally++;
1091      Tail = s;
1092      guarantee(s->object() == NULL, "invariant");
1093      guarantee(!s->is_busy(), "invariant");
1094      s->set_owner(NULL);   // redundant but good hygiene
1095      TEVENT(omFlush - Move one);
1096    }
1097    guarantee(Tail != NULL && List != NULL, "invariant");
1098  }
1099
1100  ObjectMonitor * InUseList = Self->omInUseList;
1101  ObjectMonitor * InUseTail = NULL;
1102  int InUseTally = 0;
1103  if (InUseList != NULL) {
1104    Self->omInUseList = NULL;
1105    ObjectMonitor *curom;
1106    for (curom = InUseList; curom != NULL; curom = curom->FreeNext) {
1107      InUseTail = curom;
1108      InUseTally++;
1109    }
1110    assert(Self->omInUseCount == InUseTally, "inuse count off");
1111    Self->omInUseCount = 0;
1112    guarantee(InUseTail != NULL && InUseList != NULL, "invariant");
1113  }
1114
1115  Thread::muxAcquire(&ListLock, "omFlush");
1116  if (Tail != NULL) {
1117    Tail->FreeNext = gFreeList;
1118    gFreeList = List;
1119    MonitorFreeCount += Tally;
1120  }
1121
1122  if (InUseTail != NULL) {
1123    InUseTail->FreeNext = gOmInUseList;
1124    gOmInUseList = InUseList;
1125    gOmInUseCount += InUseTally;
1126  }
1127
1128  Thread::muxRelease(&ListLock);
1129  TEVENT(omFlush);
1130}
1131
1132// Fast path code shared by multiple functions
1133ObjectMonitor* ObjectSynchronizer::inflate_helper(oop obj) {
1134  markOop mark = obj->mark();
1135  if (mark->has_monitor()) {
1136    assert(ObjectSynchronizer::verify_objmon_isinpool(mark->monitor()), "monitor is invalid");
1137    assert(mark->monitor()->header()->is_neutral(), "monitor must record a good object header");
1138    return mark->monitor();
1139  }
1140  return ObjectSynchronizer::inflate(Thread::current(), obj);
1141}
1142
1143
1144// Note that we could encounter some performance loss through false-sharing as
1145// multiple locks occupy the same $ line.  Padding might be appropriate.
1146
1147
1148ObjectMonitor * NOINLINE ObjectSynchronizer::inflate(Thread * Self,
1149                                                     oop object) {
1150  // Inflate mutates the heap ...
1151  // Relaxing assertion for bug 6320749.
1152  assert(Universe::verify_in_progress() ||
1153         !SafepointSynchronize::is_at_safepoint(), "invariant");
1154
1155  for (;;) {
1156    const markOop mark = object->mark();
1157    assert(!mark->has_bias_pattern(), "invariant");
1158
1159    // The mark can be in one of the following states:
1160    // *  Inflated     - just return
1161    // *  Stack-locked - coerce it to inflated
1162    // *  INFLATING    - busy wait for conversion to complete
1163    // *  Neutral      - aggressively inflate the object.
1164    // *  BIASED       - Illegal.  We should never see this
1165
1166    // CASE: inflated
1167    if (mark->has_monitor()) {
1168      ObjectMonitor * inf = mark->monitor();
1169      assert(inf->header()->is_neutral(), "invariant");
1170      assert(inf->object() == object, "invariant");
1171      assert(ObjectSynchronizer::verify_objmon_isinpool(inf), "monitor is invalid");
1172      return inf;
1173    }
1174
1175    // CASE: inflation in progress - inflating over a stack-lock.
1176    // Some other thread is converting from stack-locked to inflated.
1177    // Only that thread can complete inflation -- other threads must wait.
1178    // The INFLATING value is transient.
1179    // Currently, we spin/yield/park and poll the markword, waiting for inflation to finish.
1180    // We could always eliminate polling by parking the thread on some auxiliary list.
1181    if (mark == markOopDesc::INFLATING()) {
1182      TEVENT(Inflate: spin while INFLATING);
1183      ReadStableMark(object);
1184      continue;
1185    }
1186
1187    // CASE: stack-locked
1188    // Could be stack-locked either by this thread or by some other thread.
1189    //
1190    // Note that we allocate the objectmonitor speculatively, _before_ attempting
1191    // to install INFLATING into the mark word.  We originally installed INFLATING,
1192    // allocated the objectmonitor, and then finally STed the address of the
1193    // objectmonitor into the mark.  This was correct, but artificially lengthened
1194    // the interval in which INFLATED appeared in the mark, thus increasing
1195    // the odds of inflation contention.
1196    //
1197    // We now use per-thread private objectmonitor free lists.
1198    // These list are reprovisioned from the global free list outside the
1199    // critical INFLATING...ST interval.  A thread can transfer
1200    // multiple objectmonitors en-mass from the global free list to its local free list.
1201    // This reduces coherency traffic and lock contention on the global free list.
1202    // Using such local free lists, it doesn't matter if the omAlloc() call appears
1203    // before or after the CAS(INFLATING) operation.
1204    // See the comments in omAlloc().
1205
1206    if (mark->has_locker()) {
1207      ObjectMonitor * m = omAlloc(Self);
1208      // Optimistically prepare the objectmonitor - anticipate successful CAS
1209      // We do this before the CAS in order to minimize the length of time
1210      // in which INFLATING appears in the mark.
1211      m->Recycle();
1212      m->_Responsible  = NULL;
1213      m->OwnerIsThread = 0;
1214      m->_recursions   = 0;
1215      m->_SpinDuration = ObjectMonitor::Knob_SpinLimit;   // Consider: maintain by type/class
1216
1217      markOop cmp = (markOop) Atomic::cmpxchg_ptr(markOopDesc::INFLATING(), object->mark_addr(), mark);
1218      if (cmp != mark) {
1219        omRelease(Self, m, true);
1220        continue;       // Interference -- just retry
1221      }
1222
1223      // We've successfully installed INFLATING (0) into the mark-word.
1224      // This is the only case where 0 will appear in a mark-work.
1225      // Only the singular thread that successfully swings the mark-word
1226      // to 0 can perform (or more precisely, complete) inflation.
1227      //
1228      // Why do we CAS a 0 into the mark-word instead of just CASing the
1229      // mark-word from the stack-locked value directly to the new inflated state?
1230      // Consider what happens when a thread unlocks a stack-locked object.
1231      // It attempts to use CAS to swing the displaced header value from the
1232      // on-stack basiclock back into the object header.  Recall also that the
1233      // header value (hashcode, etc) can reside in (a) the object header, or
1234      // (b) a displaced header associated with the stack-lock, or (c) a displaced
1235      // header in an objectMonitor.  The inflate() routine must copy the header
1236      // value from the basiclock on the owner's stack to the objectMonitor, all
1237      // the while preserving the hashCode stability invariants.  If the owner
1238      // decides to release the lock while the value is 0, the unlock will fail
1239      // and control will eventually pass from slow_exit() to inflate.  The owner
1240      // will then spin, waiting for the 0 value to disappear.   Put another way,
1241      // the 0 causes the owner to stall if the owner happens to try to
1242      // drop the lock (restoring the header from the basiclock to the object)
1243      // while inflation is in-progress.  This protocol avoids races that might
1244      // would otherwise permit hashCode values to change or "flicker" for an object.
1245      // Critically, while object->mark is 0 mark->displaced_mark_helper() is stable.
1246      // 0 serves as a "BUSY" inflate-in-progress indicator.
1247
1248
1249      // fetch the displaced mark from the owner's stack.
1250      // The owner can't die or unwind past the lock while our INFLATING
1251      // object is in the mark.  Furthermore the owner can't complete
1252      // an unlock on the object, either.
1253      markOop dmw = mark->displaced_mark_helper();
1254      assert(dmw->is_neutral(), "invariant");
1255
1256      // Setup monitor fields to proper values -- prepare the monitor
1257      m->set_header(dmw);
1258
1259      // Optimization: if the mark->locker stack address is associated
1260      // with this thread we could simply set m->_owner = Self and
1261      // m->OwnerIsThread = 1. Note that a thread can inflate an object
1262      // that it has stack-locked -- as might happen in wait() -- directly
1263      // with CAS.  That is, we can avoid the xchg-NULL .... ST idiom.
1264      m->set_owner(mark->locker());
1265      m->set_object(object);
1266      // TODO-FIXME: assert BasicLock->dhw != 0.
1267
1268      // Must preserve store ordering. The monitor state must
1269      // be stable at the time of publishing the monitor address.
1270      guarantee(object->mark() == markOopDesc::INFLATING(), "invariant");
1271      object->release_set_mark(markOopDesc::encode(m));
1272
1273      // Hopefully the performance counters are allocated on distinct cache lines
1274      // to avoid false sharing on MP systems ...
1275      if (ObjectMonitor::_sync_Inflations != NULL) ObjectMonitor::_sync_Inflations->inc();
1276      TEVENT(Inflate: overwrite stacklock);
1277      if (TraceMonitorInflation) {
1278        if (object->is_instance()) {
1279          ResourceMark rm;
1280          tty->print_cr("Inflating object " INTPTR_FORMAT " , mark " INTPTR_FORMAT " , type %s",
1281                        (void *) object, (intptr_t) object->mark(),
1282                        object->klass()->external_name());
1283        }
1284      }
1285      return m;
1286    }
1287
1288    // CASE: neutral
1289    // TODO-FIXME: for entry we currently inflate and then try to CAS _owner.
1290    // If we know we're inflating for entry it's better to inflate by swinging a
1291    // pre-locked objectMonitor pointer into the object header.   A successful
1292    // CAS inflates the object *and* confers ownership to the inflating thread.
1293    // In the current implementation we use a 2-step mechanism where we CAS()
1294    // to inflate and then CAS() again to try to swing _owner from NULL to Self.
1295    // An inflateTry() method that we could call from fast_enter() and slow_enter()
1296    // would be useful.
1297
1298    assert(mark->is_neutral(), "invariant");
1299    ObjectMonitor * m = omAlloc(Self);
1300    // prepare m for installation - set monitor to initial state
1301    m->Recycle();
1302    m->set_header(mark);
1303    m->set_owner(NULL);
1304    m->set_object(object);
1305    m->OwnerIsThread = 1;
1306    m->_recursions   = 0;
1307    m->_Responsible  = NULL;
1308    m->_SpinDuration = ObjectMonitor::Knob_SpinLimit;       // consider: keep metastats by type/class
1309
1310    if (Atomic::cmpxchg_ptr (markOopDesc::encode(m), object->mark_addr(), mark) != mark) {
1311      m->set_object(NULL);
1312      m->set_owner(NULL);
1313      m->OwnerIsThread = 0;
1314      m->Recycle();
1315      omRelease(Self, m, true);
1316      m = NULL;
1317      continue;
1318      // interference - the markword changed - just retry.
1319      // The state-transitions are one-way, so there's no chance of
1320      // live-lock -- "Inflated" is an absorbing state.
1321    }
1322
1323    // Hopefully the performance counters are allocated on distinct
1324    // cache lines to avoid false sharing on MP systems ...
1325    if (ObjectMonitor::_sync_Inflations != NULL) ObjectMonitor::_sync_Inflations->inc();
1326    TEVENT(Inflate: overwrite neutral);
1327    if (TraceMonitorInflation) {
1328      if (object->is_instance()) {
1329        ResourceMark rm;
1330        tty->print_cr("Inflating object " INTPTR_FORMAT " , mark " INTPTR_FORMAT " , type %s",
1331                      (void *) object, (intptr_t) object->mark(),
1332                      object->klass()->external_name());
1333      }
1334    }
1335    return m;
1336  }
1337}
1338
1339// Note that we could encounter some performance loss through false-sharing as
1340// multiple locks occupy the same $ line.  Padding might be appropriate.
1341
1342
1343// Deflate_idle_monitors() is called at all safepoints, immediately
1344// after all mutators are stopped, but before any objects have moved.
1345// It traverses the list of known monitors, deflating where possible.
1346// The scavenged monitor are returned to the monitor free list.
1347//
1348// Beware that we scavenge at *every* stop-the-world point.
1349// Having a large number of monitors in-circulation negatively
1350// impacts the performance of some applications (e.g., PointBase).
1351// Broadly, we want to minimize the # of monitors in circulation.
1352//
1353// We have added a flag, MonitorInUseLists, which creates a list
1354// of active monitors for each thread. deflate_idle_monitors()
1355// only scans the per-thread inuse lists. omAlloc() puts all
1356// assigned monitors on the per-thread list. deflate_idle_monitors()
1357// returns the non-busy monitors to the global free list.
1358// When a thread dies, omFlush() adds the list of active monitors for
1359// that thread to a global gOmInUseList acquiring the
1360// global list lock. deflate_idle_monitors() acquires the global
1361// list lock to scan for non-busy monitors to the global free list.
1362// An alternative could have used a single global inuse list. The
1363// downside would have been the additional cost of acquiring the global list lock
1364// for every omAlloc().
1365//
1366// Perversely, the heap size -- and thus the STW safepoint rate --
1367// typically drives the scavenge rate.  Large heaps can mean infrequent GC,
1368// which in turn can mean large(r) numbers of objectmonitors in circulation.
1369// This is an unfortunate aspect of this design.
1370
1371enum ManifestConstants {
1372  ClearResponsibleAtSTW   = 0,
1373  MaximumRecheckInterval  = 1000
1374};
1375
1376// Deflate a single monitor if not in use
1377// Return true if deflated, false if in use
1378bool ObjectSynchronizer::deflate_monitor(ObjectMonitor* mid, oop obj,
1379                                         ObjectMonitor** freeHeadp,
1380                                         ObjectMonitor** freeTailp) {
1381  bool deflated;
1382  // Normal case ... The monitor is associated with obj.
1383  guarantee(obj->mark() == markOopDesc::encode(mid), "invariant");
1384  guarantee(mid == obj->mark()->monitor(), "invariant");
1385  guarantee(mid->header()->is_neutral(), "invariant");
1386
1387  if (mid->is_busy()) {
1388    if (ClearResponsibleAtSTW) mid->_Responsible = NULL;
1389    deflated = false;
1390  } else {
1391    // Deflate the monitor if it is no longer being used
1392    // It's idle - scavenge and return to the global free list
1393    // plain old deflation ...
1394    TEVENT(deflate_idle_monitors - scavenge1);
1395    if (TraceMonitorInflation) {
1396      if (obj->is_instance()) {
1397        ResourceMark rm;
1398        tty->print_cr("Deflating object " INTPTR_FORMAT " , mark " INTPTR_FORMAT " , type %s",
1399                      (void *) obj, (intptr_t) obj->mark(), obj->klass()->external_name());
1400      }
1401    }
1402
1403    // Restore the header back to obj
1404    obj->release_set_mark(mid->header());
1405    mid->clear();
1406
1407    assert(mid->object() == NULL, "invariant");
1408
1409    // Move the object to the working free list defined by FreeHead,FreeTail.
1410    if (*freeHeadp == NULL) *freeHeadp = mid;
1411    if (*freeTailp != NULL) {
1412      ObjectMonitor * prevtail = *freeTailp;
1413      assert(prevtail->FreeNext == NULL, "cleaned up deflated?"); // TODO KK
1414      prevtail->FreeNext = mid;
1415    }
1416    *freeTailp = mid;
1417    deflated = true;
1418  }
1419  return deflated;
1420}
1421
1422// Caller acquires ListLock
1423int ObjectSynchronizer::walk_monitor_list(ObjectMonitor** listheadp,
1424                                          ObjectMonitor** freeHeadp,
1425                                          ObjectMonitor** freeTailp) {
1426  ObjectMonitor* mid;
1427  ObjectMonitor* next;
1428  ObjectMonitor* curmidinuse = NULL;
1429  int deflatedcount = 0;
1430
1431  for (mid = *listheadp; mid != NULL;) {
1432    oop obj = (oop) mid->object();
1433    bool deflated = false;
1434    if (obj != NULL) {
1435      deflated = deflate_monitor(mid, obj, freeHeadp, freeTailp);
1436    }
1437    if (deflated) {
1438      // extract from per-thread in-use-list
1439      if (mid == *listheadp) {
1440        *listheadp = mid->FreeNext;
1441      } else if (curmidinuse != NULL) {
1442        curmidinuse->FreeNext = mid->FreeNext; // maintain the current thread inuselist
1443      }
1444      next = mid->FreeNext;
1445      mid->FreeNext = NULL;  // This mid is current tail in the FreeHead list
1446      mid = next;
1447      deflatedcount++;
1448    } else {
1449      curmidinuse = mid;
1450      mid = mid->FreeNext;
1451    }
1452  }
1453  return deflatedcount;
1454}
1455
1456void ObjectSynchronizer::deflate_idle_monitors() {
1457  assert(SafepointSynchronize::is_at_safepoint(), "must be at safepoint");
1458  int nInuse = 0;              // currently associated with objects
1459  int nInCirculation = 0;      // extant
1460  int nScavenged = 0;          // reclaimed
1461  bool deflated = false;
1462
1463  ObjectMonitor * FreeHead = NULL;  // Local SLL of scavenged monitors
1464  ObjectMonitor * FreeTail = NULL;
1465
1466  TEVENT(deflate_idle_monitors);
1467  // Prevent omFlush from changing mids in Thread dtor's during deflation
1468  // And in case the vm thread is acquiring a lock during a safepoint
1469  // See e.g. 6320749
1470  Thread::muxAcquire(&ListLock, "scavenge - return");
1471
1472  if (MonitorInUseLists) {
1473    int inUse = 0;
1474    for (JavaThread* cur = Threads::first(); cur != NULL; cur = cur->next()) {
1475      nInCirculation+= cur->omInUseCount;
1476      int deflatedcount = walk_monitor_list(cur->omInUseList_addr(), &FreeHead, &FreeTail);
1477      cur->omInUseCount-= deflatedcount;
1478      if (ObjectMonitor::Knob_VerifyInUse) {
1479        verifyInUse(cur);
1480      }
1481      nScavenged += deflatedcount;
1482      nInuse += cur->omInUseCount;
1483    }
1484
1485    // For moribund threads, scan gOmInUseList
1486    if (gOmInUseList) {
1487      nInCirculation += gOmInUseCount;
1488      int deflatedcount = walk_monitor_list((ObjectMonitor **)&gOmInUseList, &FreeHead, &FreeTail);
1489      gOmInUseCount-= deflatedcount;
1490      nScavenged += deflatedcount;
1491      nInuse += gOmInUseCount;
1492    }
1493
1494  } else for (ObjectMonitor* block = gBlockList; block != NULL; block = next(block)) {
1495    // Iterate over all extant monitors - Scavenge all idle monitors.
1496    assert(block->object() == CHAINMARKER, "must be a block header");
1497    nInCirculation += _BLOCKSIZE;
1498    for (int i = 1; i < _BLOCKSIZE; i++) {
1499      ObjectMonitor* mid = &block[i];
1500      oop obj = (oop) mid->object();
1501
1502      if (obj == NULL) {
1503        // The monitor is not associated with an object.
1504        // The monitor should either be a thread-specific private
1505        // free list or the global free list.
1506        // obj == NULL IMPLIES mid->is_busy() == 0
1507        guarantee(!mid->is_busy(), "invariant");
1508        continue;
1509      }
1510      deflated = deflate_monitor(mid, obj, &FreeHead, &FreeTail);
1511
1512      if (deflated) {
1513        mid->FreeNext = NULL;
1514        nScavenged++;
1515      } else {
1516        nInuse++;
1517      }
1518    }
1519  }
1520
1521  MonitorFreeCount += nScavenged;
1522
1523  // Consider: audit gFreeList to ensure that MonitorFreeCount and list agree.
1524
1525  if (ObjectMonitor::Knob_Verbose) {
1526    ::printf("Deflate: InCirc=%d InUse=%d Scavenged=%d ForceMonitorScavenge=%d : pop=%d free=%d\n",
1527             nInCirculation, nInuse, nScavenged, ForceMonitorScavenge,
1528             MonitorPopulation, MonitorFreeCount);
1529    ::fflush(stdout);
1530  }
1531
1532  ForceMonitorScavenge = 0;    // Reset
1533
1534  // Move the scavenged monitors back to the global free list.
1535  if (FreeHead != NULL) {
1536    guarantee(FreeTail != NULL && nScavenged > 0, "invariant");
1537    assert(FreeTail->FreeNext == NULL, "invariant");
1538    // constant-time list splice - prepend scavenged segment to gFreeList
1539    FreeTail->FreeNext = gFreeList;
1540    gFreeList = FreeHead;
1541  }
1542  Thread::muxRelease(&ListLock);
1543
1544  if (ObjectMonitor::_sync_Deflations != NULL) ObjectMonitor::_sync_Deflations->inc(nScavenged);
1545  if (ObjectMonitor::_sync_MonExtant  != NULL) ObjectMonitor::_sync_MonExtant ->set_value(nInCirculation);
1546
1547  // TODO: Add objectMonitor leak detection.
1548  // Audit/inventory the objectMonitors -- make sure they're all accounted for.
1549  GVars.stwRandom = os::random();
1550  GVars.stwCycle++;
1551}
1552
1553// Monitor cleanup on JavaThread::exit
1554
1555// Iterate through monitor cache and attempt to release thread's monitors
1556// Gives up on a particular monitor if an exception occurs, but continues
1557// the overall iteration, swallowing the exception.
1558class ReleaseJavaMonitorsClosure: public MonitorClosure {
1559 private:
1560  TRAPS;
1561
1562 public:
1563  ReleaseJavaMonitorsClosure(Thread* thread) : THREAD(thread) {}
1564  void do_monitor(ObjectMonitor* mid) {
1565    if (mid->owner() == THREAD) {
1566      (void)mid->complete_exit(CHECK);
1567    }
1568  }
1569};
1570
1571// Release all inflated monitors owned by THREAD.  Lightweight monitors are
1572// ignored.  This is meant to be called during JNI thread detach which assumes
1573// all remaining monitors are heavyweight.  All exceptions are swallowed.
1574// Scanning the extant monitor list can be time consuming.
1575// A simple optimization is to add a per-thread flag that indicates a thread
1576// called jni_monitorenter() during its lifetime.
1577//
1578// Instead of No_Savepoint_Verifier it might be cheaper to
1579// use an idiom of the form:
1580//   auto int tmp = SafepointSynchronize::_safepoint_counter ;
1581//   <code that must not run at safepoint>
1582//   guarantee (((tmp ^ _safepoint_counter) | (tmp & 1)) == 0) ;
1583// Since the tests are extremely cheap we could leave them enabled
1584// for normal product builds.
1585
1586void ObjectSynchronizer::release_monitors_owned_by_thread(TRAPS) {
1587  assert(THREAD == JavaThread::current(), "must be current Java thread");
1588  No_Safepoint_Verifier nsv;
1589  ReleaseJavaMonitorsClosure rjmc(THREAD);
1590  Thread::muxAcquire(&ListLock, "release_monitors_owned_by_thread");
1591  ObjectSynchronizer::monitors_iterate(&rjmc);
1592  Thread::muxRelease(&ListLock);
1593  THREAD->clear_pending_exception();
1594}
1595
1596//------------------------------------------------------------------------------
1597// Debugging code
1598
1599void ObjectSynchronizer::sanity_checks(const bool verbose,
1600                                       const uint cache_line_size,
1601                                       int *error_cnt_ptr,
1602                                       int *warning_cnt_ptr) {
1603  u_char *addr_begin      = (u_char*)&GVars;
1604  u_char *addr_stwRandom  = (u_char*)&GVars.stwRandom;
1605  u_char *addr_hcSequence = (u_char*)&GVars.hcSequence;
1606
1607  if (verbose) {
1608    tty->print_cr("INFO: sizeof(SharedGlobals)=" SIZE_FORMAT,
1609                  sizeof(SharedGlobals));
1610  }
1611
1612  uint offset_stwRandom = (uint)(addr_stwRandom - addr_begin);
1613  if (verbose) tty->print_cr("INFO: offset(stwRandom)=%u", offset_stwRandom);
1614
1615  uint offset_hcSequence = (uint)(addr_hcSequence - addr_begin);
1616  if (verbose) {
1617    tty->print_cr("INFO: offset(_hcSequence)=%u", offset_hcSequence);
1618  }
1619
1620  if (cache_line_size != 0) {
1621    // We were able to determine the L1 data cache line size so
1622    // do some cache line specific sanity checks
1623
1624    if (offset_stwRandom < cache_line_size) {
1625      tty->print_cr("WARNING: the SharedGlobals.stwRandom field is closer "
1626                    "to the struct beginning than a cache line which permits "
1627                    "false sharing.");
1628      (*warning_cnt_ptr)++;
1629    }
1630
1631    if ((offset_hcSequence - offset_stwRandom) < cache_line_size) {
1632      tty->print_cr("WARNING: the SharedGlobals.stwRandom and "
1633                    "SharedGlobals.hcSequence fields are closer than a cache "
1634                    "line which permits false sharing.");
1635      (*warning_cnt_ptr)++;
1636    }
1637
1638    if ((sizeof(SharedGlobals) - offset_hcSequence) < cache_line_size) {
1639      tty->print_cr("WARNING: the SharedGlobals.hcSequence field is closer "
1640                    "to the struct end than a cache line which permits false "
1641                    "sharing.");
1642      (*warning_cnt_ptr)++;
1643    }
1644  }
1645}
1646
1647#ifndef PRODUCT
1648
1649// Verify all monitors in the monitor cache, the verification is weak.
1650void ObjectSynchronizer::verify() {
1651  ObjectMonitor* block = gBlockList;
1652  ObjectMonitor* mid;
1653  while (block) {
1654    assert(block->object() == CHAINMARKER, "must be a block header");
1655    for (int i = 1; i < _BLOCKSIZE; i++) {
1656      mid = block + i;
1657      oop object = (oop) mid->object();
1658      if (object != NULL) {
1659        mid->verify();
1660      }
1661    }
1662    block = (ObjectMonitor*) block->FreeNext;
1663  }
1664}
1665
1666// Check if monitor belongs to the monitor cache
1667// The list is grow-only so it's *relatively* safe to traverse
1668// the list of extant blocks without taking a lock.
1669
1670int ObjectSynchronizer::verify_objmon_isinpool(ObjectMonitor *monitor) {
1671  ObjectMonitor* block = gBlockList;
1672
1673  while (block) {
1674    assert(block->object() == CHAINMARKER, "must be a block header");
1675    if (monitor > &block[0] && monitor < &block[_BLOCKSIZE]) {
1676      address mon = (address) monitor;
1677      address blk = (address) block;
1678      size_t diff = mon - blk;
1679      assert((diff % sizeof(ObjectMonitor)) == 0, "check");
1680      return 1;
1681    }
1682    block = (ObjectMonitor*) block->FreeNext;
1683  }
1684  return 0;
1685}
1686
1687#endif
1688