comparison src/share/vm/runtime/thread.hpp @ 20804:7848fc12602b

Merge with jdk8u40-b25
author Gilles Duboscq <gilles.m.duboscq@oracle.com>
date Tue, 07 Apr 2015 14:58:49 +0200
parents 8f2fb6bec986 d3f3f7677537
children be896a1983c0
comparison
equal deleted inserted replaced
20184:84105dcdb05b 20804:7848fc12602b
38 #include "runtime/osThread.hpp" 38 #include "runtime/osThread.hpp"
39 #include "runtime/park.hpp" 39 #include "runtime/park.hpp"
40 #include "runtime/safepoint.hpp" 40 #include "runtime/safepoint.hpp"
41 #include "runtime/stubRoutines.hpp" 41 #include "runtime/stubRoutines.hpp"
42 #include "runtime/threadLocalStorage.hpp" 42 #include "runtime/threadLocalStorage.hpp"
43 #include "runtime/thread_ext.hpp"
43 #include "runtime/unhandledOops.hpp" 44 #include "runtime/unhandledOops.hpp"
44 #include "utilities/macros.hpp"
45
46 #if INCLUDE_NMT
47 #include "services/memRecorder.hpp"
48 #endif // INCLUDE_NMT
49
50 #include "trace/traceBackend.hpp" 45 #include "trace/traceBackend.hpp"
51 #include "trace/traceMacros.hpp" 46 #include "trace/traceMacros.hpp"
52 #include "utilities/exceptions.hpp" 47 #include "utilities/exceptions.hpp"
48 #include "utilities/macros.hpp"
53 #include "utilities/top.hpp" 49 #include "utilities/top.hpp"
54 #if INCLUDE_ALL_GCS 50 #if INCLUDE_ALL_GCS
55 #include "gc_implementation/g1/dirtyCardQueue.hpp" 51 #include "gc_implementation/g1/dirtyCardQueue.hpp"
56 #include "gc_implementation/g1/satbQueue.hpp" 52 #include "gc_implementation/g1/satbQueue.hpp"
57 #endif // INCLUDE_ALL_GCS 53 #endif // INCLUDE_ALL_GCS
83 class jvmtiDeferredLocalVariableSet; 79 class jvmtiDeferredLocalVariableSet;
84 80
85 class GCTaskQueue; 81 class GCTaskQueue;
86 class ThreadClosure; 82 class ThreadClosure;
87 class IdealGraphPrinter; 83 class IdealGraphPrinter;
84
85 class Metadata;
86 template <class T, MEMFLAGS F> class ChunkedList;
87 typedef ChunkedList<Metadata*, mtInternal> MetadataOnStackBuffer;
88 88
89 DEBUG_ONLY(class ResourceMark;) 89 DEBUG_ONLY(class ResourceMark;)
90 90
91 class WorkerThread; 91 class WorkerThread;
92 92
257 257
258 ThreadLocalAllocBuffer _tlab; // Thread-local eden 258 ThreadLocalAllocBuffer _tlab; // Thread-local eden
259 jlong _allocated_bytes; // Cumulative number of bytes allocated on 259 jlong _allocated_bytes; // Cumulative number of bytes allocated on
260 // the Java heap 260 // the Java heap
261 261
262 // Thread-local buffer used by MetadataOnStackMark.
263 MetadataOnStackBuffer* _metadata_on_stack_buffer;
264
262 TRACE_DATA _trace_data; // Thread-local data for tracing 265 TRACE_DATA _trace_data; // Thread-local data for tracing
266
267 ThreadExt _ext;
263 268
264 int _vm_operation_started_count; // VM_Operation support 269 int _vm_operation_started_count; // VM_Operation support
265 int _vm_operation_completed_count; // VM_Operation support 270 int _vm_operation_completed_count; // VM_Operation support
266 271
267 ObjectMonitor* _current_pending_monitor; // ObjectMonitor this thread 272 ObjectMonitor* _current_pending_monitor; // ObjectMonitor this thread
437 } 442 }
438 443
439 jlong allocated_bytes() { return _allocated_bytes; } 444 jlong allocated_bytes() { return _allocated_bytes; }
440 void set_allocated_bytes(jlong value) { _allocated_bytes = value; } 445 void set_allocated_bytes(jlong value) { _allocated_bytes = value; }
441 void incr_allocated_bytes(jlong size) { _allocated_bytes += size; } 446 void incr_allocated_bytes(jlong size) { _allocated_bytes += size; }
442 jlong cooked_allocated_bytes() { 447 inline jlong cooked_allocated_bytes();
443 jlong allocated_bytes = OrderAccess::load_acquire(&_allocated_bytes);
444 if (UseTLAB) {
445 size_t used_bytes = tlab().used_bytes();
446 if ((ssize_t)used_bytes > 0) {
447 // More-or-less valid tlab. The load_acquire above should ensure
448 // that the result of the add is <= the instantaneous value
449 return allocated_bytes + used_bytes;
450 }
451 }
452 return allocated_bytes;
453 }
454 448
455 TRACE_DATA* trace_data() { return &_trace_data; } 449 TRACE_DATA* trace_data() { return &_trace_data; }
450
451 const ThreadExt& ext() const { return _ext; }
452 ThreadExt& ext() { return _ext; }
456 453
457 // VM operation support 454 // VM operation support
458 int vm_operation_ticket() { return ++_vm_operation_started_count; } 455 int vm_operation_ticket() { return ++_vm_operation_started_count; }
459 int vm_operation_completed_count() { return _vm_operation_completed_count; } 456 int vm_operation_completed_count() { return _vm_operation_completed_count; }
460 void increment_vm_operation_completed_count() { _vm_operation_completed_count++; } 457 void increment_vm_operation_completed_count() { _vm_operation_completed_count++; }
484 // GC support 481 // GC support
485 // Apply "f->do_oop" to all root oops in "this". 482 // Apply "f->do_oop" to all root oops in "this".
486 // Apply "cld_f->do_cld" to CLDs that are otherwise not kept alive. 483 // Apply "cld_f->do_cld" to CLDs that are otherwise not kept alive.
487 // Used by JavaThread::oops_do. 484 // Used by JavaThread::oops_do.
488 // Apply "cf->do_code_blob" (if !NULL) to all code blobs active in frames 485 // Apply "cf->do_code_blob" (if !NULL) to all code blobs active in frames
489 virtual void oops_do(OopClosure* f, CLDToOopClosure* cld_f, CodeBlobClosure* cf); 486 virtual void oops_do(OopClosure* f, CLDClosure* cld_f, CodeBlobClosure* cf);
490 487
491 // Handles the parallel case for the method below. 488 // Handles the parallel case for the method below.
492 private: 489 private:
493 bool claim_oops_do_par_case(int collection_parity); 490 bool claim_oops_do_par_case(int collection_parity);
494 public: 491 public:
495 // Requires that "collection_parity" is that of the current strong roots 492 // Requires that "collection_parity" is that of the current roots
496 // iteration. If "is_par" is false, sets the parity of "this" to 493 // iteration. If "is_par" is false, sets the parity of "this" to
497 // "collection_parity", and returns "true". If "is_par" is true, 494 // "collection_parity", and returns "true". If "is_par" is true,
498 // uses an atomic instruction to set the current threads parity to 495 // uses an atomic instruction to set the current threads parity to
499 // "collection_parity", if it is not already. Returns "true" iff the 496 // "collection_parity", if it is not already. Returns "true" iff the
500 // calling thread does the update, this indicates that the calling thread 497 // calling thread does the update, this indicates that the calling thread
527 524
528 // Sets this thread as starting thread. Returns failure if thread 525 // Sets this thread as starting thread. Returns failure if thread
529 // creation fails due to lack of memory, too many threads etc. 526 // creation fails due to lack of memory, too many threads etc.
530 bool set_as_starting_thread(); 527 bool set_as_starting_thread();
531 528
532 protected: 529 void set_metadata_on_stack_buffer(MetadataOnStackBuffer* buffer) { _metadata_on_stack_buffer = buffer; }
530 MetadataOnStackBuffer* metadata_on_stack_buffer() const { return _metadata_on_stack_buffer; }
531
532 protected:
533 // OS data associated with the thread 533 // OS data associated with the thread
534 OSThread* _osthread; // Platform-specific thread information 534 OSThread* _osthread; // Platform-specific thread information
535 535
536 // Thread local resource area for temporary allocation within the VM 536 // Thread local resource area for temporary allocation within the VM
537 ResourceArea* _resource_area; 537 ResourceArea* _resource_area;
953 953
954 // JVMTI PopFrame support 954 // JVMTI PopFrame support
955 // This is set to popframe_pending to signal that top Java frame should be popped immediately 955 // This is set to popframe_pending to signal that top Java frame should be popped immediately
956 int _popframe_condition; 956 int _popframe_condition;
957 957
958 // If reallocation of scalar replaced objects fails, we throw OOM
959 // and during exception propagation, pop the top
960 // _frames_to_pop_failed_realloc frames, the ones that reference
961 // failed reallocations.
962 int _frames_to_pop_failed_realloc;
963
958 #ifndef PRODUCT 964 #ifndef PRODUCT
959 int _jmp_ring_index; 965 int _jmp_ring_index;
960 struct { 966 struct {
961 // We use intptr_t instead of address so debugger doesn't try and display strings 967 // We use intptr_t instead of address so debugger doesn't try and display strings
962 intptr_t _target; 968 intptr_t _target;
1047 1053
1048 // Prepare thread and add to priority queue. If a priority is 1054 // Prepare thread and add to priority queue. If a priority is
1049 // not specified, use the priority of the thread object. Threads_lock 1055 // not specified, use the priority of the thread object. Threads_lock
1050 // must be held while this function is called. 1056 // must be held while this function is called.
1051 void prepare(jobject jni_thread, ThreadPriority prio=NoPriority); 1057 void prepare(jobject jni_thread, ThreadPriority prio=NoPriority);
1058 void prepare_ext();
1052 1059
1053 void set_saved_exception_pc(address pc) { _saved_exception_pc = pc; } 1060 void set_saved_exception_pc(address pc) { _saved_exception_pc = pc; }
1054 address saved_exception_pc() { return _saved_exception_pc; } 1061 address saved_exception_pc() { return _saved_exception_pc; }
1055 1062
1056 1063
1076 JavaThreadState thread_state() const { return _thread_state; } 1083 JavaThreadState thread_state() const { return _thread_state; }
1077 void set_thread_state(JavaThreadState s) { _thread_state = s; } 1084 void set_thread_state(JavaThreadState s) { _thread_state = s; }
1078 #else 1085 #else
1079 // Use membars when accessing volatile _thread_state. See 1086 // Use membars when accessing volatile _thread_state. See
1080 // Threads::create_vm() for size checks. 1087 // Threads::create_vm() for size checks.
1081 JavaThreadState thread_state() const { 1088 inline JavaThreadState thread_state() const;
1082 return (JavaThreadState) OrderAccess::load_acquire((volatile jint*)&_thread_state); 1089 inline void set_thread_state(JavaThreadState s);
1083 }
1084 void set_thread_state(JavaThreadState s) {
1085 OrderAccess::release_store((volatile jint*)&_thread_state, (jint)s);
1086 }
1087 #endif 1090 #endif
1088 ThreadSafepointState *safepoint_state() const { return _safepoint_state; } 1091 ThreadSafepointState *safepoint_state() const { return _safepoint_state; }
1089 void set_safepoint_state(ThreadSafepointState *state) { _safepoint_state = state; } 1092 void set_safepoint_state(ThreadSafepointState *state) { _safepoint_state = state; }
1090 bool is_at_poll_safepoint() { return _safepoint_state->is_at_poll_safepoint(); } 1093 bool is_at_poll_safepoint() { return _safepoint_state->is_at_poll_safepoint(); }
1091 1094
1103 bool doing_unsafe_access() { return _doing_unsafe_access; } 1106 bool doing_unsafe_access() { return _doing_unsafe_access; }
1104 void set_doing_unsafe_access(bool val) { _doing_unsafe_access = val; } 1107 void set_doing_unsafe_access(bool val) { _doing_unsafe_access = val; }
1105 1108
1106 bool do_not_unlock_if_synchronized() { return _do_not_unlock_if_synchronized; } 1109 bool do_not_unlock_if_synchronized() { return _do_not_unlock_if_synchronized; }
1107 void set_do_not_unlock_if_synchronized(bool val) { _do_not_unlock_if_synchronized = val; } 1110 void set_do_not_unlock_if_synchronized(bool val) { _do_not_unlock_if_synchronized = val; }
1108
1109 #if INCLUDE_NMT
1110 // native memory tracking
1111 inline MemRecorder* get_recorder() const { return (MemRecorder*)_recorder; }
1112 inline void set_recorder(MemRecorder* rc) { _recorder = rc; }
1113
1114 private:
1115 // per-thread memory recorder
1116 MemRecorder* volatile _recorder;
1117 #endif // INCLUDE_NMT
1118 1111
1119 // Suspend/resume support for JavaThread 1112 // Suspend/resume support for JavaThread
1120 private: 1113 private:
1121 void set_ext_suspended() { set_suspend_flag (_ext_suspended); } 1114 void set_ext_suspended() { set_suspend_flag (_ext_suspended); }
1122 void clear_ext_suspended() { clear_suspend_flag(_ext_suspended); } 1115 void clear_ext_suspended() { clear_suspend_flag(_ext_suspended); }
1484 1477
1485 // Frame iteration; calls the function f for all frames on the stack 1478 // Frame iteration; calls the function f for all frames on the stack
1486 void frames_do(void f(frame*, const RegisterMap*)); 1479 void frames_do(void f(frame*, const RegisterMap*));
1487 1480
1488 // Memory operations 1481 // Memory operations
1489 void oops_do(OopClosure* f, CLDToOopClosure* cld_f, CodeBlobClosure* cf); 1482 void oops_do(OopClosure* f, CLDClosure* cld_f, CodeBlobClosure* cf);
1490 1483
1491 // Sweeper operations 1484 // Sweeper operations
1492 void nmethods_do(CodeBlobClosure* cf); 1485 void nmethods_do(CodeBlobClosure* cf);
1493 1486
1494 // RedefineClasses Support 1487 // RedefineClasses Support
1566 ThreadProfiler* result = _thread_profiler; 1559 ThreadProfiler* result = _thread_profiler;
1567 _thread_profiler = tp; 1560 _thread_profiler = tp;
1568 return result; 1561 return result;
1569 } 1562 }
1570 1563
1571 // NMT (Native memory tracking) support.
1572 // This flag helps NMT to determine if this JavaThread will be blocked
1573 // at safepoint. If not, ThreadCritical is needed for writing memory records.
1574 // JavaThread is only safepoint visible when it is in Threads' thread list,
1575 // it is not visible until it is added to the list and becomes invisible
1576 // once it is removed from the list.
1577 public:
1578 bool is_safepoint_visible() const { return _safepoint_visible; }
1579 void set_safepoint_visible(bool visible) { _safepoint_visible = visible; }
1580 private:
1581 bool _safepoint_visible;
1582
1583 // Static operations
1584 public: 1564 public:
1585 // Returns the running thread as a JavaThread 1565 // Returns the running thread as a JavaThread
1586 static inline JavaThread* current(); 1566 static inline JavaThread* current();
1587 1567
1588 // Returns the active Java thread. Do not use this if you know you are calling 1568 // Returns the active Java thread. Do not use this if you know you are calling
1651 bool pop_frame_in_process(void) { return ((_popframe_condition & popframe_processing_bit) != 0); } 1631 bool pop_frame_in_process(void) { return ((_popframe_condition & popframe_processing_bit) != 0); }
1652 void set_pop_frame_in_process(void) { _popframe_condition |= popframe_processing_bit; } 1632 void set_pop_frame_in_process(void) { _popframe_condition |= popframe_processing_bit; }
1653 void clr_pop_frame_in_process(void) { _popframe_condition &= ~popframe_processing_bit; } 1633 void clr_pop_frame_in_process(void) { _popframe_condition &= ~popframe_processing_bit; }
1654 #endif 1634 #endif
1655 1635
1636 int frames_to_pop_failed_realloc() const { return _frames_to_pop_failed_realloc; }
1637 void set_frames_to_pop_failed_realloc(int nb) { _frames_to_pop_failed_realloc = nb; }
1638 void dec_frames_to_pop_failed_realloc() { _frames_to_pop_failed_realloc--; }
1639
1656 private: 1640 private:
1657 // Saved incoming arguments to popped frame. 1641 // Saved incoming arguments to popped frame.
1658 // Used only when popped interpreted frame returns to deoptimized frame. 1642 // Used only when popped interpreted frame returns to deoptimized frame.
1659 void* _popframe_preserved_args; 1643 void* _popframe_preserved_args;
1660 int _popframe_preserved_args_size; 1644 int _popframe_preserved_args_size;
1815 void set_cached_monitor_info(GrowableArray<MonitorInfo*>* info) { _cached_monitor_info = info; } 1799 void set_cached_monitor_info(GrowableArray<MonitorInfo*>* info) { _cached_monitor_info = info; }
1816 1800
1817 // clearing/querying jni attach status 1801 // clearing/querying jni attach status
1818 bool is_attaching_via_jni() const { return _jni_attach_state == _attaching_via_jni; } 1802 bool is_attaching_via_jni() const { return _jni_attach_state == _attaching_via_jni; }
1819 bool has_attached_via_jni() const { return is_attaching_via_jni() || _jni_attach_state == _attached_via_jni; } 1803 bool has_attached_via_jni() const { return is_attaching_via_jni() || _jni_attach_state == _attached_via_jni; }
1820 void set_done_attaching_via_jni() { _jni_attach_state = _attached_via_jni; OrderAccess::fence(); } 1804 inline void set_done_attaching_via_jni();
1821 private: 1805 private:
1822 // This field is used to determine if a thread has claimed 1806 // This field is used to determine if a thread has claimed
1823 // a par_id: it is UINT_MAX if the thread has not claimed a par_id; 1807 // a par_id: it is UINT_MAX if the thread has not claimed a par_id;
1824 // otherwise its value is the par_id that has been claimed. 1808 // otherwise its value is the par_id that has been claimed.
1825 uint _claimed_par_id; 1809 uint _claimed_par_id;
1922 } 1906 }
1923 1907
1924 // GC support 1908 // GC support
1925 // Apply "f->do_oop" to all root oops in "this". 1909 // Apply "f->do_oop" to all root oops in "this".
1926 // Apply "cf->do_code_blob" (if !NULL) to all code blobs active in frames 1910 // Apply "cf->do_code_blob" (if !NULL) to all code blobs active in frames
1927 void oops_do(OopClosure* f, CLDToOopClosure* cld_f, CodeBlobClosure* cf); 1911 void oops_do(OopClosure* f, CLDClosure* cld_f, CodeBlobClosure* cf);
1928 1912
1929 #ifndef PRODUCT 1913 #ifndef PRODUCT
1930 private: 1914 private:
1931 IdealGraphPrinter *_ideal_graph_printer; 1915 IdealGraphPrinter *_ideal_graph_printer;
1932 public: 1916 public:
1989 // Garbage collection 1973 // Garbage collection
1990 static void follow_other_roots(void f(oop*)); 1974 static void follow_other_roots(void f(oop*));
1991 1975
1992 // Apply "f->do_oop" to all root oops in all threads. 1976 // Apply "f->do_oop" to all root oops in all threads.
1993 // This version may only be called by sequential code. 1977 // This version may only be called by sequential code.
1994 static void oops_do(OopClosure* f, CLDToOopClosure* cld_f, CodeBlobClosure* cf); 1978 static void oops_do(OopClosure* f, CLDClosure* cld_f, CodeBlobClosure* cf);
1995 // This version may be called by sequential or parallel code. 1979 // This version may be called by sequential or parallel code.
1996 static void possibly_parallel_oops_do(OopClosure* f, CLDToOopClosure* cld_f, CodeBlobClosure* cf); 1980 static void possibly_parallel_oops_do(OopClosure* f, CLDClosure* cld_f, CodeBlobClosure* cf);
1997 // This creates a list of GCTasks, one per thread. 1981 // This creates a list of GCTasks, one per thread.
1998 static void create_thread_roots_tasks(GCTaskQueue* q); 1982 static void create_thread_roots_tasks(GCTaskQueue* q);
1999 // This creates a list of GCTasks, one per thread, for marking objects. 1983 // This creates a list of GCTasks, one per thread, for marking objects.
2000 static void create_thread_roots_marking_tasks(GCTaskQueue* q); 1984 static void create_thread_roots_marking_tasks(GCTaskQueue* q);
2001 1985
2044 // Number of non-daemon threads on the active threads list 2028 // Number of non-daemon threads on the active threads list
2045 static int number_of_non_daemon_threads() { return _number_of_non_daemon_threads; } 2029 static int number_of_non_daemon_threads() { return _number_of_non_daemon_threads; }
2046 2030
2047 // Deoptimizes all frames tied to marked nmethods 2031 // Deoptimizes all frames tied to marked nmethods
2048 static void deoptimized_wrt_marked_nmethods(); 2032 static void deoptimized_wrt_marked_nmethods();
2033
2034 static JavaThread* find_java_thread_from_java_tid(jlong java_tid);
2049 2035
2050 }; 2036 };
2051 2037
2052 2038
2053 // Thread iterator 2039 // Thread iterator