annotate src/share/vm/runtime/park.hpp @ 2368:dde920245681

6896099: Integrate CMS heap ergo with default heap sizing ergo 6627787: CMS: JVM refuses to start up with -Xms16m -Xmx16m 7000125: CMS: Anti-monotone young gen sizing with respect to maximum whole heap size specification 7027529: CMS: retire CMSUseOldDefaults flag Summary: Simplify CMS heap sizing code, relying on ergonomic initial sizing consistent with other collectors for the most part, controlling only young gen sizing to rein in pause times. Make CMS young gen sizing default statically cpu-dependant. Remove inconsistencies wrt generation sizing and policy code, allowing for the fixing for 6627787 and 7000125. For 7027529, retire the flag CMSUseOldDefaults which had been introduced as a bridge from JDK 5 to JDK 6 a number of years ago. Reviewed-by: brutisso, poonam
author ysr
date Wed, 16 Mar 2011 10:37:08 -0700
parents f95d63e2154a
children 9758d9f36299
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1878
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
1 /*
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
2 * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
4 *
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
5 * This code is free software; you can redistribute it and/or modify it
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
6 * under the terms of the GNU General Public License version 2 only, as
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
7 * published by the Free Software Foundation.
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
8 *
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
9 * This code is distributed in the hope that it will be useful, but WITHOUT
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
12 * version 2 for more details (a copy is included in the LICENSE file that
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
13 * accompanied this code).
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
14 *
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
15 * You should have received a copy of the GNU General Public License version
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
16 * 2 along with this work; if not, write to the Free Software Foundation,
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
18 *
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
20 * or visit www.oracle.com if you need additional information or have any
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
21 * questions.
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
22 *
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
23 */
1972
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1878
diff changeset
24
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1878
diff changeset
25 #ifndef SHARE_VM_RUNTIME_PARK_HPP
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1878
diff changeset
26 #define SHARE_VM_RUNTIME_PARK_HPP
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1878
diff changeset
27
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1878
diff changeset
28 #include "utilities/debug.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1878
diff changeset
29 #include "utilities/globalDefinitions.hpp"
1878
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
30 /*
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
31 * Per-thread blocking support for JSR166. See the Java-level
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
32 * Documentation for rationale. Basically, park acts like wait, unpark
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
33 * like notify.
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
34 *
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
35 * 6271289 --
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
36 * To avoid errors where an os thread expires but the JavaThread still
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
37 * exists, Parkers are immortal (type-stable) and are recycled across
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
38 * new threads. This parallels the ParkEvent implementation.
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
39 * Because park-unpark allow spurious wakeups it is harmless if an
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
40 * unpark call unparks a new thread using the old Parker reference.
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
41 *
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
42 * In the future we'll want to think about eliminating Parker and using
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
43 * ParkEvent instead. There's considerable duplication between the two
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
44 * services.
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
45 *
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
46 */
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
47
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
48 class Parker : public os::PlatformParker {
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
49 private:
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
50 volatile int _counter ;
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
51 Parker * FreeNext ;
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
52 JavaThread * AssociatedWith ; // Current association
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
53
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
54 public:
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
55 Parker() : PlatformParker() {
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
56 _counter = 0 ;
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
57 FreeNext = NULL ;
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
58 AssociatedWith = NULL ;
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
59 }
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
60 protected:
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
61 ~Parker() { ShouldNotReachHere(); }
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
62 public:
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
63 // For simplicity of interface with Java, all forms of park (indefinite,
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
64 // relative, and absolute) are multiplexed into one call.
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
65 void park(bool isAbsolute, jlong time);
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
66 void unpark();
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
67
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
68 // Lifecycle operators
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
69 static Parker * Allocate (JavaThread * t) ;
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
70 static void Release (Parker * e) ;
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
71 private:
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
72 static Parker * volatile FreeList ;
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
73 static volatile int ListLock ;
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
74
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
75 };
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
76
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
77 /////////////////////////////////////////////////////////////
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
78 //
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
79 // ParkEvents are type-stable and immortal.
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
80 //
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
81 // Lifecycle: Once a ParkEvent is associated with a thread that ParkEvent remains
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
82 // associated with the thread for the thread's entire lifetime - the relationship is
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
83 // stable. A thread will be associated at most one ParkEvent. When the thread
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
84 // expires, the ParkEvent moves to the EventFreeList. New threads attempt to allocate from
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
85 // the EventFreeList before creating a new Event. Type-stability frees us from
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
86 // worrying about stale Event or Thread references in the objectMonitor subsystem.
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
87 // (A reference to ParkEvent is always valid, even though the event may no longer be associated
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
88 // with the desired or expected thread. A key aspect of this design is that the callers of
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
89 // park, unpark, etc must tolerate stale references and spurious wakeups).
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
90 //
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
91 // Only the "associated" thread can block (park) on the ParkEvent, although
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
92 // any other thread can unpark a reachable parkevent. Park() is allowed to
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
93 // return spuriously. In fact park-unpark a really just an optimization to
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
94 // avoid unbounded spinning and surrender the CPU to be a polite system citizen.
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
95 // A degenerate albeit "impolite" park-unpark implementation could simply return.
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
96 // See http://blogs.sun.com/dave for more details.
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
97 //
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
98 // Eventually I'd like to eliminate Events and ObjectWaiters, both of which serve as
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
99 // thread proxies, and simply make the THREAD structure type-stable and persistent.
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
100 // Currently, we unpark events associated with threads, but ideally we'd just
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
101 // unpark threads.
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
102 //
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
103 // The base-class, PlatformEvent, is platform-specific while the ParkEvent is
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
104 // platform-independent. PlatformEvent provides park(), unpark(), etc., and
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
105 // is abstract -- that is, a PlatformEvent should never be instantiated except
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
106 // as part of a ParkEvent.
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
107 // Equivalently we could have defined a platform-independent base-class that
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
108 // exported Allocate(), Release(), etc. The platform-specific class would extend
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
109 // that base-class, adding park(), unpark(), etc.
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
110 //
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
111 // A word of caution: The JVM uses 2 very similar constructs:
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
112 // 1. ParkEvent are used for Java-level "monitor" synchronization.
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
113 // 2. Parkers are used by JSR166-JUC park-unpark.
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
114 //
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
115 // We'll want to eventually merge these redundant facilities and use ParkEvent.
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
116
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
117
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
118 class ParkEvent : public os::PlatformEvent {
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
119 private:
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
120 ParkEvent * FreeNext ;
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
121
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
122 // Current association
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
123 Thread * AssociatedWith ;
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
124 intptr_t RawThreadIdentity ; // LWPID etc
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
125 volatile int Incarnation ;
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
126
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
127 // diagnostic : keep track of last thread to wake this thread.
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
128 // this is useful for construction of dependency graphs.
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
129 void * LastWaker ;
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
130
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
131 public:
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
132 // MCS-CLH list linkage and Native Mutex/Monitor
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
133 ParkEvent * volatile ListNext ;
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
134 ParkEvent * volatile ListPrev ;
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
135 volatile intptr_t OnList ;
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
136 volatile int TState ;
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
137 volatile int Notified ; // for native monitor construct
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
138 volatile int IsWaiting ; // Enqueued on WaitSet
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
139
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
140
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
141 private:
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
142 static ParkEvent * volatile FreeList ;
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
143 static volatile int ListLock ;
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
144
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
145 // It's prudent to mark the dtor as "private"
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
146 // ensuring that it's not visible outside the package.
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
147 // Unfortunately gcc warns about such usage, so
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
148 // we revert to the less desirable "protected" visibility.
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
149 // The other compilers accept private dtors.
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
150
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
151 protected: // Ensure dtor is never invoked
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
152 ~ParkEvent() { guarantee (0, "invariant") ; }
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
153
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
154 ParkEvent() : PlatformEvent() {
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
155 AssociatedWith = NULL ;
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
156 FreeNext = NULL ;
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
157 ListNext = NULL ;
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
158 ListPrev = NULL ;
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
159 OnList = 0 ;
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
160 TState = 0 ;
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
161 Notified = 0 ;
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
162 IsWaiting = 0 ;
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
163 }
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
164
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
165 // We use placement-new to force ParkEvent instances to be
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
166 // aligned on 256-byte address boundaries. This ensures that the least
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
167 // significant byte of a ParkEvent address is always 0.
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
168
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
169 void * operator new (size_t sz) ;
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
170 void operator delete (void * a) ;
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
171
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
172 public:
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
173 static ParkEvent * Allocate (Thread * t) ;
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
174 static void Release (ParkEvent * e) ;
fa83ab460c54 6988353: refactor contended sync subsystem
acorn
parents:
diff changeset
175 } ;
1972
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1878
diff changeset
176
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1878
diff changeset
177 #endif // SHARE_VM_RUNTIME_PARK_HPP