149 { \
150 ResourceMark rm(this); \
151 int len = 0; \
152 const char* name = (javathread)->get_thread_name(); \
153 len = strlen(name); \
154 HOTSPOT_THREAD_PROBE_##probe(/* probe = start, stop */ \
155 (char *) name, len, \
156 java_lang_Thread::thread_id((javathread)->threadObj()), \
157 (uintptr_t) (javathread)->osthread()->thread_id(), \
158 java_lang_Thread::is_daemon((javathread)->threadObj())); \
159 }
160
161 #else // ndef DTRACE_ENABLED
162
163 #define DTRACE_THREAD_PROBE(probe, javathread)
164
165 #endif // ndef DTRACE_ENABLED
166
167 #ifndef USE_LIBRARY_BASED_TLS_ONLY
168 // Current thread is maintained as a thread-local variable
169 THREAD_LOCAL_DECL Thread* Thread::_thr_current = NULL;
170 #endif
171
172 // ======= Thread ========
173 // Support for forcing alignment of thread objects for biased locking
174 void* Thread::allocate(size_t size, bool throw_excpt, MEMFLAGS flags) {
175 if (UseBiasedLocking) {
176 const size_t alignment = markWord::biased_lock_alignment;
177 size_t aligned_size = size + (alignment - sizeof(intptr_t));
178 void* real_malloc_addr = throw_excpt? AllocateHeap(aligned_size, flags, CURRENT_PC)
179 : AllocateHeap(aligned_size, flags, CURRENT_PC,
180 AllocFailStrategy::RETURN_NULL);
181 void* aligned_addr = align_up(real_malloc_addr, alignment);
182 assert(((uintptr_t) aligned_addr + (uintptr_t) size) <=
183 ((uintptr_t) real_malloc_addr + (uintptr_t) aligned_size),
184 "JavaThread alignment code overflowed allocated storage");
185 if (aligned_addr != real_malloc_addr) {
186 log_info(biasedlocking)("Aligned thread " INTPTR_FORMAT " to " INTPTR_FORMAT,
187 p2i(real_malloc_addr),
188 p2i(aligned_addr));
189 }
|
149 { \
150 ResourceMark rm(this); \
151 int len = 0; \
152 const char* name = (javathread)->get_thread_name(); \
153 len = strlen(name); \
154 HOTSPOT_THREAD_PROBE_##probe(/* probe = start, stop */ \
155 (char *) name, len, \
156 java_lang_Thread::thread_id((javathread)->threadObj()), \
157 (uintptr_t) (javathread)->osthread()->thread_id(), \
158 java_lang_Thread::is_daemon((javathread)->threadObj())); \
159 }
160
161 #else // ndef DTRACE_ENABLED
162
163 #define DTRACE_THREAD_PROBE(probe, javathread)
164
165 #endif // ndef DTRACE_ENABLED
166
167 #ifndef USE_LIBRARY_BASED_TLS_ONLY
168 // Current thread is maintained as a thread-local variable
169 THREAD_LOCAL Thread* Thread::_thr_current = NULL;
170 #endif
171
172 // ======= Thread ========
173 // Support for forcing alignment of thread objects for biased locking
174 void* Thread::allocate(size_t size, bool throw_excpt, MEMFLAGS flags) {
175 if (UseBiasedLocking) {
176 const size_t alignment = markWord::biased_lock_alignment;
177 size_t aligned_size = size + (alignment - sizeof(intptr_t));
178 void* real_malloc_addr = throw_excpt? AllocateHeap(aligned_size, flags, CURRENT_PC)
179 : AllocateHeap(aligned_size, flags, CURRENT_PC,
180 AllocFailStrategy::RETURN_NULL);
181 void* aligned_addr = align_up(real_malloc_addr, alignment);
182 assert(((uintptr_t) aligned_addr + (uintptr_t) size) <=
183 ((uintptr_t) real_malloc_addr + (uintptr_t) aligned_size),
184 "JavaThread alignment code overflowed allocated storage");
185 if (aligned_addr != real_malloc_addr) {
186 log_info(biasedlocking)("Aligned thread " INTPTR_FORMAT " to " INTPTR_FORMAT,
187 p2i(real_malloc_addr),
188 p2i(aligned_addr));
189 }
|