< prev index next >

src/hotspot/share/runtime/thread.hpp

Print this page
rev 60137 : 8227745: Enable Escape Analysis for Better Performance in the Presence of JVMTI Agents
Reviewed-by: mdoerr, goetz
rev 60138 : 8227745: delta webrev.5 -> webrev.6

*** 79,89 **** class vframe; class javaVFrame; class DeoptResourceMark; class JvmtiDeferredUpdates; - class jvmtiDeferredLocalVariableSet; class ThreadClosure; class ICRefillVerifier; class IdealGraphPrinter; --- 79,88 ----
*** 290,300 **** _has_async_exception = 0x00000001U, // there is a pending async exception _critical_native_unlock = 0x00000002U, // Must call back to unlock JNI critical lock _trace_flag = 0x00000004U, // call tracing backend ! _ea_obj_deopt = 0x00000008U // suspend for object reallocation and relocking for JVMTI agent }; // various suspension related flags - atomically updated // overloaded for async exception checking in check_special_condition_for_native_trans. volatile uint32_t _suspend_flags; --- 289,299 ---- _has_async_exception = 0x00000001U, // there is a pending async exception _critical_native_unlock = 0x00000002U, // Must call back to unlock JNI critical lock _trace_flag = 0x00000004U, // call tracing backend ! _obj_deopt = 0x00000008U // suspend for object reallocation and relocking for JVMTI agent }; // various suspension related flags - atomically updated // overloaded for async exception checking in check_special_condition_for_native_trans. volatile uint32_t _suspend_flags;
*** 541,552 **** inline void clear_critical_native_unlock(); inline void set_trace_flag(); inline void clear_trace_flag(); ! inline void set_ea_obj_deopt_flag(); ! inline void clear_ea_obj_deopt_flag(); // Support for Unhandled Oop detection // Add the field for both, fastdebug and debug, builds to keep // Thread's fields layout the same. // Note: CHECK_UNHANDLED_OOPS is defined only for fastdebug build. --- 540,551 ---- inline void clear_critical_native_unlock(); inline void set_trace_flag(); inline void clear_trace_flag(); ! inline void set_obj_deopt_flag(); ! inline void clear_obj_deopt_flag(); // Support for Unhandled Oop detection // Add the field for both, fastdebug and debug, builds to keep // Thread's fields layout the same. // Note: CHECK_UNHANDLED_OOPS is defined only for fastdebug build.
*** 618,628 **** JFR_ONLY(DEFINE_THREAD_LOCAL_ACCESSOR_JFR;) bool is_trace_suspend() { return (_suspend_flags & _trace_flag) != 0; } ! bool is_ea_obj_deopt_suspend() { return (_suspend_flags & _ea_obj_deopt) != 0; } // VM operation support int vm_operation_ticket() { return ++_vm_operation_started_count; } int vm_operation_completed_count() { return _vm_operation_completed_count; } void increment_vm_operation_completed_count() { _vm_operation_completed_count++; } --- 617,627 ---- JFR_ONLY(DEFINE_THREAD_LOCAL_ACCESSOR_JFR;) bool is_trace_suspend() { return (_suspend_flags & _trace_flag) != 0; } ! bool is_obj_deopt_suspend() { return (_suspend_flags & _obj_deopt) != 0; } // VM operation support int vm_operation_ticket() { return ++_vm_operation_started_count; } int vm_operation_completed_count() { return _vm_operation_completed_count; } void increment_vm_operation_completed_count() { _vm_operation_completed_count++; }
*** 1444,1454 **** return (_suspend_flags & _external_suspend) != 0; } // Whenever a thread transitions from native to vm/java it must suspend // if external|deopt suspend is present. bool is_suspend_after_native() const { ! return (_suspend_flags & (_external_suspend | _ea_obj_deopt JFR_ONLY(| _trace_flag))) != 0; } // external suspend request is completed bool is_ext_suspended() const { return (_suspend_flags & _ext_suspended) != 0; --- 1443,1453 ---- return (_suspend_flags & _external_suspend) != 0; } // Whenever a thread transitions from native to vm/java it must suspend // if external|deopt suspend is present. bool is_suspend_after_native() const { ! return (_suspend_flags & (_external_suspend | _obj_deopt JFR_ONLY(| _trace_flag))) != 0; } // external suspend request is completed bool is_ext_suspended() const { return (_suspend_flags & _ext_suspended) != 0;
*** 1517,1527 **** // we will see the new flag value the next time through. It's also // possible that the external suspend request is dropped after // we have checked is_external_suspend(), we will recheck its value // under SR_lock in java_suspend_self(). return (_special_runtime_exit_condition != _no_async_condition) || ! is_external_suspend() || is_trace_suspend() || is_ea_obj_deopt_suspend(); } void set_pending_unsafe_access_error() { _special_runtime_exit_condition = _async_unsafe_access_error; } inline void set_pending_async_exception(oop e); --- 1516,1526 ---- // we will see the new flag value the next time through. It's also // possible that the external suspend request is dropped after // we have checked is_external_suspend(), we will recheck its value // under SR_lock in java_suspend_self(). return (_special_runtime_exit_condition != _no_async_condition) || ! is_external_suspend() || is_trace_suspend() || is_obj_deopt_suspend(); } void set_pending_unsafe_access_error() { _special_runtime_exit_condition = _async_unsafe_access_error; } inline void set_pending_async_exception(oop e);
< prev index next >