Mercurial > hg > graal-compiler
comparison src/share/vm/runtime/objectMonitor.cpp @ 6725:da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
Summary: Remove PermGen, allocate meta-data in metaspace linked to class loaders, rewrite GC walking, rewrite and rename metadata to be C++ classes
Reviewed-by: jmasa, stefank, never, coleenp, kvn, brutisso, mgerdin, dholmes, jrose, twisti, roland
Contributed-by: jmasa <jon.masamitsu@oracle.com>, stefank <stefan.karlsson@oracle.com>, mgerdin <mikael.gerdin@oracle.com>, never <tom.rodriguez@oracle.com>
author | coleenp |
---|---|
date | Sat, 01 Sep 2012 13:25:18 -0400 |
parents | 436b4a3231bf |
children | f34d701e952e |
comparison
equal
deleted
inserted
replaced
6724:36d1d483d5d6 | 6725:da91efe96a93 |
---|---|
1 /* | 1 /* |
2 * Copyright (c) 1998, 2011, Oracle and/or its affiliates. All rights reserved. | 2 * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. |
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
4 * | 4 * |
5 * This code is free software; you can redistribute it and/or modify it | 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 | 6 * under the terms of the GNU General Public License version 2 only, as |
7 * published by the Free Software Foundation. | 7 * published by the Free Software Foundation. |
67 | 67 |
68 // Only bother with this argument setup if dtrace is available | 68 // Only bother with this argument setup if dtrace is available |
69 // TODO-FIXME: probes should not fire when caller is _blocked. assert() accordingly. | 69 // TODO-FIXME: probes should not fire when caller is _blocked. assert() accordingly. |
70 | 70 |
71 | 71 |
72 #define DTRACE_MONITOR_PROBE_COMMON(klassOop, thread) \ | 72 #define DTRACE_MONITOR_PROBE_COMMON(obj, thread) \ |
73 char* bytes = NULL; \ | 73 char* bytes = NULL; \ |
74 int len = 0; \ | 74 int len = 0; \ |
75 jlong jtid = SharedRuntime::get_java_tid(thread); \ | 75 jlong jtid = SharedRuntime::get_java_tid(thread); \ |
76 Symbol* klassname = ((oop)(klassOop))->klass()->klass_part()->name(); \ | 76 Symbol* klassname = ((oop)obj)->klass()->name(); \ |
77 if (klassname != NULL) { \ | 77 if (klassname != NULL) { \ |
78 bytes = (char*)klassname->bytes(); \ | 78 bytes = (char*)klassname->bytes(); \ |
79 len = klassname->utf8_length(); \ | 79 len = klassname->utf8_length(); \ |
80 } | 80 } |
81 | 81 |
90 HS_DTRACE_PROBE_DECL4(hotspot, monitor__contended__entered, | 90 HS_DTRACE_PROBE_DECL4(hotspot, monitor__contended__entered, |
91 jlong, uintptr_t, char*, int); | 91 jlong, uintptr_t, char*, int); |
92 HS_DTRACE_PROBE_DECL4(hotspot, monitor__contended__exit, | 92 HS_DTRACE_PROBE_DECL4(hotspot, monitor__contended__exit, |
93 jlong, uintptr_t, char*, int); | 93 jlong, uintptr_t, char*, int); |
94 | 94 |
95 #define DTRACE_MONITOR_WAIT_PROBE(monitor, klassOop, thread, millis) \ | 95 #define DTRACE_MONITOR_WAIT_PROBE(monitor, obj, thread, millis) \ |
96 { \ | 96 { \ |
97 if (DTraceMonitorProbes) { \ | 97 if (DTraceMonitorProbes) { \ |
98 DTRACE_MONITOR_PROBE_COMMON(klassOop, thread); \ | 98 DTRACE_MONITOR_PROBE_COMMON(obj, thread); \ |
99 HS_DTRACE_PROBE5(hotspot, monitor__wait, jtid, \ | 99 HS_DTRACE_PROBE5(hotspot, monitor__wait, jtid, \ |
100 (monitor), bytes, len, (millis)); \ | 100 (monitor), bytes, len, (millis)); \ |
101 } \ | 101 } \ |
102 } | 102 } |
103 | 103 |
104 #define DTRACE_MONITOR_PROBE(probe, monitor, klassOop, thread) \ | 104 #define DTRACE_MONITOR_PROBE(probe, monitor, obj, thread) \ |
105 { \ | 105 { \ |
106 if (DTraceMonitorProbes) { \ | 106 if (DTraceMonitorProbes) { \ |
107 DTRACE_MONITOR_PROBE_COMMON(klassOop, thread); \ | 107 DTRACE_MONITOR_PROBE_COMMON(obj, thread); \ |
108 HS_DTRACE_PROBE4(hotspot, monitor__##probe, jtid, \ | 108 HS_DTRACE_PROBE4(hotspot, monitor__##probe, jtid, \ |
109 (uintptr_t)(monitor), bytes, len); \ | 109 (uintptr_t)(monitor), bytes, len); \ |
110 } \ | 110 } \ |
111 } | 111 } |
112 | 112 |
113 #else /* USDT2 */ | 113 #else /* USDT2 */ |
114 | 114 |
115 #define DTRACE_MONITOR_WAIT_PROBE(monitor, klassOop, thread, millis) \ | 115 #define DTRACE_MONITOR_WAIT_PROBE(monitor, obj, thread, millis) \ |
116 { \ | 116 { \ |
117 if (DTraceMonitorProbes) { \ | 117 if (DTraceMonitorProbes) { \ |
118 DTRACE_MONITOR_PROBE_COMMON(klassOop, thread); \ | 118 DTRACE_MONITOR_PROBE_COMMON(obj, thread); \ |
119 HOTSPOT_MONITOR_WAIT(jtid, \ | 119 HOTSPOT_MONITOR_WAIT(jtid, \ |
120 (monitor), bytes, len, (millis)); \ | 120 (monitor), bytes, len, (millis)); \ |
121 } \ | 121 } \ |
122 } | 122 } |
123 | 123 |
125 #define HOTSPOT_MONITOR_contended__entered HOTSPOT_MONITOR_CONTENDED_ENTERED | 125 #define HOTSPOT_MONITOR_contended__entered HOTSPOT_MONITOR_CONTENDED_ENTERED |
126 #define HOTSPOT_MONITOR_contended__exit HOTSPOT_MONITOR_CONTENDED_EXIT | 126 #define HOTSPOT_MONITOR_contended__exit HOTSPOT_MONITOR_CONTENDED_EXIT |
127 #define HOTSPOT_MONITOR_notify HOTSPOT_MONITOR_NOTIFY | 127 #define HOTSPOT_MONITOR_notify HOTSPOT_MONITOR_NOTIFY |
128 #define HOTSPOT_MONITOR_notifyAll HOTSPOT_MONITOR_NOTIFYALL | 128 #define HOTSPOT_MONITOR_notifyAll HOTSPOT_MONITOR_NOTIFYALL |
129 | 129 |
130 #define DTRACE_MONITOR_PROBE(probe, monitor, klassOop, thread) \ | 130 #define DTRACE_MONITOR_PROBE(probe, monitor, obj, thread) \ |
131 { \ | 131 { \ |
132 if (DTraceMonitorProbes) { \ | 132 if (DTraceMonitorProbes) { \ |
133 DTRACE_MONITOR_PROBE_COMMON(klassOop, thread); \ | 133 DTRACE_MONITOR_PROBE_COMMON(obj, thread); \ |
134 HOTSPOT_MONITOR_##probe(jtid, \ | 134 HOTSPOT_MONITOR_##probe(jtid, \ |
135 (uintptr_t)(monitor), bytes, len); \ | 135 (uintptr_t)(monitor), bytes, len); \ |
136 } \ | 136 } \ |
137 } | 137 } |
138 | 138 |
139 #endif /* USDT2 */ | 139 #endif /* USDT2 */ |
140 #else // ndef DTRACE_ENABLED | 140 #else // ndef DTRACE_ENABLED |
141 | 141 |
142 #define DTRACE_MONITOR_WAIT_PROBE(klassOop, thread, millis, mon) {;} | 142 #define DTRACE_MONITOR_WAIT_PROBE(obj, thread, millis, mon) {;} |
143 #define DTRACE_MONITOR_PROBE(probe, klassOop, thread, mon) {;} | 143 #define DTRACE_MONITOR_PROBE(probe, obj, thread, mon) {;} |
144 | 144 |
145 #endif // ndef DTRACE_ENABLED | 145 #endif // ndef DTRACE_ENABLED |
146 | 146 |
147 // Tunables ... | 147 // Tunables ... |
148 // The knob* variables are effectively final. Once set they should | 148 // The knob* variables are effectively final. Once set they should |