200 // objects which can happen at normal VM shutdown.
201 //
202 #define OM_PERFDATA_OP(f, op_str) \
203 do { \
204 if (ObjectMonitor::_sync_ ## f != nullptr && \
205 PerfDataManager::has_PerfData()) { \
206 ObjectMonitor::_sync_ ## f->op_str; \
207 } \
208 } while (0)
209
210 static PerfCounter * _sync_ContendedLockAttempts;
211 static PerfCounter * _sync_FutileWakeups;
212 static PerfCounter * _sync_Parks;
213 static PerfCounter * _sync_Notifications;
214 static PerfCounter * _sync_Inflations;
215 static PerfCounter * _sync_Deflations;
216 static PerfLongVariable * _sync_MonExtant;
217
218 static int Knob_SpinLimit;
219
220 static ByteSize owner_offset() { return byte_offset_of(ObjectMonitor, _owner); }
221 static ByteSize recursions_offset() { return byte_offset_of(ObjectMonitor, _recursions); }
222 static ByteSize cxq_offset() { return byte_offset_of(ObjectMonitor, _cxq); }
223 static ByteSize succ_offset() { return byte_offset_of(ObjectMonitor, _succ); }
224 static ByteSize EntryList_offset() { return byte_offset_of(ObjectMonitor, _EntryList); }
225
226 // ObjectMonitor references can be ORed with markWord::monitor_value
227 // as part of the ObjectMonitor tagging mechanism. When we combine an
228 // ObjectMonitor reference with an offset, we need to remove the tag
229 // value in order to generate the proper address.
230 //
231 // We can either adjust the ObjectMonitor reference and then add the
232 // offset or we can adjust the offset that is added to the ObjectMonitor
233 // reference. The latter avoids an AGI (Address Generation Interlock)
234 // stall so the helper macro adjusts the offset value that is returned
235 // to the ObjectMonitor reference manipulation code:
236 //
237 #define OM_OFFSET_NO_MONITOR_VALUE_TAG(f) \
238 ((in_bytes(ObjectMonitor::f ## _offset())) - checked_cast<int>(markWord::monitor_value))
239
|
200 // objects which can happen at normal VM shutdown.
201 //
202 #define OM_PERFDATA_OP(f, op_str) \
203 do { \
204 if (ObjectMonitor::_sync_ ## f != nullptr && \
205 PerfDataManager::has_PerfData()) { \
206 ObjectMonitor::_sync_ ## f->op_str; \
207 } \
208 } while (0)
209
210 static PerfCounter * _sync_ContendedLockAttempts;
211 static PerfCounter * _sync_FutileWakeups;
212 static PerfCounter * _sync_Parks;
213 static PerfCounter * _sync_Notifications;
214 static PerfCounter * _sync_Inflations;
215 static PerfCounter * _sync_Deflations;
216 static PerfLongVariable * _sync_MonExtant;
217
218 static int Knob_SpinLimit;
219
220 static ByteSize header_offset() { return byte_offset_of(ObjectMonitor, _header); }
221 static ByteSize owner_offset() { return byte_offset_of(ObjectMonitor, _owner); }
222 static ByteSize recursions_offset() { return byte_offset_of(ObjectMonitor, _recursions); }
223 static ByteSize cxq_offset() { return byte_offset_of(ObjectMonitor, _cxq); }
224 static ByteSize succ_offset() { return byte_offset_of(ObjectMonitor, _succ); }
225 static ByteSize EntryList_offset() { return byte_offset_of(ObjectMonitor, _EntryList); }
226
227 // ObjectMonitor references can be ORed with markWord::monitor_value
228 // as part of the ObjectMonitor tagging mechanism. When we combine an
229 // ObjectMonitor reference with an offset, we need to remove the tag
230 // value in order to generate the proper address.
231 //
232 // We can either adjust the ObjectMonitor reference and then add the
233 // offset or we can adjust the offset that is added to the ObjectMonitor
234 // reference. The latter avoids an AGI (Address Generation Interlock)
235 // stall so the helper macro adjusts the offset value that is returned
236 // to the ObjectMonitor reference manipulation code:
237 //
238 #define OM_OFFSET_NO_MONITOR_VALUE_TAG(f) \
239 ((in_bytes(ObjectMonitor::f ## _offset())) - checked_cast<int>(markWord::monitor_value))
240
|