--- old/src/share/vm/runtime/thread.hpp 2015-08-12 14:09:48.000000000 +0200 +++ new/src/share/vm/runtime/thread.hpp 2015-08-12 14:09:48.000000000 +0200 @@ -101,6 +101,9 @@ class Thread: public ThreadShadow { friend class VMStructs; + friend class Threads; + friend class ScanHazardPointerThreadClosure; + friend class ScanHazardPointerThreadsClosure; private: // Exception handling // (Note: _pending_exception and friends are in ThreadShadow) @@ -237,6 +240,8 @@ // claimed as a task. jint _oops_do_parity; + JavaThread **volatile _java_threads_do_hp; + public: void set_last_handle_mark(HandleMark* mark) { _last_handle_mark = mark; } HandleMark* last_handle_mark() const { return _last_handle_mark; } @@ -588,6 +593,8 @@ static ByteSize exception_line_offset() { return byte_offset_of(Thread, _exception_line); } static ByteSize active_handles_offset() { return byte_offset_of(Thread, _active_handles); } + static ByteSize yieldpoint_offset() { return byte_offset_of(Thread, _yieldpoint_poll); } + static ByteSize stack_base_offset() { return byte_offset_of(Thread, _stack_base); } static ByteSize stack_size_offset() { return byte_offset_of(Thread, _stack_size); } @@ -936,6 +943,19 @@ } _jmp_ring[jump_ring_buffer_size]; #endif // PRODUCT +private: + volatile int _serialized_memory_version; + volatile bool _force_yield; + +public: + int serialized_memory_version() { return _serialized_memory_version; } + void update_serialized_memory_version(); + + void set_force_yield() { _force_yield = true; } + + bool is_online_vm(); + bool is_online_os(); + #if INCLUDE_ALL_GCS // Support for G1 barriers @@ -1866,17 +1886,23 @@ class Threads: AllStatic { friend class VMStructs; private: - static JavaThread* _thread_list; - static int _number_of_threads; - static int _number_of_non_daemon_threads; - static int _return_code; - static int _thread_claim_parity; + static JavaThread* _thread_list; + static JavaThread* _thread_smr_list; + static JavaThread** _thread_smr_list_list; + static int _number_of_threads; + static int _number_of_non_daemon_threads; + static int _return_code; + static int _thread_claim_parity; #ifdef ASSERT - static bool _vm_complete; + static bool _vm_complete; #endif + static JavaThread **volatile _fast_java_thread_list; + static void initialize_java_lang_classes(JavaThread* main_thread, TRAPS); static void initialize_jsr292_core_classes(TRAPS); + static JavaThread *smr_free_work(JavaThread *thread); + static void smr_free_list(JavaThread **threads); public: // Thread management // force_daemon is a concession to JNI, where we may need to add a @@ -1887,6 +1913,9 @@ static JavaThread* first() { return _thread_list; } static void threads_do(ThreadClosure* tc); + static void java_threads_do_fast(ThreadClosure *tc, Thread *self); + static void smr_free(JavaThread *thread, bool have_lock); + // Initializes the vm and creates the vm thread static jint create_vm(JavaVMInitArgs* args, bool* canTryAgain); static void convert_vm_init_libraries_to_agents();