< prev index next >
src/hotspot/share/runtime/thread.hpp
Print this page
@@ -24,10 +24,11 @@
#ifndef SHARE_VM_RUNTIME_THREAD_HPP
#define SHARE_VM_RUNTIME_THREAD_HPP
#include "jni.h"
+#include "gc/shared/gcThreadLocalData.hpp"
#include "gc/shared/threadLocalAllocBuffer.hpp"
#include "memory/allocation.hpp"
#include "oops/oop.hpp"
#include "prims/jvmtiExport.hpp"
#include "runtime/frame.hpp"
@@ -45,14 +46,10 @@
#include "trace/traceBackend.hpp"
#include "trace/traceMacros.hpp"
#include "utilities/align.hpp"
#include "utilities/exceptions.hpp"
#include "utilities/macros.hpp"
-#if INCLUDE_ALL_GCS
-#include "gc/g1/dirtyCardQueue.hpp"
-#include "gc/g1/satbMarkQueue.hpp"
-#endif // INCLUDE_ALL_GCS
#ifdef ZERO
# include "stack_zero.hpp"
#endif
class ThreadSafepointState;
@@ -110,10 +107,26 @@
#ifndef USE_LIBRARY_BASED_TLS_ONLY
// Current thread is maintained as a thread-local variable
static THREAD_LOCAL_DECL Thread* _thr_current;
#endif
+ private:
+ // Thread local data area available to the GC. The internal
+ // structure and contents of this data area is GC-specific.
+ // Only GC and GC barrier code should access this data area.
+ GCThreadLocalData _gc_data;
+
+ public:
+ static ByteSize gc_data_offset() {
+ return byte_offset_of(Thread, _gc_data);
+ }
+
+ template <typename T> T* gc_data() {
+ STATIC_ASSERT(sizeof(T) <= sizeof(_gc_data));
+ return reinterpret_cast<T*>(&_gc_data);
+ }
+
// Exception handling
// (Note: _pending_exception and friends are in ThreadShadow)
//oop _pending_exception; // pending exception for current thread
// const char* _exception_file; // file information for exception (debugging only)
// int _exception_line; // line information for exception (debugging only)
@@ -1057,18 +1070,10 @@
const char* _file;
int _line;
} _jmp_ring[jump_ring_buffer_size];
#endif // PRODUCT
-#if INCLUDE_ALL_GCS
- // Support for G1 barriers
-
- SATBMarkQueue _satb_mark_queue; // Thread-local log for SATB barrier.
-
- DirtyCardQueue _dirty_card_queue; // Thread-local log for dirty cards.
-#endif // INCLUDE_ALL_GCS
-
friend class VMThread;
friend class ThreadWaitTransition;
friend class VM_Exit;
void initialize(); // Initialized the instance variables
@@ -1664,15 +1669,10 @@
static ByteSize do_not_unlock_if_synchronized_offset() { return byte_offset_of(JavaThread, _do_not_unlock_if_synchronized); }
static ByteSize should_post_on_exceptions_flag_offset() {
return byte_offset_of(JavaThread, _should_post_on_exceptions_flag);
}
-#if INCLUDE_ALL_GCS
- static ByteSize satb_mark_queue_offset() { return byte_offset_of(JavaThread, _satb_mark_queue); }
- static ByteSize dirty_card_queue_offset() { return byte_offset_of(JavaThread, _dirty_card_queue); }
-#endif // INCLUDE_ALL_GCS
-
// Returns the jni environment for this thread
JNIEnv* jni_environment() { return &_jni_environment; }
static JavaThread* thread_from_jni_environment(JNIEnv* env) {
JavaThread *thread_from_jni_env = (JavaThread*)((intptr_t)env - in_bytes(jni_environment_offset()));
@@ -1939,18 +1939,10 @@
}
static inline void set_stack_size_at_create(size_t value) {
_stack_size_at_create = value;
}
-#if INCLUDE_ALL_GCS
- // SATB marking queue support
- SATBMarkQueue& satb_mark_queue() { return _satb_mark_queue; }
-
- // Dirty card queue support
- DirtyCardQueue& dirty_card_queue() { return _dirty_card_queue; }
-#endif // INCLUDE_ALL_GCS
-
// Machine dependent stuff
#include OS_CPU_HEADER(thread)
public:
void set_blocked_on_compilation(bool value) {
< prev index next >