src/hotspot/share/runtime/objectMonitor.hpp
author coleenp
Thu, 10 Jan 2019 15:13:51 -0500
changeset 53244 9807daeb47c4
parent 51960 bb1d5dd64897
child 53557 4cfe0e5a3b79
permissions -rw-r--r--
8216167: Update include guards to reflect correct directories Summary: Use script and some manual fixup to fix directores names in include guards. Reviewed-by: lfoltan, eosterlund, kbarrett
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
     1
/*
53244
9807daeb47c4 8216167: Update include guards to reflect correct directories
coleenp
parents: 51960
diff changeset
     2
 * Copyright (c) 1998, 2019, Oracle and/or its affiliates. All rights reserved.
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
489c9b5090e2 Initial load
duke
parents:
diff changeset
     4
 *
489c9b5090e2 Initial load
duke
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
489c9b5090e2 Initial load
duke
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
489c9b5090e2 Initial load
duke
parents:
diff changeset
     7
 * published by the Free Software Foundation.
489c9b5090e2 Initial load
duke
parents:
diff changeset
     8
 *
489c9b5090e2 Initial load
duke
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
489c9b5090e2 Initial load
duke
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
489c9b5090e2 Initial load
duke
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
489c9b5090e2 Initial load
duke
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
489c9b5090e2 Initial load
duke
parents:
diff changeset
    13
 * accompanied this code).
489c9b5090e2 Initial load
duke
parents:
diff changeset
    14
 *
489c9b5090e2 Initial load
duke
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
489c9b5090e2 Initial load
duke
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
489c9b5090e2 Initial load
duke
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
489c9b5090e2 Initial load
duke
parents:
diff changeset
    18
 *
5547
f4b087cbb361 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 1
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
f4b087cbb361 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 1
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
f4b087cbb361 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 1
diff changeset
    21
 * questions.
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    22
 *
489c9b5090e2 Initial load
duke
parents:
diff changeset
    23
 */
489c9b5090e2 Initial load
duke
parents:
diff changeset
    24
53244
9807daeb47c4 8216167: Update include guards to reflect correct directories
coleenp
parents: 51960
diff changeset
    25
#ifndef SHARE_RUNTIME_OBJECTMONITOR_HPP
9807daeb47c4 8216167: Update include guards to reflect correct directories
coleenp
parents: 51960
diff changeset
    26
#define SHARE_RUNTIME_OBJECTMONITOR_HPP
7397
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 6975
diff changeset
    27
48157
7c4d43c26352 8192061: Clean up allocation.inline.hpp includes
stefank
parents: 48115
diff changeset
    28
#include "memory/allocation.hpp"
27165
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
    29
#include "memory/padded.hpp"
7397
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 6975
diff changeset
    30
#include "runtime/os.hpp"
7408
c04a5c989f26 7003125: precompiled.hpp is included when precompiled headers are not used
stefank
parents: 7397
diff changeset
    31
#include "runtime/park.hpp"
7397
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 6975
diff changeset
    32
#include "runtime/perfData.hpp"
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 6975
diff changeset
    33
49449
ef5d5d343e2a 8199263: Split interfaceSupport.hpp to not require including .inline.hpp files
coleenp
parents: 49038
diff changeset
    34
class ObjectMonitor;
ef5d5d343e2a 8199263: Split interfaceSupport.hpp to not require including .inline.hpp files
coleenp
parents: 49038
diff changeset
    35
6975
dc9b63952682 6988353: refactor contended sync subsystem
acorn
parents: 5547
diff changeset
    36
// ObjectWaiter serves as a "proxy" or surrogate thread.
dc9b63952682 6988353: refactor contended sync subsystem
acorn
parents: 5547
diff changeset
    37
// TODO-FIXME: Eliminate ObjectWaiter and use the thread-specific
dc9b63952682 6988353: refactor contended sync subsystem
acorn
parents: 5547
diff changeset
    38
// ParkEvent instead.  Beware, however, that the JVMTI code
dc9b63952682 6988353: refactor contended sync subsystem
acorn
parents: 5547
diff changeset
    39
// knows about ObjectWaiters, so we'll have to reconcile that code.
dc9b63952682 6988353: refactor contended sync subsystem
acorn
parents: 5547
diff changeset
    40
// See next_waiter(), first_waiter(), etc.
dc9b63952682 6988353: refactor contended sync subsystem
acorn
parents: 5547
diff changeset
    41
dc9b63952682 6988353: refactor contended sync subsystem
acorn
parents: 5547
diff changeset
    42
class ObjectWaiter : public StackObj {
dc9b63952682 6988353: refactor contended sync subsystem
acorn
parents: 5547
diff changeset
    43
 public:
25064
244218e6ec0a 8046758: cleanup non-indent white space issues prior to Contended Locking cleanup bucket
dcubed
parents: 22551
diff changeset
    44
  enum TStates { TS_UNDEF, TS_READY, TS_RUN, TS_WAIT, TS_ENTER, TS_CXQ };
244218e6ec0a 8046758: cleanup non-indent white space issues prior to Contended Locking cleanup bucket
dcubed
parents: 22551
diff changeset
    45
  enum Sorted  { PREPEND, APPEND, SORTED };
6975
dc9b63952682 6988353: refactor contended sync subsystem
acorn
parents: 5547
diff changeset
    46
  ObjectWaiter * volatile _next;
dc9b63952682 6988353: refactor contended sync subsystem
acorn
parents: 5547
diff changeset
    47
  ObjectWaiter * volatile _prev;
dc9b63952682 6988353: refactor contended sync subsystem
acorn
parents: 5547
diff changeset
    48
  Thread*       _thread;
18025
b7bcf7497f93 8005849: JEP 167: Event-Based JVM Tracing
sla
parents: 17376
diff changeset
    49
  jlong         _notifier_tid;
6975
dc9b63952682 6988353: refactor contended sync subsystem
acorn
parents: 5547
diff changeset
    50
  ParkEvent *   _event;
25064
244218e6ec0a 8046758: cleanup non-indent white space issues prior to Contended Locking cleanup bucket
dcubed
parents: 22551
diff changeset
    51
  volatile int  _notified;
244218e6ec0a 8046758: cleanup non-indent white space issues prior to Contended Locking cleanup bucket
dcubed
parents: 22551
diff changeset
    52
  volatile TStates TState;
244218e6ec0a 8046758: cleanup non-indent white space issues prior to Contended Locking cleanup bucket
dcubed
parents: 22551
diff changeset
    53
  Sorted        _Sorted;           // List placement disposition
244218e6ec0a 8046758: cleanup non-indent white space issues prior to Contended Locking cleanup bucket
dcubed
parents: 22551
diff changeset
    54
  bool          _active;           // Contention monitoring is enabled
6975
dc9b63952682 6988353: refactor contended sync subsystem
acorn
parents: 5547
diff changeset
    55
 public:
dc9b63952682 6988353: refactor contended sync subsystem
acorn
parents: 5547
diff changeset
    56
  ObjectWaiter(Thread* thread);
dc9b63952682 6988353: refactor contended sync subsystem
acorn
parents: 5547
diff changeset
    57
dc9b63952682 6988353: refactor contended sync subsystem
acorn
parents: 5547
diff changeset
    58
  void wait_reenter_begin(ObjectMonitor *mon);
dc9b63952682 6988353: refactor contended sync subsystem
acorn
parents: 5547
diff changeset
    59
  void wait_reenter_end(ObjectMonitor *mon);
dc9b63952682 6988353: refactor contended sync subsystem
acorn
parents: 5547
diff changeset
    60
};
dc9b63952682 6988353: refactor contended sync subsystem
acorn
parents: 5547
diff changeset
    61
27165
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
    62
// The ObjectMonitor class implements the heavyweight version of a
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
    63
// JavaMonitor. The lightweight BasicLock/stack lock version has been
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
    64
// inflated into an ObjectMonitor. This inflation is typically due to
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
    65
// contention or use of Object.wait().
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
    66
//
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
    67
// WARNING: This is a very sensitive and fragile class. DO NOT make any
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
    68
// changes unless you are fully aware of the underlying semantics.
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
    69
//
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
    70
// Class JvmtiRawMonitor currently inherits from ObjectMonitor so
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
    71
// changes in this class must be careful to not break JvmtiRawMonitor.
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
    72
// These two subsystems should be separated.
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
    73
//
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
    74
// ObjectMonitor Layout Overview/Highlights/Restrictions:
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    75
//
27165
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
    76
// - The _header field must be at offset 0 because the displaced header
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
    77
//   from markOop is stored there. We do not want markOop.hpp to include
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
    78
//   ObjectMonitor.hpp to avoid exposing ObjectMonitor everywhere. This
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
    79
//   means that ObjectMonitor cannot inherit from any other class nor can
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
    80
//   it use any virtual member functions. This restriction is critical to
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
    81
//   the proper functioning of the VM.
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
    82
// - The _header and _owner fields should be separated by enough space
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
    83
//   to avoid false sharing due to parallel access by different threads.
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
    84
//   This is an advisory recommendation.
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
    85
// - The general layout of the fields in ObjectMonitor is:
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
    86
//     _header
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
    87
//     <lightly_used_fields>
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
    88
//     <optional padding>
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
    89
//     _owner
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
    90
//     <remaining_fields>
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
    91
// - The VM assumes write ordering and machine word alignment with
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
    92
//   respect to the _owner field and the <remaining_fields> that can
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
    93
//   be read in parallel by other threads.
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
    94
// - Generally fields that are accessed closely together in time should
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
    95
//   be placed proximally in space to promote data cache locality. That
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
    96
//   is, temporal locality should condition spatial locality.
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
    97
// - We have to balance avoiding false sharing with excessive invalidation
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
    98
//   from coherence traffic. As such, we try to cluster fields that tend
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
    99
//   to be _written_ at approximately the same time onto the same data
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
   100
//   cache line.
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
   101
// - We also have to balance the natural tension between minimizing
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
   102
//   single threaded capacity misses with excessive multi-threaded
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
   103
//   coherency misses. There is no single optimal layout for both
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
   104
//   single-threaded and multi-threaded environments.
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
   105
//
51258
2ce72467c4e8 8171157: Convert ObjectMonitor_test to GTest
dcubed
parents: 50113
diff changeset
   106
// - See TEST_VM(ObjectMonitor, sanity) gtest for how critical restrictions are
2ce72467c4e8 8171157: Convert ObjectMonitor_test to GTest
dcubed
parents: 50113
diff changeset
   107
//   enforced.
27165
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
   108
// - Adjacent ObjectMonitors should be separated by enough space to avoid
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
   109
//   false sharing. This is handled by the ObjectMonitor allocation code
51258
2ce72467c4e8 8171157: Convert ObjectMonitor_test to GTest
dcubed
parents: 50113
diff changeset
   110
//   in synchronizer.cpp. Also see TEST_VM(SynchronizerTest, sanity) gtest.
27165
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
   111
//
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
   112
// Futures notes:
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
   113
//   - Separating _owner from the <remaining_fields> by enough space to
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
   114
//     avoid false sharing might be profitable. Given
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
   115
//     http://blogs.oracle.com/dave/entry/cas_and_cache_trivia_invalidate
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
   116
//     we know that the CAS in monitorenter will invalidate the line
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
   117
//     underlying _owner. We want to avoid an L1 data cache miss on that
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
   118
//     same line for monitorexit. Putting these <remaining_fields>:
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
   119
//     _recursions, _EntryList, _cxq, and _succ, all of which may be
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
   120
//     fetched in the inflated unlock path, on a different cache line
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
   121
//     would make them immune to CAS-based invalidation from the _owner
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
   122
//     field.
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
   123
//
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
   124
//   - The _recursions field should be of type int, or int32_t but not
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
   125
//     intptr_t. There's no reason to use a 64-bit type for this field
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
   126
//     in a 64-bit JVM.
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   127
489c9b5090e2 Initial load
duke
parents:
diff changeset
   128
class ObjectMonitor {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   129
 public:
489c9b5090e2 Initial load
duke
parents:
diff changeset
   130
  enum {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   131
    OM_OK,                    // no error
489c9b5090e2 Initial load
duke
parents:
diff changeset
   132
    OM_SYSTEM_ERROR,          // operating system error
489c9b5090e2 Initial load
duke
parents:
diff changeset
   133
    OM_ILLEGAL_MONITOR_STATE, // IllegalMonitorStateException
489c9b5090e2 Initial load
duke
parents:
diff changeset
   134
    OM_INTERRUPTED,           // Thread.interrupt()
489c9b5090e2 Initial load
duke
parents:
diff changeset
   135
    OM_TIMED_OUT              // Object.wait() timed out
489c9b5090e2 Initial load
duke
parents:
diff changeset
   136
  };
489c9b5090e2 Initial load
duke
parents:
diff changeset
   137
27165
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
   138
 private:
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
   139
  friend class ObjectSynchronizer;
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
   140
  friend class ObjectWaiter;
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
   141
  friend class VMStructs;
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
   142
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
   143
  volatile markOop   _header;       // displaced object header word - mark
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
   144
  void*     volatile _object;       // backward object pointer - strong root
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   145
 public:
47634
6a0c42c40cd1 8188220: Remove Atomic::*_ptr() uses and overloads from hotspot
coleenp
parents: 47216
diff changeset
   146
  ObjectMonitor*     FreeNext;      // Free list linkage
27165
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
   147
 private:
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
   148
  DEFINE_PAD_MINUS_SIZE(0, DEFAULT_CACHE_LINE_SIZE,
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
   149
                        sizeof(volatile markOop) + sizeof(void * volatile) +
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
   150
                        sizeof(ObjectMonitor *));
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
   151
 protected:                         // protected for JvmtiRawMonitor
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
   152
  void *  volatile _owner;          // pointer to owning thread OR BasicLock
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
   153
  volatile jlong _previous_owner_tid;  // thread id of the previous owner of the monitor
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
   154
  volatile intptr_t  _recursions;   // recursion count, 0 for first entry
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
   155
  ObjectWaiter * volatile _EntryList; // Threads blocked on entry or reentry.
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
   156
                                      // The list is actually composed of WaitNodes,
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
   157
                                      // acting as proxies for Threads.
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
   158
 private:
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
   159
  ObjectWaiter * volatile _cxq;     // LL of recently-arrived threads blocked on entry.
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
   160
  Thread * volatile _succ;          // Heir presumptive thread - used for futile wakeup throttling
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
   161
  Thread * volatile _Responsible;
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
   162
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
   163
  volatile int _Spinner;            // for exit->spinner handoff optimization
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
   164
  volatile int _SpinDuration;
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
   165
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
   166
  volatile jint  _count;            // reference count to prevent reclamation/deflation
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
   167
                                    // at stop-the-world time.  See deflate_idle_monitors().
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
   168
                                    // _count is approximately |_WaitSet| + |_EntryList|
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
   169
 protected:
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
   170
  ObjectWaiter * volatile _WaitSet; // LL of threads wait()ing on the monitor
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
   171
  volatile jint  _waiters;          // number of waiting threads
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
   172
 private:
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
   173
  volatile int _WaitSetLock;        // protects Wait Queue - simple spinlock
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
   174
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
   175
 public:
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
   176
  static void Initialize();
32614
b7b2407bc7e5 8049304: race between VM_Exit and _sync_FutileWakeups->inc()
dcubed
parents: 31856
diff changeset
   177
b7b2407bc7e5 8049304: race between VM_Exit and _sync_FutileWakeups->inc()
dcubed
parents: 31856
diff changeset
   178
  // Only perform a PerfData operation if the PerfData object has been
b7b2407bc7e5 8049304: race between VM_Exit and _sync_FutileWakeups->inc()
dcubed
parents: 31856
diff changeset
   179
  // allocated and if the PerfDataManager has not freed the PerfData
b7b2407bc7e5 8049304: race between VM_Exit and _sync_FutileWakeups->inc()
dcubed
parents: 31856
diff changeset
   180
  // objects which can happen at normal VM shutdown.
b7b2407bc7e5 8049304: race between VM_Exit and _sync_FutileWakeups->inc()
dcubed
parents: 31856
diff changeset
   181
  //
b7b2407bc7e5 8049304: race between VM_Exit and _sync_FutileWakeups->inc()
dcubed
parents: 31856
diff changeset
   182
  #define OM_PERFDATA_OP(f, op_str)              \
b7b2407bc7e5 8049304: race between VM_Exit and _sync_FutileWakeups->inc()
dcubed
parents: 31856
diff changeset
   183
    do {                                         \
b7b2407bc7e5 8049304: race between VM_Exit and _sync_FutileWakeups->inc()
dcubed
parents: 31856
diff changeset
   184
      if (ObjectMonitor::_sync_ ## f != NULL &&  \
b7b2407bc7e5 8049304: race between VM_Exit and _sync_FutileWakeups->inc()
dcubed
parents: 31856
diff changeset
   185
          PerfDataManager::has_PerfData()) {     \
b7b2407bc7e5 8049304: race between VM_Exit and _sync_FutileWakeups->inc()
dcubed
parents: 31856
diff changeset
   186
        ObjectMonitor::_sync_ ## f->op_str;      \
b7b2407bc7e5 8049304: race between VM_Exit and _sync_FutileWakeups->inc()
dcubed
parents: 31856
diff changeset
   187
      }                                          \
b7b2407bc7e5 8049304: race between VM_Exit and _sync_FutileWakeups->inc()
dcubed
parents: 31856
diff changeset
   188
    } while (0)
b7b2407bc7e5 8049304: race between VM_Exit and _sync_FutileWakeups->inc()
dcubed
parents: 31856
diff changeset
   189
27165
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
   190
  static PerfCounter * _sync_ContendedLockAttempts;
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
   191
  static PerfCounter * _sync_FutileWakeups;
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
   192
  static PerfCounter * _sync_Parks;
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
   193
  static PerfCounter * _sync_Notifications;
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
   194
  static PerfCounter * _sync_Inflations;
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
   195
  static PerfCounter * _sync_Deflations;
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
   196
  static PerfLongVariable * _sync_MonExtant;
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
   197
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
   198
  static int Knob_SpinLimit;
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
   199
48157
7c4d43c26352 8192061: Clean up allocation.inline.hpp includes
stefank
parents: 48115
diff changeset
   200
  void* operator new (size_t size) throw();
7c4d43c26352 8192061: Clean up allocation.inline.hpp includes
stefank
parents: 48115
diff changeset
   201
  void* operator new[] (size_t size) throw();
7c4d43c26352 8192061: Clean up allocation.inline.hpp includes
stefank
parents: 48115
diff changeset
   202
  void operator delete(void* p);
7c4d43c26352 8192061: Clean up allocation.inline.hpp includes
stefank
parents: 48115
diff changeset
   203
  void operator delete[] (void *p);
27165
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
   204
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   205
  // TODO-FIXME: the "offset" routines should return a type of off_t instead of int ...
489c9b5090e2 Initial load
duke
parents:
diff changeset
   206
  // ByteSize would also be an appropriate type.
26684
d1221849ea3d 8057109: manual cleanup of white space issues prior to Contended Locking reorder and cache line bucket
dcubed
parents: 26683
diff changeset
   207
  static int header_offset_in_bytes()      { return offset_of(ObjectMonitor, _header); }
d1221849ea3d 8057109: manual cleanup of white space issues prior to Contended Locking reorder and cache line bucket
dcubed
parents: 26683
diff changeset
   208
  static int object_offset_in_bytes()      { return offset_of(ObjectMonitor, _object); }
d1221849ea3d 8057109: manual cleanup of white space issues prior to Contended Locking reorder and cache line bucket
dcubed
parents: 26683
diff changeset
   209
  static int owner_offset_in_bytes()       { return offset_of(ObjectMonitor, _owner); }
d1221849ea3d 8057109: manual cleanup of white space issues prior to Contended Locking reorder and cache line bucket
dcubed
parents: 26683
diff changeset
   210
  static int count_offset_in_bytes()       { return offset_of(ObjectMonitor, _count); }
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   211
  static int recursions_offset_in_bytes()  { return offset_of(ObjectMonitor, _recursions); }
26684
d1221849ea3d 8057109: manual cleanup of white space issues prior to Contended Locking reorder and cache line bucket
dcubed
parents: 26683
diff changeset
   212
  static int cxq_offset_in_bytes()         { return offset_of(ObjectMonitor, _cxq); }
d1221849ea3d 8057109: manual cleanup of white space issues prior to Contended Locking reorder and cache line bucket
dcubed
parents: 26683
diff changeset
   213
  static int succ_offset_in_bytes()        { return offset_of(ObjectMonitor, _succ); }
d1221849ea3d 8057109: manual cleanup of white space issues prior to Contended Locking reorder and cache line bucket
dcubed
parents: 26683
diff changeset
   214
  static int EntryList_offset_in_bytes()   { return offset_of(ObjectMonitor, _EntryList); }
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   215
27608
80d91e264baf 8062851: cleanup ObjectMonitor offset adjustments
dcubed
parents: 27165
diff changeset
   216
  // ObjectMonitor references can be ORed with markOopDesc::monitor_value
80d91e264baf 8062851: cleanup ObjectMonitor offset adjustments
dcubed
parents: 27165
diff changeset
   217
  // as part of the ObjectMonitor tagging mechanism. When we combine an
80d91e264baf 8062851: cleanup ObjectMonitor offset adjustments
dcubed
parents: 27165
diff changeset
   218
  // ObjectMonitor reference with an offset, we need to remove the tag
80d91e264baf 8062851: cleanup ObjectMonitor offset adjustments
dcubed
parents: 27165
diff changeset
   219
  // value in order to generate the proper address.
80d91e264baf 8062851: cleanup ObjectMonitor offset adjustments
dcubed
parents: 27165
diff changeset
   220
  //
80d91e264baf 8062851: cleanup ObjectMonitor offset adjustments
dcubed
parents: 27165
diff changeset
   221
  // We can either adjust the ObjectMonitor reference and then add the
80d91e264baf 8062851: cleanup ObjectMonitor offset adjustments
dcubed
parents: 27165
diff changeset
   222
  // offset or we can adjust the offset that is added to the ObjectMonitor
80d91e264baf 8062851: cleanup ObjectMonitor offset adjustments
dcubed
parents: 27165
diff changeset
   223
  // reference. The latter avoids an AGI (Address Generation Interlock)
80d91e264baf 8062851: cleanup ObjectMonitor offset adjustments
dcubed
parents: 27165
diff changeset
   224
  // stall so the helper macro adjusts the offset value that is returned
80d91e264baf 8062851: cleanup ObjectMonitor offset adjustments
dcubed
parents: 27165
diff changeset
   225
  // to the ObjectMonitor reference manipulation code:
80d91e264baf 8062851: cleanup ObjectMonitor offset adjustments
dcubed
parents: 27165
diff changeset
   226
  //
80d91e264baf 8062851: cleanup ObjectMonitor offset adjustments
dcubed
parents: 27165
diff changeset
   227
  #define OM_OFFSET_NO_MONITOR_VALUE_TAG(f) \
80d91e264baf 8062851: cleanup ObjectMonitor offset adjustments
dcubed
parents: 27165
diff changeset
   228
    ((ObjectMonitor::f ## _offset_in_bytes()) - markOopDesc::monitor_value)
80d91e264baf 8062851: cleanup ObjectMonitor offset adjustments
dcubed
parents: 27165
diff changeset
   229
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   230
  markOop   header() const;
47634
6a0c42c40cd1 8188220: Remove Atomic::*_ptr() uses and overloads from hotspot
coleenp
parents: 47216
diff changeset
   231
  volatile markOop* header_addr();
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   232
  void      set_header(markOop hdr);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   233
6975
dc9b63952682 6988353: refactor contended sync subsystem
acorn
parents: 5547
diff changeset
   234
  intptr_t is_busy() const {
dc9b63952682 6988353: refactor contended sync subsystem
acorn
parents: 5547
diff changeset
   235
    // TODO-FIXME: merge _count and _waiters.
dc9b63952682 6988353: refactor contended sync subsystem
acorn
parents: 5547
diff changeset
   236
    // TODO-FIXME: assert _owner == null implies _recursions = 0
dc9b63952682 6988353: refactor contended sync subsystem
acorn
parents: 5547
diff changeset
   237
    // TODO-FIXME: assert _WaitSet != null implies _count > 0
25064
244218e6ec0a 8046758: cleanup non-indent white space issues prior to Contended Locking cleanup bucket
dcubed
parents: 22551
diff changeset
   238
    return _count|_waiters|intptr_t(_owner)|intptr_t(_cxq)|intptr_t(_EntryList);
6975
dc9b63952682 6988353: refactor contended sync subsystem
acorn
parents: 5547
diff changeset
   239
  }
dc9b63952682 6988353: refactor contended sync subsystem
acorn
parents: 5547
diff changeset
   240
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   241
  intptr_t  is_entered(Thread* current) const;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   242
489c9b5090e2 Initial load
duke
parents:
diff changeset
   243
  void*     owner() const;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   244
  void      set_owner(void* owner);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   245
27165
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
   246
  jint      waiters() const;
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   247
27165
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
   248
  jint      count() const;
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
   249
  void      set_count(jint count);
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
   250
  jint      contentions() const;
6975
dc9b63952682 6988353: refactor contended sync subsystem
acorn
parents: 5547
diff changeset
   251
  intptr_t  recursions() const                                         { return _recursions; }
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   252
27165
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
   253
  // JVM/TI GetObjectMonitorUsage() needs this:
6975
dc9b63952682 6988353: refactor contended sync subsystem
acorn
parents: 5547
diff changeset
   254
  ObjectWaiter* first_waiter()                                         { return _WaitSet; }
dc9b63952682 6988353: refactor contended sync subsystem
acorn
parents: 5547
diff changeset
   255
  ObjectWaiter* next_waiter(ObjectWaiter* o)                           { return o->_next; }
dc9b63952682 6988353: refactor contended sync subsystem
acorn
parents: 5547
diff changeset
   256
  Thread* thread_of_waiter(ObjectWaiter* o)                            { return o->_thread; }
dc9b63952682 6988353: refactor contended sync subsystem
acorn
parents: 5547
diff changeset
   257
27165
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
   258
 protected:
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
   259
  // We don't typically expect or want the ctors or dtors to run.
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
   260
  // normal ObjectMonitors are type-stable and immortal.
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
   261
  ObjectMonitor() { ::memset((void *)this, 0, sizeof(*this)); }
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   262
6975
dc9b63952682 6988353: refactor contended sync subsystem
acorn
parents: 5547
diff changeset
   263
  ~ObjectMonitor() {
26683
a02753d5a0b2 8057107: cleanup indent white space issues prior to Contended Locking reorder and cache line bucket
dcubed
parents: 25633
diff changeset
   264
    // TODO: Add asserts ...
a02753d5a0b2 8057107: cleanup indent white space issues prior to Contended Locking reorder and cache line bucket
dcubed
parents: 25633
diff changeset
   265
    // _cxq == 0 _succ == NULL _owner == NULL _waiters == 0
a02753d5a0b2 8057107: cleanup indent white space issues prior to Contended Locking reorder and cache line bucket
dcubed
parents: 25633
diff changeset
   266
    // _count == 0 _EntryList  == NULL etc
6975
dc9b63952682 6988353: refactor contended sync subsystem
acorn
parents: 5547
diff changeset
   267
  }
dc9b63952682 6988353: refactor contended sync subsystem
acorn
parents: 5547
diff changeset
   268
26683
a02753d5a0b2 8057107: cleanup indent white space issues prior to Contended Locking reorder and cache line bucket
dcubed
parents: 25633
diff changeset
   269
 private:
25064
244218e6ec0a 8046758: cleanup non-indent white space issues prior to Contended Locking cleanup bucket
dcubed
parents: 22551
diff changeset
   270
  void Recycle() {
6975
dc9b63952682 6988353: refactor contended sync subsystem
acorn
parents: 5547
diff changeset
   271
    // TODO: add stronger asserts ...
dc9b63952682 6988353: refactor contended sync subsystem
acorn
parents: 5547
diff changeset
   272
    // _cxq == 0 _succ == NULL _owner == NULL _waiters == 0
dc9b63952682 6988353: refactor contended sync subsystem
acorn
parents: 5547
diff changeset
   273
    // _count == 0 EntryList  == NULL
dc9b63952682 6988353: refactor contended sync subsystem
acorn
parents: 5547
diff changeset
   274
    // _recursions == 0 _WaitSet == NULL
27165
785a8d56024c 8049737: Contended Locking reorder and cache line bucket
dcubed
parents: 26684
diff changeset
   275
    assert(((is_busy()|_recursions) == 0), "freeing inuse monitor");
25064
244218e6ec0a 8046758: cleanup non-indent white space issues prior to Contended Locking cleanup bucket
dcubed
parents: 22551
diff changeset
   276
    _succ          = NULL;
244218e6ec0a 8046758: cleanup non-indent white space issues prior to Contended Locking cleanup bucket
dcubed
parents: 22551
diff changeset
   277
    _EntryList     = NULL;
244218e6ec0a 8046758: cleanup non-indent white space issues prior to Contended Locking cleanup bucket
dcubed
parents: 22551
diff changeset
   278
    _cxq           = NULL;
244218e6ec0a 8046758: cleanup non-indent white space issues prior to Contended Locking cleanup bucket
dcubed
parents: 22551
diff changeset
   279
    _WaitSet       = NULL;
244218e6ec0a 8046758: cleanup non-indent white space issues prior to Contended Locking cleanup bucket
dcubed
parents: 22551
diff changeset
   280
    _recursions    = 0;
6975
dc9b63952682 6988353: refactor contended sync subsystem
acorn
parents: 5547
diff changeset
   281
  }
dc9b63952682 6988353: refactor contended sync subsystem
acorn
parents: 5547
diff changeset
   282
26683
a02753d5a0b2 8057107: cleanup indent white space issues prior to Contended Locking reorder and cache line bucket
dcubed
parents: 25633
diff changeset
   283
 public:
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   284
489c9b5090e2 Initial load
duke
parents:
diff changeset
   285
  void*     object() const;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   286
  void*     object_addr();
489c9b5090e2 Initial load
duke
parents:
diff changeset
   287
  void      set_object(void* obj);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   288
489c9b5090e2 Initial load
duke
parents:
diff changeset
   289
  bool      check(TRAPS);       // true if the thread owns the monitor.
489c9b5090e2 Initial load
duke
parents:
diff changeset
   290
  void      check_slow(TRAPS);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   291
  void      clear();
489c9b5090e2 Initial load
duke
parents:
diff changeset
   292
489c9b5090e2 Initial load
duke
parents:
diff changeset
   293
  void      enter(TRAPS);
18025
b7bcf7497f93 8005849: JEP 167: Event-Based JVM Tracing
sla
parents: 17376
diff changeset
   294
  void      exit(bool not_suspended, TRAPS);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   295
  void      wait(jlong millis, bool interruptable, TRAPS);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   296
  void      notify(TRAPS);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   297
  void      notifyAll(TRAPS);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   298
489c9b5090e2 Initial load
duke
parents:
diff changeset
   299
// Use the following at your own risk
489c9b5090e2 Initial load
duke
parents:
diff changeset
   300
  intptr_t  complete_exit(TRAPS);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   301
  void      reenter(intptr_t recursions, TRAPS);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   302
489c9b5090e2 Initial load
duke
parents:
diff changeset
   303
 private:
25064
244218e6ec0a 8046758: cleanup non-indent white space issues prior to Contended Locking cleanup bucket
dcubed
parents: 22551
diff changeset
   304
  void      AddWaiter(ObjectWaiter * waiter);
31856
614d6786ba55 8075171: Contended Locking fast notify bucket
dcubed
parents: 31782
diff changeset
   305
  void      INotify(Thread * Self);
25064
244218e6ec0a 8046758: cleanup non-indent white space issues prior to Contended Locking cleanup bucket
dcubed
parents: 22551
diff changeset
   306
  ObjectWaiter * DequeueWaiter();
244218e6ec0a 8046758: cleanup non-indent white space issues prior to Contended Locking cleanup bucket
dcubed
parents: 22551
diff changeset
   307
  void      DequeueSpecificWaiter(ObjectWaiter * waiter);
244218e6ec0a 8046758: cleanup non-indent white space issues prior to Contended Locking cleanup bucket
dcubed
parents: 22551
diff changeset
   308
  void      EnterI(TRAPS);
244218e6ec0a 8046758: cleanup non-indent white space issues prior to Contended Locking cleanup bucket
dcubed
parents: 22551
diff changeset
   309
  void      ReenterI(Thread * Self, ObjectWaiter * SelfNode);
244218e6ec0a 8046758: cleanup non-indent white space issues prior to Contended Locking cleanup bucket
dcubed
parents: 22551
diff changeset
   310
  void      UnlinkAfterAcquire(Thread * Self, ObjectWaiter * SelfNode);
244218e6ec0a 8046758: cleanup non-indent white space issues prior to Contended Locking cleanup bucket
dcubed
parents: 22551
diff changeset
   311
  int       TryLock(Thread * Self);
244218e6ec0a 8046758: cleanup non-indent white space issues prior to Contended Locking cleanup bucket
dcubed
parents: 22551
diff changeset
   312
  int       NotRunnable(Thread * Self, Thread * Owner);
39702
ea7e9375bb93 8068592: Remove unused code in objectMonitor.hpp
dcubed
parents: 32614
diff changeset
   313
  int       TrySpin(Thread * Self);
25064
244218e6ec0a 8046758: cleanup non-indent white space issues prior to Contended Locking cleanup bucket
dcubed
parents: 22551
diff changeset
   314
  void      ExitEpilog(Thread * Self, ObjectWaiter * Wakee);
244218e6ec0a 8046758: cleanup non-indent white space issues prior to Contended Locking cleanup bucket
dcubed
parents: 22551
diff changeset
   315
  bool      ExitSuspendEquivalent(JavaThread * Self);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   316
};
6975
dc9b63952682 6988353: refactor contended sync subsystem
acorn
parents: 5547
diff changeset
   317
53244
9807daeb47c4 8216167: Update include guards to reflect correct directories
coleenp
parents: 51960
diff changeset
   318
#endif // SHARE_RUNTIME_OBJECTMONITOR_HPP