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