1 /*
2 * Copyright (c) 1997, 2019, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.
8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 *
23 */
24
25 #include "precompiled.hpp"
26 #include "jvm.h"
27 #include "aot/aotLoader.hpp"
28 #include "classfile/classLoader.hpp"
29 #include "classfile/javaClasses.hpp"
30 #include "classfile/moduleEntry.hpp"
31 #include "classfile/systemDictionary.hpp"
32 #include "classfile/vmSymbols.hpp"
33 #include "code/codeCache.hpp"
34 #include "code/scopeDesc.hpp"
35 #include "compiler/compileBroker.hpp"
36 #include "compiler/compileTask.hpp"
37 #include "gc/shared/barrierSet.hpp"
38 #include "gc/shared/gcId.hpp"
39 #include "gc/shared/gcLocker.inline.hpp"
40 #include "gc/shared/workgroup.hpp"
41 #include "interpreter/interpreter.hpp"
42 #include "interpreter/linkResolver.hpp"
43 #include "interpreter/oopMapCache.hpp"
44 #include "jfr/jfrEvents.hpp"
45 #include "jvmtifiles/jvmtiEnv.hpp"
46 #include "logging/log.hpp"
47 #include "logging/logConfiguration.hpp"
48 #include "logging/logStream.hpp"
49 #include "memory/allocation.inline.hpp"
50 #include "memory/iterator.hpp"
51 #include "memory/metaspaceShared.hpp"
52 #include "memory/oopFactory.hpp"
53 #include "memory/resourceArea.hpp"
54 #include "memory/universe.hpp"
55 #include "oops/access.inline.hpp"
56 #include "oops/instanceKlass.hpp"
57 #include "oops/objArrayOop.hpp"
58 #include "oops/oop.inline.hpp"
59 #include "oops/symbol.hpp"
60 #include "oops/typeArrayOop.inline.hpp"
61 #include "oops/verifyOopClosure.hpp"
62 #include "prims/jvm_misc.hpp"
63 #include "prims/jvmtiExport.hpp"
64 #include "prims/jvmtiThreadState.hpp"
65 #include "runtime/arguments.hpp"
66 #include "runtime/atomic.hpp"
67 #include "runtime/biasedLocking.hpp"
68 #include "runtime/fieldDescriptor.inline.hpp"
69 #include "runtime/flags/jvmFlagConstraintList.hpp"
70 #include "runtime/flags/jvmFlagRangeList.hpp"
71 #include "runtime/flags/jvmFlagWriteableList.hpp"
72 #include "runtime/deoptimization.hpp"
73 #include "runtime/frame.inline.hpp"
74 #include "runtime/handles.inline.hpp"
75 #include "runtime/handshake.hpp"
76 #include "runtime/init.hpp"
77 #include "runtime/interfaceSupport.inline.hpp"
78 #include "runtime/java.hpp"
79 #include "runtime/javaCalls.hpp"
80 #include "runtime/jniHandles.inline.hpp"
81 #include "runtime/jniPeriodicChecker.hpp"
82 #include "runtime/memprofiler.hpp"
83 #include "runtime/mutexLocker.hpp"
84 #include "runtime/objectMonitor.hpp"
85 #include "runtime/orderAccess.hpp"
86 #include "runtime/osThread.hpp"
87 #include "runtime/prefetch.inline.hpp"
88 #include "runtime/safepoint.hpp"
89 #include "runtime/safepointMechanism.inline.hpp"
90 #include "runtime/safepointVerifiers.hpp"
91 #include "runtime/serviceThread.hpp"
92 #include "runtime/sharedRuntime.hpp"
93 #include "runtime/statSampler.hpp"
94 #include "runtime/stubRoutines.hpp"
95 #include "runtime/sweeper.hpp"
96 #include "runtime/task.hpp"
97 #include "runtime/thread.inline.hpp"
98 #include "runtime/threadCritical.hpp"
99 #include "runtime/threadSMR.inline.hpp"
100 #include "runtime/threadStatisticalInfo.hpp"
101 #include "runtime/timer.hpp"
102 #include "runtime/timerTrace.hpp"
103 #include "runtime/vframe.inline.hpp"
104 #include "runtime/vframeArray.hpp"
105 #include "runtime/vframe_hp.hpp"
106 #include "runtime/vmThread.hpp"
107 #include "runtime/vmOperations.hpp"
108 #include "runtime/vm_version.hpp"
109 #include "services/attachListener.hpp"
110 #include "services/management.hpp"
111 #include "services/memTracker.hpp"
112 #include "services/threadService.hpp"
113 #include "utilities/align.hpp"
114 #include "utilities/copy.hpp"
115 #include "utilities/defaultStream.hpp"
116 #include "utilities/dtrace.hpp"
117 #include "utilities/events.hpp"
118 #include "utilities/macros.hpp"
119 #include "utilities/preserveException.hpp"
120 #include "utilities/singleWriterSynchronizer.hpp"
121 #include "utilities/vmError.hpp"
122 #if INCLUDE_JVMCI
123 #include "jvmci/jvmci.hpp"
124 #include "jvmci/jvmciEnv.hpp"
125 #endif
126 #ifdef COMPILER1
127 #include "c1/c1_Compiler.hpp"
128 #endif
129 #ifdef COMPILER2
130 #include "opto/c2compiler.hpp"
131 #include "opto/idealGraphPrinter.hpp"
132 #endif
133 #if INCLUDE_RTM_OPT
134 #include "runtime/rtmLocking.hpp"
135 #endif
136 #if INCLUDE_JFR
137 #include "jfr/jfr.hpp"
138 #endif
139
140 // Initialization after module runtime initialization
141 void universe_post_module_init(); // must happen after call_initPhase2
142
143 #ifdef DTRACE_ENABLED
144
145 // Only bother with this argument setup if dtrace is available
146
147 #define HOTSPOT_THREAD_PROBE_start HOTSPOT_THREAD_START
148 #define HOTSPOT_THREAD_PROBE_stop HOTSPOT_THREAD_STOP
149
150 #define DTRACE_THREAD_PROBE(probe, javathread) \
151 { \
152 ResourceMark rm(this); \
153 int len = 0; \
154 const char* name = (javathread)->get_thread_name(); \
155 len = strlen(name); \
156 HOTSPOT_THREAD_PROBE_##probe(/* probe = start, stop */ \
157 (char *) name, len, \
158 java_lang_Thread::thread_id((javathread)->threadObj()), \
159 (uintptr_t) (javathread)->osthread()->thread_id(), \
160 java_lang_Thread::is_daemon((javathread)->threadObj())); \
161 }
162
163 #else // ndef DTRACE_ENABLED
164
165 #define DTRACE_THREAD_PROBE(probe, javathread)
166
167 #endif // ndef DTRACE_ENABLED
168
169 #ifndef USE_LIBRARY_BASED_TLS_ONLY
170 // Current thread is maintained as a thread-local variable
171 THREAD_LOCAL Thread* Thread::_thr_current = NULL;
172 #endif
173
174 // ======= Thread ========
175 // Support for forcing alignment of thread objects for biased locking
allocate(size_t size,bool throw_excpt,MEMFLAGS flags)176 void* Thread::allocate(size_t size, bool throw_excpt, MEMFLAGS flags) {
177 if (UseBiasedLocking) {
178 const size_t alignment = markWord::biased_lock_alignment;
179 size_t aligned_size = size + (alignment - sizeof(intptr_t));
180 void* real_malloc_addr = throw_excpt? AllocateHeap(aligned_size, flags, CURRENT_PC)
181 : AllocateHeap(aligned_size, flags, CURRENT_PC,
182 AllocFailStrategy::RETURN_NULL);
183 void* aligned_addr = align_up(real_malloc_addr, alignment);
184 assert(((uintptr_t) aligned_addr + (uintptr_t) size) <=
185 ((uintptr_t) real_malloc_addr + (uintptr_t) aligned_size),
186 "JavaThread alignment code overflowed allocated storage");
187 if (aligned_addr != real_malloc_addr) {
188 log_info(biasedlocking)("Aligned thread " INTPTR_FORMAT " to " INTPTR_FORMAT,
189 p2i(real_malloc_addr),
190 p2i(aligned_addr));
191 }
192 ((Thread*) aligned_addr)->_real_malloc_address = real_malloc_addr;
193 return aligned_addr;
194 } else {
195 return throw_excpt? AllocateHeap(size, flags, CURRENT_PC)
196 : AllocateHeap(size, flags, CURRENT_PC, AllocFailStrategy::RETURN_NULL);
197 }
198 }
199
operator delete(void * p)200 void Thread::operator delete(void* p) {
201 if (UseBiasedLocking) {
202 FreeHeap(((Thread*) p)->_real_malloc_address);
203 } else {
204 FreeHeap(p);
205 }
206 }
207
smr_delete()208 void JavaThread::smr_delete() {
209 if (_on_thread_list) {
210 ThreadsSMRSupport::smr_delete(this);
211 } else {
212 delete this;
213 }
214 }
215
216 // Base class for all threads: VMThread, WatcherThread, ConcurrentMarkSweepThread,
217 // JavaThread
218
DEBUG_ONLY(Thread * Thread::_starting_thread=NULL;)219 DEBUG_ONLY(Thread* Thread::_starting_thread = NULL;)
220
221 Thread::Thread() {
222
223 DEBUG_ONLY(_run_state = PRE_CALL_RUN;)
224
225 // stack and get_thread
226 set_stack_base(NULL);
227 set_stack_size(0);
228 set_lgrp_id(-1);
229 DEBUG_ONLY(clear_suspendible_thread();)
230
231 // allocated data structures
232 set_osthread(NULL);
233 set_resource_area(new (mtThread)ResourceArea());
234 DEBUG_ONLY(_current_resource_mark = NULL;)
235 set_handle_area(new (mtThread) HandleArea(NULL));
236 set_metadata_handles(new (ResourceObj::C_HEAP, mtClass) GrowableArray<Metadata*>(30, true));
237 set_active_handles(NULL);
238 set_free_handle_block(NULL);
239 set_last_handle_mark(NULL);
240 DEBUG_ONLY(_missed_ic_stub_refill_verifier = NULL);
241
242 // Initial value of zero ==> never claimed.
243 _threads_do_token = 0;
244 _threads_hazard_ptr = NULL;
245 _threads_list_ptr = NULL;
246 _nested_threads_hazard_ptr_cnt = 0;
247 _rcu_counter = 0;
248
249 // the handle mark links itself to last_handle_mark
250 new HandleMark(this);
251
252 // plain initialization
253 debug_only(_owned_locks = NULL;)
254 NOT_PRODUCT(_no_safepoint_count = 0;)
255 NOT_PRODUCT(_skip_gcalot = false;)
256 _jvmti_env_iteration_count = 0;
257 set_allocated_bytes(0);
258 _vm_operation_started_count = 0;
259 _vm_operation_completed_count = 0;
260 _current_pending_monitor = NULL;
261 _current_pending_monitor_is_from_java = true;
262 _current_waiting_monitor = NULL;
263 _current_pending_raw_monitor = NULL;
264 _num_nested_signal = 0;
265 om_free_list = NULL;
266 om_free_count = 0;
267 om_free_provision = 32;
268 om_in_use_list = NULL;
269 om_in_use_count = 0;
270
271 #ifdef ASSERT
272 _visited_for_critical_count = false;
273 #endif
274
275 _SR_lock = new Monitor(Mutex::suspend_resume, "SR_lock", true,
276 Monitor::_safepoint_check_sometimes);
277 _suspend_flags = 0;
278
279 // thread-specific hashCode stream generator state - Marsaglia shift-xor form
280 _hashStateX = os::random();
281 _hashStateY = 842502087;
282 _hashStateZ = 0x8767; // (int)(3579807591LL & 0xffff) ;
283 _hashStateW = 273326509;
284
285 _OnTrap = 0;
286 _Stalled = 0;
287 _TypeTag = 0x2BAD;
288
289 // Many of the following fields are effectively final - immutable
290 // Note that nascent threads can't use the Native Monitor-Mutex
291 // construct until the _MutexEvent is initialized ...
292 // CONSIDER: instead of using a fixed set of purpose-dedicated ParkEvents
293 // we might instead use a stack of ParkEvents that we could provision on-demand.
294 // The stack would act as a cache to avoid calls to ParkEvent::Allocate()
295 // and ::Release()
296 _ParkEvent = ParkEvent::Allocate(this);
297 _MuxEvent = ParkEvent::Allocate(this);
298
299 #ifdef CHECK_UNHANDLED_OOPS
300 if (CheckUnhandledOops) {
301 _unhandled_oops = new UnhandledOops(this);
302 }
303 #endif // CHECK_UNHANDLED_OOPS
304 #ifdef ASSERT
305 if (UseBiasedLocking) {
306 assert(is_aligned(this, markWord::biased_lock_alignment), "forced alignment of thread object failed");
307 assert(this == _real_malloc_address ||
308 this == align_up(_real_malloc_address, markWord::biased_lock_alignment),
309 "bug in forced alignment of thread objects");
310 }
311 #endif // ASSERT
312
313 // Notify the barrier set that a thread is being created. The initial
314 // thread is created before the barrier set is available. The call to
315 // BarrierSet::on_thread_create() for this thread is therefore deferred
316 // to BarrierSet::set_barrier_set().
317 BarrierSet* const barrier_set = BarrierSet::barrier_set();
318 if (barrier_set != NULL) {
319 barrier_set->on_thread_create(this);
320 } else {
321 // Only the main thread should be created before the barrier set
322 // and that happens just before Thread::current is set. No other thread
323 // can attach as the VM is not created yet, so they can't execute this code.
324 // If the main thread creates other threads before the barrier set that is an error.
325 assert(Thread::current_or_null() == NULL, "creating thread before barrier set");
326 }
327 }
328
initialize_thread_current()329 void Thread::initialize_thread_current() {
330 #ifndef USE_LIBRARY_BASED_TLS_ONLY
331 assert(_thr_current == NULL, "Thread::current already initialized");
332 _thr_current = this;
333 #endif
334 assert(ThreadLocalStorage::thread() == NULL, "ThreadLocalStorage::thread already initialized");
335 ThreadLocalStorage::set_thread(this);
336 assert(Thread::current() == ThreadLocalStorage::thread(), "TLS mismatch!");
337 }
338
clear_thread_current()339 void Thread::clear_thread_current() {
340 assert(Thread::current() == ThreadLocalStorage::thread(), "TLS mismatch!");
341 #ifndef USE_LIBRARY_BASED_TLS_ONLY
342 _thr_current = NULL;
343 #endif
344 ThreadLocalStorage::set_thread(NULL);
345 }
346
record_stack_base_and_size()347 void Thread::record_stack_base_and_size() {
348 // Note: at this point, Thread object is not yet initialized. Do not rely on
349 // any members being initialized. Do not rely on Thread::current() being set.
350 // If possible, refrain from doing anything which may crash or assert since
351 // quite probably those crash dumps will be useless.
352 set_stack_base(os::current_stack_base());
353 set_stack_size(os::current_stack_size());
354
355 #ifdef SOLARIS
356 if (os::is_primordial_thread()) {
357 os::Solaris::correct_stack_boundaries_for_primordial_thread(this);
358 }
359 #endif
360
361 // Set stack limits after thread is initialized.
362 if (is_Java_thread()) {
363 ((JavaThread*) this)->set_stack_overflow_limit();
364 ((JavaThread*) this)->set_reserved_stack_activation(stack_base());
365 }
366 }
367
368 #if INCLUDE_NMT
register_thread_stack_with_NMT()369 void Thread::register_thread_stack_with_NMT() {
370 MemTracker::record_thread_stack(stack_end(), stack_size());
371 }
372 #endif // INCLUDE_NMT
373
call_run()374 void Thread::call_run() {
375 DEBUG_ONLY(_run_state = CALL_RUN;)
376
377 // At this point, Thread object should be fully initialized and
378 // Thread::current() should be set.
379
380 assert(Thread::current_or_null() != NULL, "current thread is unset");
381 assert(Thread::current_or_null() == this, "current thread is wrong");
382
383 // Perform common initialization actions
384
385 register_thread_stack_with_NMT();
386
387 JFR_ONLY(Jfr::on_thread_start(this);)
388
389 log_debug(os, thread)("Thread " UINTX_FORMAT " stack dimensions: "
390 PTR_FORMAT "-" PTR_FORMAT " (" SIZE_FORMAT "k).",
391 os::current_thread_id(), p2i(stack_base() - stack_size()),
392 p2i(stack_base()), stack_size()/1024);
393
394 // Perform <ChildClass> initialization actions
395 DEBUG_ONLY(_run_state = PRE_RUN;)
396 this->pre_run();
397
398 // Invoke <ChildClass>::run()
399 DEBUG_ONLY(_run_state = RUN;)
400 this->run();
401 // Returned from <ChildClass>::run(). Thread finished.
402
403 // Perform common tear-down actions
404
405 assert(Thread::current_or_null() != NULL, "current thread is unset");
406 assert(Thread::current_or_null() == this, "current thread is wrong");
407
408 // Perform <ChildClass> tear-down actions
409 DEBUG_ONLY(_run_state = POST_RUN;)
410 this->post_run();
411
412 // Note: at this point the thread object may already have deleted itself,
413 // so from here on do not dereference *this*. Not all thread types currently
414 // delete themselves when they terminate. But no thread should ever be deleted
415 // asynchronously with respect to its termination - that is what _run_state can
416 // be used to check.
417
418 assert(Thread::current_or_null() == NULL, "current thread still present");
419 }
420
~Thread()421 Thread::~Thread() {
422
423 // Attached threads will remain in PRE_CALL_RUN, as will threads that don't actually
424 // get started due to errors etc. Any active thread should at least reach post_run
425 // before it is deleted (usually in post_run()).
426 assert(_run_state == PRE_CALL_RUN ||
427 _run_state == POST_RUN, "Active Thread deleted before post_run(): "
428 "_run_state=%d", (int)_run_state);
429
430 // Notify the barrier set that a thread is being destroyed. Note that a barrier
431 // set might not be available if we encountered errors during bootstrapping.
432 BarrierSet* const barrier_set = BarrierSet::barrier_set();
433 if (barrier_set != NULL) {
434 barrier_set->on_thread_destroy(this);
435 }
436
437 // stack_base can be NULL if the thread is never started or exited before
438 // record_stack_base_and_size called. Although, we would like to ensure
439 // that all started threads do call record_stack_base_and_size(), there is
440 // not proper way to enforce that.
441 #if INCLUDE_NMT
442 if (_stack_base != NULL) {
443 MemTracker::release_thread_stack(stack_end(), stack_size());
444 #ifdef ASSERT
445 set_stack_base(NULL);
446 #endif
447 }
448 #endif // INCLUDE_NMT
449
450 // deallocate data structures
451 delete resource_area();
452 // since the handle marks are using the handle area, we have to deallocated the root
453 // handle mark before deallocating the thread's handle area,
454 assert(last_handle_mark() != NULL, "check we have an element");
455 delete last_handle_mark();
456 assert(last_handle_mark() == NULL, "check we have reached the end");
457
458 // It's possible we can encounter a null _ParkEvent, etc., in stillborn threads.
459 // We NULL out the fields for good hygiene.
460 ParkEvent::Release(_ParkEvent); _ParkEvent = NULL;
461 ParkEvent::Release(_MuxEvent); _MuxEvent = NULL;
462
463 delete handle_area();
464 delete metadata_handles();
465
466 // SR_handler uses this as a termination indicator -
467 // needs to happen before os::free_thread()
468 delete _SR_lock;
469 _SR_lock = NULL;
470
471 // osthread() can be NULL, if creation of thread failed.
472 if (osthread() != NULL) os::free_thread(osthread());
473
474 // Clear Thread::current if thread is deleting itself and it has not
475 // already been done. This must be done before the memory is deallocated.
476 // Needed to ensure JNI correctly detects non-attached threads.
477 if (this == Thread::current_or_null()) {
478 Thread::clear_thread_current();
479 }
480
481 CHECK_UNHANDLED_OOPS_ONLY(if (CheckUnhandledOops) delete unhandled_oops();)
482 }
483
484 #ifdef ASSERT
485 // A JavaThread is considered "dangling" if it is not the current
486 // thread, has been added the Threads list, the system is not at a
487 // safepoint and the Thread is not "protected".
488 //
check_for_dangling_thread_pointer(Thread * thread)489 void Thread::check_for_dangling_thread_pointer(Thread *thread) {
490 assert(!thread->is_Java_thread() || Thread::current() == thread ||
491 !((JavaThread *) thread)->on_thread_list() ||
492 SafepointSynchronize::is_at_safepoint() ||
493 ThreadsSMRSupport::is_a_protected_JavaThread_with_lock((JavaThread *) thread),
494 "possibility of dangling Thread pointer");
495 }
496 #endif
497
get_priority(const Thread * const thread)498 ThreadPriority Thread::get_priority(const Thread* const thread) {
499 ThreadPriority priority;
500 // Can return an error!
501 (void)os::get_priority(thread, priority);
502 assert(MinPriority <= priority && priority <= MaxPriority, "non-Java priority found");
503 return priority;
504 }
505
set_priority(Thread * thread,ThreadPriority priority)506 void Thread::set_priority(Thread* thread, ThreadPriority priority) {
507 debug_only(check_for_dangling_thread_pointer(thread);)
508 // Can return an error!
509 (void)os::set_priority(thread, priority);
510 }
511
512
start(Thread * thread)513 void Thread::start(Thread* thread) {
514 // Start is different from resume in that its safety is guaranteed by context or
515 // being called from a Java method synchronized on the Thread object.
516 if (!DisableStartThread) {
517 if (thread->is_Java_thread()) {
518 // Initialize the thread state to RUNNABLE before starting this thread.
519 // Can not set it after the thread started because we do not know the
520 // exact thread state at that time. It could be in MONITOR_WAIT or
521 // in SLEEPING or some other state.
522 java_lang_Thread::set_thread_status(((JavaThread*)thread)->threadObj(),
523 java_lang_Thread::RUNNABLE);
524 }
525 os::start_thread(thread);
526 }
527 }
528
send_async_exception(oop java_thread,oop java_throwable)529 void Thread::send_async_exception(oop java_thread, oop java_throwable) {
530 VM_ThreadStop vm_stop(java_thread, java_throwable);
531 VMThread::execute(&vm_stop);
532 }
533
534
535 // Check if an external suspend request has completed (or has been
536 // cancelled). Returns true if the thread is externally suspended and
537 // false otherwise.
538 //
539 // The bits parameter returns information about the code path through
540 // the routine. Useful for debugging:
541 //
542 // set in is_ext_suspend_completed():
543 // 0x00000001 - routine was entered
544 // 0x00000010 - routine return false at end
545 // 0x00000100 - thread exited (return false)
546 // 0x00000200 - suspend request cancelled (return false)
547 // 0x00000400 - thread suspended (return true)
548 // 0x00001000 - thread is in a suspend equivalent state (return true)
549 // 0x00002000 - thread is native and walkable (return true)
550 // 0x00004000 - thread is native_trans and walkable (needed retry)
551 //
552 // set in wait_for_ext_suspend_completion():
553 // 0x00010000 - routine was entered
554 // 0x00020000 - suspend request cancelled before loop (return false)
555 // 0x00040000 - thread suspended before loop (return true)
556 // 0x00080000 - suspend request cancelled in loop (return false)
557 // 0x00100000 - thread suspended in loop (return true)
558 // 0x00200000 - suspend not completed during retry loop (return false)
559
560 // Helper class for tracing suspend wait debug bits.
561 //
562 // 0x00000100 indicates that the target thread exited before it could
563 // self-suspend which is not a wait failure. 0x00000200, 0x00020000 and
564 // 0x00080000 each indicate a cancelled suspend request so they don't
565 // count as wait failures either.
566 #define DEBUG_FALSE_BITS (0x00000010 | 0x00200000)
567
568 class TraceSuspendDebugBits : public StackObj {
569 private:
570 JavaThread * jt;
571 bool is_wait;
572 bool called_by_wait; // meaningful when !is_wait
573 uint32_t * bits;
574
575 public:
TraceSuspendDebugBits(JavaThread * _jt,bool _is_wait,bool _called_by_wait,uint32_t * _bits)576 TraceSuspendDebugBits(JavaThread *_jt, bool _is_wait, bool _called_by_wait,
577 uint32_t *_bits) {
578 jt = _jt;
579 is_wait = _is_wait;
580 called_by_wait = _called_by_wait;
581 bits = _bits;
582 }
583
~TraceSuspendDebugBits()584 ~TraceSuspendDebugBits() {
585 if (!is_wait) {
586 #if 1
587 // By default, don't trace bits for is_ext_suspend_completed() calls.
588 // That trace is very chatty.
589 return;
590 #else
591 if (!called_by_wait) {
592 // If tracing for is_ext_suspend_completed() is enabled, then only
593 // trace calls to it from wait_for_ext_suspend_completion()
594 return;
595 }
596 #endif
597 }
598
599 if (AssertOnSuspendWaitFailure || TraceSuspendWaitFailures) {
600 if (bits != NULL && (*bits & DEBUG_FALSE_BITS) != 0) {
601 MutexLocker ml(Threads_lock); // needed for get_thread_name()
602 ResourceMark rm;
603
604 tty->print_cr(
605 "Failed wait_for_ext_suspend_completion(thread=%s, debug_bits=%x)",
606 jt->get_thread_name(), *bits);
607
608 guarantee(!AssertOnSuspendWaitFailure, "external suspend wait failed");
609 }
610 }
611 }
612 };
613 #undef DEBUG_FALSE_BITS
614
615
is_ext_suspend_completed(bool called_by_wait,int delay,uint32_t * bits)616 bool JavaThread::is_ext_suspend_completed(bool called_by_wait, int delay,
617 uint32_t *bits) {
618 TraceSuspendDebugBits tsdb(this, false /* !is_wait */, called_by_wait, bits);
619
620 bool did_trans_retry = false; // only do thread_in_native_trans retry once
621 bool do_trans_retry; // flag to force the retry
622
623 *bits |= 0x00000001;
624
625 do {
626 do_trans_retry = false;
627
628 if (is_exiting()) {
629 // Thread is in the process of exiting. This is always checked
630 // first to reduce the risk of dereferencing a freed JavaThread.
631 *bits |= 0x00000100;
632 return false;
633 }
634
635 if (!is_external_suspend()) {
636 // Suspend request is cancelled. This is always checked before
637 // is_ext_suspended() to reduce the risk of a rogue resume
638 // confusing the thread that made the suspend request.
639 *bits |= 0x00000200;
640 return false;
641 }
642
643 if (is_ext_suspended()) {
644 // thread is suspended
645 *bits |= 0x00000400;
646 return true;
647 }
648
649 // Now that we no longer do hard suspends of threads running
650 // native code, the target thread can be changing thread state
651 // while we are in this routine:
652 //
653 // _thread_in_native -> _thread_in_native_trans -> _thread_blocked
654 //
655 // We save a copy of the thread state as observed at this moment
656 // and make our decision about suspend completeness based on the
657 // copy. This closes the race where the thread state is seen as
658 // _thread_in_native_trans in the if-thread_blocked check, but is
659 // seen as _thread_blocked in if-thread_in_native_trans check.
660 JavaThreadState save_state = thread_state();
661
662 if (save_state == _thread_blocked && is_suspend_equivalent()) {
663 // If the thread's state is _thread_blocked and this blocking
664 // condition is known to be equivalent to a suspend, then we can
665 // consider the thread to be externally suspended. This means that
666 // the code that sets _thread_blocked has been modified to do
667 // self-suspension if the blocking condition releases. We also
668 // used to check for CONDVAR_WAIT here, but that is now covered by
669 // the _thread_blocked with self-suspension check.
670 //
671 // Return true since we wouldn't be here unless there was still an
672 // external suspend request.
673 *bits |= 0x00001000;
674 return true;
675 } else if (save_state == _thread_in_native && frame_anchor()->walkable()) {
676 // Threads running native code will self-suspend on native==>VM/Java
677 // transitions. If its stack is walkable (should always be the case
678 // unless this function is called before the actual java_suspend()
679 // call), then the wait is done.
680 *bits |= 0x00002000;
681 return true;
682 } else if (!called_by_wait && !did_trans_retry &&
683 save_state == _thread_in_native_trans &&
684 frame_anchor()->walkable()) {
685 // The thread is transitioning from thread_in_native to another
686 // thread state. check_safepoint_and_suspend_for_native_trans()
687 // will force the thread to self-suspend. If it hasn't gotten
688 // there yet we may have caught the thread in-between the native
689 // code check above and the self-suspend. Lucky us. If we were
690 // called by wait_for_ext_suspend_completion(), then it
691 // will be doing the retries so we don't have to.
692 //
693 // Since we use the saved thread state in the if-statement above,
694 // there is a chance that the thread has already transitioned to
695 // _thread_blocked by the time we get here. In that case, we will
696 // make a single unnecessary pass through the logic below. This
697 // doesn't hurt anything since we still do the trans retry.
698
699 *bits |= 0x00004000;
700
701 // Once the thread leaves thread_in_native_trans for another
702 // thread state, we break out of this retry loop. We shouldn't
703 // need this flag to prevent us from getting back here, but
704 // sometimes paranoia is good.
705 did_trans_retry = true;
706
707 // We wait for the thread to transition to a more usable state.
708 for (int i = 1; i <= SuspendRetryCount; i++) {
709 // We used to do an "os::yield_all(i)" call here with the intention
710 // that yielding would increase on each retry. However, the parameter
711 // is ignored on Linux which means the yield didn't scale up. Waiting
712 // on the SR_lock below provides a much more predictable scale up for
713 // the delay. It also provides a simple/direct point to check for any
714 // safepoint requests from the VMThread
715
716 // temporarily drops SR_lock while doing wait with safepoint check
717 // (if we're a JavaThread - the WatcherThread can also call this)
718 // and increase delay with each retry
719 if (Thread::current()->is_Java_thread()) {
720 SR_lock()->wait(i * delay);
721 } else {
722 SR_lock()->wait_without_safepoint_check(i * delay);
723 }
724
725 // check the actual thread state instead of what we saved above
726 if (thread_state() != _thread_in_native_trans) {
727 // the thread has transitioned to another thread state so
728 // try all the checks (except this one) one more time.
729 do_trans_retry = true;
730 break;
731 }
732 } // end retry loop
733
734
735 }
736 } while (do_trans_retry);
737
738 *bits |= 0x00000010;
739 return false;
740 }
741
742 // Wait for an external suspend request to complete (or be cancelled).
743 // Returns true if the thread is externally suspended and false otherwise.
744 //
wait_for_ext_suspend_completion(int retries,int delay,uint32_t * bits)745 bool JavaThread::wait_for_ext_suspend_completion(int retries, int delay,
746 uint32_t *bits) {
747 TraceSuspendDebugBits tsdb(this, true /* is_wait */,
748 false /* !called_by_wait */, bits);
749
750 // local flag copies to minimize SR_lock hold time
751 bool is_suspended;
752 bool pending;
753 uint32_t reset_bits;
754
755 // set a marker so is_ext_suspend_completed() knows we are the caller
756 *bits |= 0x00010000;
757
758 // We use reset_bits to reinitialize the bits value at the top of
759 // each retry loop. This allows the caller to make use of any
760 // unused bits for their own marking purposes.
761 reset_bits = *bits;
762
763 {
764 MutexLocker ml(SR_lock(), Mutex::_no_safepoint_check_flag);
765 is_suspended = is_ext_suspend_completed(true /* called_by_wait */,
766 delay, bits);
767 pending = is_external_suspend();
768 }
769 // must release SR_lock to allow suspension to complete
770
771 if (!pending) {
772 // A cancelled suspend request is the only false return from
773 // is_ext_suspend_completed() that keeps us from entering the
774 // retry loop.
775 *bits |= 0x00020000;
776 return false;
777 }
778
779 if (is_suspended) {
780 *bits |= 0x00040000;
781 return true;
782 }
783
784 for (int i = 1; i <= retries; i++) {
785 *bits = reset_bits; // reinit to only track last retry
786
787 // We used to do an "os::yield_all(i)" call here with the intention
788 // that yielding would increase on each retry. However, the parameter
789 // is ignored on Linux which means the yield didn't scale up. Waiting
790 // on the SR_lock below provides a much more predictable scale up for
791 // the delay. It also provides a simple/direct point to check for any
792 // safepoint requests from the VMThread
793
794 {
795 Thread* t = Thread::current();
796 MonitorLocker ml(SR_lock(),
797 t->is_Java_thread() ? Mutex::_safepoint_check_flag : Mutex::_no_safepoint_check_flag);
798 // wait with safepoint check (if we're a JavaThread - the WatcherThread
799 // can also call this) and increase delay with each retry
800 ml.wait(i * delay);
801
802 is_suspended = is_ext_suspend_completed(true /* called_by_wait */,
803 delay, bits);
804
805 // It is possible for the external suspend request to be cancelled
806 // (by a resume) before the actual suspend operation is completed.
807 // Refresh our local copy to see if we still need to wait.
808 pending = is_external_suspend();
809 }
810
811 if (!pending) {
812 // A cancelled suspend request is the only false return from
813 // is_ext_suspend_completed() that keeps us from staying in the
814 // retry loop.
815 *bits |= 0x00080000;
816 return false;
817 }
818
819 if (is_suspended) {
820 *bits |= 0x00100000;
821 return true;
822 }
823 } // end retry loop
824
825 // thread did not suspend after all our retries
826 *bits |= 0x00200000;
827 return false;
828 }
829
830 // Called from API entry points which perform stack walking. If the
831 // associated JavaThread is the current thread, then wait_for_suspend
832 // is not used. Otherwise, it determines if we should wait for the
833 // "other" thread to complete external suspension. (NOTE: in future
834 // releases the suspension mechanism should be reimplemented so this
835 // is not necessary.)
836 //
837 bool
is_thread_fully_suspended(bool wait_for_suspend,uint32_t * bits)838 JavaThread::is_thread_fully_suspended(bool wait_for_suspend, uint32_t *bits) {
839 if (this != JavaThread::current()) {
840 // "other" threads require special handling.
841 if (wait_for_suspend) {
842 // We are allowed to wait for the external suspend to complete
843 // so give the other thread a chance to get suspended.
844 if (!wait_for_ext_suspend_completion(SuspendRetryCount,
845 SuspendRetryDelay, bits)) {
846 // Didn't make it so let the caller know.
847 return false;
848 }
849 }
850 // We aren't allowed to wait for the external suspend to complete
851 // so if the other thread isn't externally suspended we need to
852 // let the caller know.
853 else if (!is_ext_suspend_completed_with_lock(bits)) {
854 return false;
855 }
856 }
857
858 return true;
859 }
860
861 // GC Support
claim_par_threads_do(uintx claim_token)862 bool Thread::claim_par_threads_do(uintx claim_token) {
863 uintx token = _threads_do_token;
864 if (token != claim_token) {
865 uintx res = Atomic::cmpxchg(&_threads_do_token, token, claim_token);
866 if (res == token) {
867 return true;
868 }
869 guarantee(res == claim_token, "invariant");
870 }
871 return false;
872 }
873
oops_do(OopClosure * f,CodeBlobClosure * cf)874 void Thread::oops_do(OopClosure* f, CodeBlobClosure* cf) {
875 if (active_handles() != NULL) {
876 active_handles()->oops_do(f);
877 }
878 // Do oop for ThreadShadow
879 f->do_oop((oop*)&_pending_exception);
880 handle_area()->oops_do(f);
881
882 // We scan thread local monitor lists here, and the remaining global
883 // monitors in ObjectSynchronizer::oops_do().
884 ObjectSynchronizer::thread_local_used_oops_do(this, f);
885 }
886
metadata_handles_do(void f (Metadata *))887 void Thread::metadata_handles_do(void f(Metadata*)) {
888 // Only walk the Handles in Thread.
889 if (metadata_handles() != NULL) {
890 for (int i = 0; i< metadata_handles()->length(); i++) {
891 f(metadata_handles()->at(i));
892 }
893 }
894 }
895
print_on(outputStream * st,bool print_extended_info) const896 void Thread::print_on(outputStream* st, bool print_extended_info) const {
897 // get_priority assumes osthread initialized
898 if (osthread() != NULL) {
899 int os_prio;
900 if (os::get_native_priority(this, &os_prio) == OS_OK) {
901 st->print("os_prio=%d ", os_prio);
902 }
903
904 st->print("cpu=%.2fms ",
905 os::thread_cpu_time(const_cast<Thread*>(this), true) / 1000000.0
906 );
907 st->print("elapsed=%.2fs ",
908 _statistical_info.getElapsedTime() / 1000.0
909 );
910 if (is_Java_thread() && (PrintExtendedThreadInfo || print_extended_info)) {
911 size_t allocated_bytes = (size_t) const_cast<Thread*>(this)->cooked_allocated_bytes();
912 st->print("allocated=" SIZE_FORMAT "%s ",
913 byte_size_in_proper_unit(allocated_bytes),
914 proper_unit_for_byte_size(allocated_bytes)
915 );
916 st->print("defined_classes=" INT64_FORMAT " ", _statistical_info.getDefineClassCount());
917 }
918
919 st->print("tid=" INTPTR_FORMAT " ", p2i(this));
920 osthread()->print_on(st);
921 }
922 ThreadsSMRSupport::print_info_on(this, st);
923 st->print(" ");
924 debug_only(if (WizardMode) print_owned_locks_on(st);)
925 }
926
print() const927 void Thread::print() const { print_on(tty); }
928
929 // Thread::print_on_error() is called by fatal error handler. Don't use
930 // any lock or allocate memory.
print_on_error(outputStream * st,char * buf,int buflen) const931 void Thread::print_on_error(outputStream* st, char* buf, int buflen) const {
932 assert(!(is_Compiler_thread() || is_Java_thread()), "Can't call name() here if it allocates");
933
934 if (is_VM_thread()) { st->print("VMThread"); }
935 else if (is_GC_task_thread()) { st->print("GCTaskThread"); }
936 else if (is_Watcher_thread()) { st->print("WatcherThread"); }
937 else if (is_ConcurrentGC_thread()) { st->print("ConcurrentGCThread"); }
938 else { st->print("Thread"); }
939
940 if (is_Named_thread()) {
941 st->print(" \"%s\"", name());
942 }
943
944 st->print(" [stack: " PTR_FORMAT "," PTR_FORMAT "]",
945 p2i(stack_end()), p2i(stack_base()));
946
947 if (osthread()) {
948 st->print(" [id=%d]", osthread()->thread_id());
949 }
950
951 ThreadsSMRSupport::print_info_on(this, st);
952 }
953
print_value_on(outputStream * st) const954 void Thread::print_value_on(outputStream* st) const {
955 if (is_Named_thread()) {
956 st->print(" \"%s\" ", name());
957 }
958 st->print(INTPTR_FORMAT, p2i(this)); // print address
959 }
960
961 #ifdef ASSERT
print_owned_locks_on(outputStream * st) const962 void Thread::print_owned_locks_on(outputStream* st) const {
963 Mutex* cur = _owned_locks;
964 if (cur == NULL) {
965 st->print(" (no locks) ");
966 } else {
967 st->print_cr(" Locks owned:");
968 while (cur) {
969 cur->print_on(st);
970 cur = cur->next();
971 }
972 }
973 }
974
975 // Checks safepoint allowed and clears unhandled oops at potential safepoints.
check_possible_safepoint()976 void Thread::check_possible_safepoint() {
977 if (!is_Java_thread()) return;
978
979 if (_no_safepoint_count > 0) {
980 print_owned_locks();
981 fatal("Possible safepoint reached by thread that does not allow it");
982 }
983 #ifdef CHECK_UNHANDLED_OOPS
984 // Clear unhandled oops in JavaThreads so we get a crash right away.
985 clear_unhandled_oops();
986 #endif // CHECK_UNHANDLED_OOPS
987 }
988
check_for_valid_safepoint_state()989 void Thread::check_for_valid_safepoint_state() {
990 if (!is_Java_thread()) return;
991
992 // Check NoSafepointVerifier, which is implied by locks taken that can be
993 // shared with the VM thread. This makes sure that no locks with allow_vm_block
994 // are held.
995 check_possible_safepoint();
996
997 if (((JavaThread*)this)->thread_state() != _thread_in_vm) {
998 fatal("LEAF method calling lock?");
999 }
1000
1001 if (GCALotAtAllSafepoints) {
1002 // We could enter a safepoint here and thus have a gc
1003 InterfaceSupport::check_gc_alot();
1004 }
1005 }
1006 #endif // ASSERT
1007
is_in_stack(address adr) const1008 bool Thread::is_in_stack(address adr) const {
1009 assert(Thread::current() == this, "is_in_stack can only be called from current thread");
1010 address end = os::current_stack_pointer();
1011 // Allow non Java threads to call this without stack_base
1012 if (_stack_base == NULL) return true;
1013 if (stack_base() > adr && adr >= end) return true;
1014
1015 return false;
1016 }
1017
is_in_usable_stack(address adr) const1018 bool Thread::is_in_usable_stack(address adr) const {
1019 size_t stack_guard_size = os::uses_stack_guard_pages() ? JavaThread::stack_guard_zone_size() : 0;
1020 size_t usable_stack_size = _stack_size - stack_guard_size;
1021
1022 return ((adr < stack_base()) && (adr >= stack_base() - usable_stack_size));
1023 }
1024
1025
1026 // We had to move these methods here, because vm threads get into ObjectSynchronizer::enter
1027 // However, there is a note in JavaThread::is_lock_owned() about the VM threads not being
1028 // used for compilation in the future. If that change is made, the need for these methods
1029 // should be revisited, and they should be removed if possible.
1030
is_lock_owned(address adr) const1031 bool Thread::is_lock_owned(address adr) const {
1032 return on_local_stack(adr);
1033 }
1034
set_as_starting_thread()1035 bool Thread::set_as_starting_thread() {
1036 assert(_starting_thread == NULL, "already initialized: "
1037 "_starting_thread=" INTPTR_FORMAT, p2i(_starting_thread));
1038 // NOTE: this must be called inside the main thread.
1039 DEBUG_ONLY(_starting_thread = this;)
1040 return os::create_main_thread((JavaThread*)this);
1041 }
1042
initialize_class(Symbol * class_name,TRAPS)1043 static void initialize_class(Symbol* class_name, TRAPS) {
1044 Klass* klass = SystemDictionary::resolve_or_fail(class_name, true, CHECK);
1045 InstanceKlass::cast(klass)->initialize(CHECK);
1046 }
1047
1048
1049 // Creates the initial ThreadGroup
create_initial_thread_group(TRAPS)1050 static Handle create_initial_thread_group(TRAPS) {
1051 Handle system_instance = JavaCalls::construct_new_instance(
1052 SystemDictionary::ThreadGroup_klass(),
1053 vmSymbols::void_method_signature(),
1054 CHECK_NH);
1055 Universe::set_system_thread_group(system_instance());
1056
1057 Handle string = java_lang_String::create_from_str("main", CHECK_NH);
1058 Handle main_instance = JavaCalls::construct_new_instance(
1059 SystemDictionary::ThreadGroup_klass(),
1060 vmSymbols::threadgroup_string_void_signature(),
1061 system_instance,
1062 string,
1063 CHECK_NH);
1064 return main_instance;
1065 }
1066
1067 // Creates the initial Thread
create_initial_thread(Handle thread_group,JavaThread * thread,TRAPS)1068 static oop create_initial_thread(Handle thread_group, JavaThread* thread,
1069 TRAPS) {
1070 InstanceKlass* ik = SystemDictionary::Thread_klass();
1071 assert(ik->is_initialized(), "must be");
1072 instanceHandle thread_oop = ik->allocate_instance_handle(CHECK_NULL);
1073
1074 // Cannot use JavaCalls::construct_new_instance because the java.lang.Thread
1075 // constructor calls Thread.current(), which must be set here for the
1076 // initial thread.
1077 java_lang_Thread::set_thread(thread_oop(), thread);
1078 java_lang_Thread::set_priority(thread_oop(), NormPriority);
1079 thread->set_threadObj(thread_oop());
1080
1081 Handle string = java_lang_String::create_from_str("main", CHECK_NULL);
1082
1083 JavaValue result(T_VOID);
1084 JavaCalls::call_special(&result, thread_oop,
1085 ik,
1086 vmSymbols::object_initializer_name(),
1087 vmSymbols::threadgroup_string_void_signature(),
1088 thread_group,
1089 string,
1090 CHECK_NULL);
1091 return thread_oop();
1092 }
1093
1094 char java_runtime_name[128] = "";
1095 char java_runtime_version[128] = "";
1096 char java_runtime_vendor_version[128] = "";
1097 char java_runtime_vendor_vm_bug_url[128] = "";
1098
1099 // extract the JRE name from java.lang.VersionProps.java_runtime_name
get_java_runtime_name(TRAPS)1100 static const char* get_java_runtime_name(TRAPS) {
1101 Klass* k = SystemDictionary::find(vmSymbols::java_lang_VersionProps(),
1102 Handle(), Handle(), CHECK_AND_CLEAR_NULL);
1103 fieldDescriptor fd;
1104 bool found = k != NULL &&
1105 InstanceKlass::cast(k)->find_local_field(vmSymbols::java_runtime_name_name(),
1106 vmSymbols::string_signature(), &fd);
1107 if (found) {
1108 oop name_oop = k->java_mirror()->obj_field(fd.offset());
1109 if (name_oop == NULL) {
1110 return NULL;
1111 }
1112 const char* name = java_lang_String::as_utf8_string(name_oop,
1113 java_runtime_name,
1114 sizeof(java_runtime_name));
1115 return name;
1116 } else {
1117 return NULL;
1118 }
1119 }
1120
1121 // extract the JRE version from java.lang.VersionProps.java_runtime_version
get_java_runtime_version(TRAPS)1122 static const char* get_java_runtime_version(TRAPS) {
1123 Klass* k = SystemDictionary::find(vmSymbols::java_lang_VersionProps(),
1124 Handle(), Handle(), CHECK_AND_CLEAR_NULL);
1125 fieldDescriptor fd;
1126 bool found = k != NULL &&
1127 InstanceKlass::cast(k)->find_local_field(vmSymbols::java_runtime_version_name(),
1128 vmSymbols::string_signature(), &fd);
1129 if (found) {
1130 oop name_oop = k->java_mirror()->obj_field(fd.offset());
1131 if (name_oop == NULL) {
1132 return NULL;
1133 }
1134 const char* name = java_lang_String::as_utf8_string(name_oop,
1135 java_runtime_version,
1136 sizeof(java_runtime_version));
1137 return name;
1138 } else {
1139 return NULL;
1140 }
1141 }
1142
1143 // extract the JRE vendor version from java.lang.VersionProps.VENDOR_VERSION
get_java_runtime_vendor_version(TRAPS)1144 static const char* get_java_runtime_vendor_version(TRAPS) {
1145 Klass* k = SystemDictionary::find(vmSymbols::java_lang_VersionProps(),
1146 Handle(), Handle(), CHECK_AND_CLEAR_NULL);
1147 fieldDescriptor fd;
1148 bool found = k != NULL &&
1149 InstanceKlass::cast(k)->find_local_field(vmSymbols::java_runtime_vendor_version_name(),
1150 vmSymbols::string_signature(), &fd);
1151 if (found) {
1152 oop name_oop = k->java_mirror()->obj_field(fd.offset());
1153 if (name_oop == NULL) {
1154 return NULL;
1155 }
1156 const char* name = java_lang_String::as_utf8_string(name_oop,
1157 java_runtime_vendor_version,
1158 sizeof(java_runtime_vendor_version));
1159 return name;
1160 } else {
1161 return NULL;
1162 }
1163 }
1164
1165 // extract the JRE vendor VM bug URL from java.lang.VersionProps.VENDOR_URL_VM_BUG
get_java_runtime_vendor_vm_bug_url(TRAPS)1166 static const char* get_java_runtime_vendor_vm_bug_url(TRAPS) {
1167 Klass* k = SystemDictionary::find(vmSymbols::java_lang_VersionProps(),
1168 Handle(), Handle(), CHECK_AND_CLEAR_NULL);
1169 fieldDescriptor fd;
1170 bool found = k != NULL &&
1171 InstanceKlass::cast(k)->find_local_field(vmSymbols::java_runtime_vendor_vm_bug_url_name(),
1172 vmSymbols::string_signature(), &fd);
1173 if (found) {
1174 oop name_oop = k->java_mirror()->obj_field(fd.offset());
1175 if (name_oop == NULL) {
1176 return NULL;
1177 }
1178 const char* name = java_lang_String::as_utf8_string(name_oop,
1179 java_runtime_vendor_vm_bug_url,
1180 sizeof(java_runtime_vendor_vm_bug_url));
1181 return name;
1182 } else {
1183 return NULL;
1184 }
1185 }
1186
1187 // General purpose hook into Java code, run once when the VM is initialized.
1188 // The Java library method itself may be changed independently from the VM.
call_postVMInitHook(TRAPS)1189 static void call_postVMInitHook(TRAPS) {
1190 Klass* klass = SystemDictionary::resolve_or_null(vmSymbols::jdk_internal_vm_PostVMInitHook(), THREAD);
1191 if (klass != NULL) {
1192 JavaValue result(T_VOID);
1193 JavaCalls::call_static(&result, klass, vmSymbols::run_method_name(),
1194 vmSymbols::void_method_signature(),
1195 CHECK);
1196 }
1197 }
1198
allocate_threadObj(Handle thread_group,const char * thread_name,bool daemon,TRAPS)1199 void JavaThread::allocate_threadObj(Handle thread_group, const char* thread_name,
1200 bool daemon, TRAPS) {
1201 assert(thread_group.not_null(), "thread group should be specified");
1202 assert(threadObj() == NULL, "should only create Java thread object once");
1203
1204 InstanceKlass* ik = SystemDictionary::Thread_klass();
1205 assert(ik->is_initialized(), "must be");
1206 instanceHandle thread_oop = ik->allocate_instance_handle(CHECK);
1207
1208 // We are called from jni_AttachCurrentThread/jni_AttachCurrentThreadAsDaemon.
1209 // We cannot use JavaCalls::construct_new_instance because the java.lang.Thread
1210 // constructor calls Thread.current(), which must be set here.
1211 java_lang_Thread::set_thread(thread_oop(), this);
1212 java_lang_Thread::set_priority(thread_oop(), NormPriority);
1213 set_threadObj(thread_oop());
1214
1215 JavaValue result(T_VOID);
1216 if (thread_name != NULL) {
1217 Handle name = java_lang_String::create_from_str(thread_name, CHECK);
1218 // Thread gets assigned specified name and null target
1219 JavaCalls::call_special(&result,
1220 thread_oop,
1221 ik,
1222 vmSymbols::object_initializer_name(),
1223 vmSymbols::threadgroup_string_void_signature(),
1224 thread_group,
1225 name,
1226 THREAD);
1227 } else {
1228 // Thread gets assigned name "Thread-nnn" and null target
1229 // (java.lang.Thread doesn't have a constructor taking only a ThreadGroup argument)
1230 JavaCalls::call_special(&result,
1231 thread_oop,
1232 ik,
1233 vmSymbols::object_initializer_name(),
1234 vmSymbols::threadgroup_runnable_void_signature(),
1235 thread_group,
1236 Handle(),
1237 THREAD);
1238 }
1239
1240
1241 if (daemon) {
1242 java_lang_Thread::set_daemon(thread_oop());
1243 }
1244
1245 if (HAS_PENDING_EXCEPTION) {
1246 return;
1247 }
1248
1249 Klass* group = SystemDictionary::ThreadGroup_klass();
1250 Handle threadObj(THREAD, this->threadObj());
1251
1252 JavaCalls::call_special(&result,
1253 thread_group,
1254 group,
1255 vmSymbols::add_method_name(),
1256 vmSymbols::thread_void_signature(),
1257 threadObj, // Arg 1
1258 THREAD);
1259 }
1260
1261 // List of all NonJavaThreads and safe iteration over that list.
1262
1263 class NonJavaThread::List {
1264 public:
1265 NonJavaThread* volatile _head;
1266 SingleWriterSynchronizer _protect;
1267
List()1268 List() : _head(NULL), _protect() {}
1269 };
1270
1271 NonJavaThread::List NonJavaThread::_the_list;
1272
Iterator()1273 NonJavaThread::Iterator::Iterator() :
1274 _protect_enter(_the_list._protect.enter()),
1275 _current(Atomic::load_acquire(&_the_list._head))
1276 {}
1277
~Iterator()1278 NonJavaThread::Iterator::~Iterator() {
1279 _the_list._protect.exit(_protect_enter);
1280 }
1281
step()1282 void NonJavaThread::Iterator::step() {
1283 assert(!end(), "precondition");
1284 _current = Atomic::load_acquire(&_current->_next);
1285 }
1286
NonJavaThread()1287 NonJavaThread::NonJavaThread() : Thread(), _next(NULL) {
1288 assert(BarrierSet::barrier_set() != NULL, "NonJavaThread created too soon!");
1289 }
1290
~NonJavaThread()1291 NonJavaThread::~NonJavaThread() { }
1292
add_to_the_list()1293 void NonJavaThread::add_to_the_list() {
1294 MutexLocker ml(NonJavaThreadsList_lock, Mutex::_no_safepoint_check_flag);
1295 // Initialize BarrierSet-related data before adding to list.
1296 BarrierSet::barrier_set()->on_thread_attach(this);
1297 Atomic::release_store(&_next, _the_list._head);
1298 Atomic::release_store(&_the_list._head, this);
1299 }
1300
remove_from_the_list()1301 void NonJavaThread::remove_from_the_list() {
1302 {
1303 MutexLocker ml(NonJavaThreadsList_lock, Mutex::_no_safepoint_check_flag);
1304 // Cleanup BarrierSet-related data before removing from list.
1305 BarrierSet::barrier_set()->on_thread_detach(this);
1306 NonJavaThread* volatile* p = &_the_list._head;
1307 for (NonJavaThread* t = *p; t != NULL; p = &t->_next, t = *p) {
1308 if (t == this) {
1309 *p = _next;
1310 break;
1311 }
1312 }
1313 }
1314 // Wait for any in-progress iterators. Concurrent synchronize is not
1315 // allowed, so do it while holding a dedicated lock. Outside and distinct
1316 // from NJTList_lock in case an iteration attempts to lock it.
1317 MutexLocker ml(NonJavaThreadsListSync_lock, Mutex::_no_safepoint_check_flag);
1318 _the_list._protect.synchronize();
1319 _next = NULL; // Safe to drop the link now.
1320 }
1321
pre_run()1322 void NonJavaThread::pre_run() {
1323 add_to_the_list();
1324
1325 // This is slightly odd in that NamedThread is a subclass, but
1326 // in fact name() is defined in Thread
1327 assert(this->name() != NULL, "thread name was not set before it was started");
1328 this->set_native_thread_name(this->name());
1329 }
1330
post_run()1331 void NonJavaThread::post_run() {
1332 JFR_ONLY(Jfr::on_thread_exit(this);)
1333 remove_from_the_list();
1334 // Ensure thread-local-storage is cleared before termination.
1335 Thread::clear_thread_current();
1336 }
1337
1338 // NamedThread -- non-JavaThread subclasses with multiple
1339 // uniquely named instances should derive from this.
NamedThread()1340 NamedThread::NamedThread() :
1341 NonJavaThread(),
1342 _name(NULL),
1343 _processed_thread(NULL),
1344 _gc_id(GCId::undefined())
1345 {}
1346
~NamedThread()1347 NamedThread::~NamedThread() {
1348 FREE_C_HEAP_ARRAY(char, _name);
1349 }
1350
set_name(const char * format,...)1351 void NamedThread::set_name(const char* format, ...) {
1352 guarantee(_name == NULL, "Only get to set name once.");
1353 _name = NEW_C_HEAP_ARRAY(char, max_name_len, mtThread);
1354 va_list ap;
1355 va_start(ap, format);
1356 jio_vsnprintf(_name, max_name_len, format, ap);
1357 va_end(ap);
1358 }
1359
print_on(outputStream * st) const1360 void NamedThread::print_on(outputStream* st) const {
1361 st->print("\"%s\" ", name());
1362 Thread::print_on(st);
1363 st->cr();
1364 }
1365
1366
1367 // ======= WatcherThread ========
1368
1369 // The watcher thread exists to simulate timer interrupts. It should
1370 // be replaced by an abstraction over whatever native support for
1371 // timer interrupts exists on the platform.
1372
1373 WatcherThread* WatcherThread::_watcher_thread = NULL;
1374 bool WatcherThread::_startable = false;
1375 volatile bool WatcherThread::_should_terminate = false;
1376
WatcherThread()1377 WatcherThread::WatcherThread() : NonJavaThread() {
1378 assert(watcher_thread() == NULL, "we can only allocate one WatcherThread");
1379 if (os::create_thread(this, os::watcher_thread)) {
1380 _watcher_thread = this;
1381
1382 // Set the watcher thread to the highest OS priority which should not be
1383 // used, unless a Java thread with priority java.lang.Thread.MAX_PRIORITY
1384 // is created. The only normal thread using this priority is the reference
1385 // handler thread, which runs for very short intervals only.
1386 // If the VMThread's priority is not lower than the WatcherThread profiling
1387 // will be inaccurate.
1388 os::set_priority(this, MaxPriority);
1389 if (!DisableStartThread) {
1390 os::start_thread(this);
1391 }
1392 }
1393 }
1394
sleep() const1395 int WatcherThread::sleep() const {
1396 // The WatcherThread does not participate in the safepoint protocol
1397 // for the PeriodicTask_lock because it is not a JavaThread.
1398 MonitorLocker ml(PeriodicTask_lock, Mutex::_no_safepoint_check_flag);
1399
1400 if (_should_terminate) {
1401 // check for termination before we do any housekeeping or wait
1402 return 0; // we did not sleep.
1403 }
1404
1405 // remaining will be zero if there are no tasks,
1406 // causing the WatcherThread to sleep until a task is
1407 // enrolled
1408 int remaining = PeriodicTask::time_to_wait();
1409 int time_slept = 0;
1410
1411 // we expect this to timeout - we only ever get unparked when
1412 // we should terminate or when a new task has been enrolled
1413 OSThreadWaitState osts(this->osthread(), false /* not Object.wait() */);
1414
1415 jlong time_before_loop = os::javaTimeNanos();
1416
1417 while (true) {
1418 bool timedout = ml.wait(remaining);
1419 jlong now = os::javaTimeNanos();
1420
1421 if (remaining == 0) {
1422 // if we didn't have any tasks we could have waited for a long time
1423 // consider the time_slept zero and reset time_before_loop
1424 time_slept = 0;
1425 time_before_loop = now;
1426 } else {
1427 // need to recalculate since we might have new tasks in _tasks
1428 time_slept = (int) ((now - time_before_loop) / 1000000);
1429 }
1430
1431 // Change to task list or spurious wakeup of some kind
1432 if (timedout || _should_terminate) {
1433 break;
1434 }
1435
1436 remaining = PeriodicTask::time_to_wait();
1437 if (remaining == 0) {
1438 // Last task was just disenrolled so loop around and wait until
1439 // another task gets enrolled
1440 continue;
1441 }
1442
1443 remaining -= time_slept;
1444 if (remaining <= 0) {
1445 break;
1446 }
1447 }
1448
1449 return time_slept;
1450 }
1451
run()1452 void WatcherThread::run() {
1453 assert(this == watcher_thread(), "just checking");
1454
1455 this->set_active_handles(JNIHandleBlock::allocate_block());
1456 while (true) {
1457 assert(watcher_thread() == Thread::current(), "thread consistency check");
1458 assert(watcher_thread() == this, "thread consistency check");
1459
1460 // Calculate how long it'll be until the next PeriodicTask work
1461 // should be done, and sleep that amount of time.
1462 int time_waited = sleep();
1463
1464 if (VMError::is_error_reported()) {
1465 // A fatal error has happened, the error handler(VMError::report_and_die)
1466 // should abort JVM after creating an error log file. However in some
1467 // rare cases, the error handler itself might deadlock. Here periodically
1468 // check for error reporting timeouts, and if it happens, just proceed to
1469 // abort the VM.
1470
1471 // This code is in WatcherThread because WatcherThread wakes up
1472 // periodically so the fatal error handler doesn't need to do anything;
1473 // also because the WatcherThread is less likely to crash than other
1474 // threads.
1475
1476 for (;;) {
1477 // Note: we use naked sleep in this loop because we want to avoid using
1478 // any kind of VM infrastructure which may be broken at this point.
1479 if (VMError::check_timeout()) {
1480 // We hit error reporting timeout. Error reporting was interrupted and
1481 // will be wrapping things up now (closing files etc). Give it some more
1482 // time, then quit the VM.
1483 os::naked_short_sleep(200);
1484 // Print a message to stderr.
1485 fdStream err(defaultStream::output_fd());
1486 err.print_raw_cr("# [ timer expired, abort... ]");
1487 // skip atexit/vm_exit/vm_abort hooks
1488 os::die();
1489 }
1490
1491 // Wait a second, then recheck for timeout.
1492 os::naked_short_sleep(999);
1493 }
1494 }
1495
1496 if (_should_terminate) {
1497 // check for termination before posting the next tick
1498 break;
1499 }
1500
1501 PeriodicTask::real_time_tick(time_waited);
1502 }
1503
1504 // Signal that it is terminated
1505 {
1506 MutexLocker mu(Terminator_lock, Mutex::_no_safepoint_check_flag);
1507 _watcher_thread = NULL;
1508 Terminator_lock->notify_all();
1509 }
1510 }
1511
start()1512 void WatcherThread::start() {
1513 assert(PeriodicTask_lock->owned_by_self(), "PeriodicTask_lock required");
1514
1515 if (watcher_thread() == NULL && _startable) {
1516 _should_terminate = false;
1517 // Create the single instance of WatcherThread
1518 new WatcherThread();
1519 }
1520 }
1521
make_startable()1522 void WatcherThread::make_startable() {
1523 assert(PeriodicTask_lock->owned_by_self(), "PeriodicTask_lock required");
1524 _startable = true;
1525 }
1526
stop()1527 void WatcherThread::stop() {
1528 {
1529 // Follow normal safepoint aware lock enter protocol since the
1530 // WatcherThread is stopped by another JavaThread.
1531 MutexLocker ml(PeriodicTask_lock);
1532 _should_terminate = true;
1533
1534 WatcherThread* watcher = watcher_thread();
1535 if (watcher != NULL) {
1536 // unpark the WatcherThread so it can see that it should terminate
1537 watcher->unpark();
1538 }
1539 }
1540
1541 MonitorLocker mu(Terminator_lock);
1542
1543 while (watcher_thread() != NULL) {
1544 // This wait should make safepoint checks, wait without a timeout,
1545 // and wait as a suspend-equivalent condition.
1546 mu.wait(0, Mutex::_as_suspend_equivalent_flag);
1547 }
1548 }
1549
unpark()1550 void WatcherThread::unpark() {
1551 assert(PeriodicTask_lock->owned_by_self(), "PeriodicTask_lock required");
1552 PeriodicTask_lock->notify();
1553 }
1554
print_on(outputStream * st) const1555 void WatcherThread::print_on(outputStream* st) const {
1556 st->print("\"%s\" ", name());
1557 Thread::print_on(st);
1558 st->cr();
1559 }
1560
1561 // ======= JavaThread ========
1562
1563 #if INCLUDE_JVMCI
1564
1565 jlong* JavaThread::_jvmci_old_thread_counters;
1566
jvmci_counters_include(JavaThread * thread)1567 bool jvmci_counters_include(JavaThread* thread) {
1568 return !JVMCICountersExcludeCompiler || !thread->is_Compiler_thread();
1569 }
1570
collect_counters(jlong * array,int length)1571 void JavaThread::collect_counters(jlong* array, int length) {
1572 assert(length == JVMCICounterSize, "wrong value");
1573 for (int i = 0; i < length; i++) {
1574 array[i] = _jvmci_old_thread_counters[i];
1575 }
1576 for (JavaThreadIteratorWithHandle jtiwh; JavaThread *tp = jtiwh.next(); ) {
1577 if (jvmci_counters_include(tp)) {
1578 for (int i = 0; i < length; i++) {
1579 array[i] += tp->_jvmci_counters[i];
1580 }
1581 }
1582 }
1583 }
1584
1585 // Attempt to enlarge the array for per thread counters.
resize_counters_array(jlong * old_counters,int current_size,int new_size)1586 jlong* resize_counters_array(jlong* old_counters, int current_size, int new_size) {
1587 jlong* new_counters = NEW_C_HEAP_ARRAY(jlong, new_size, mtJVMCI);
1588 if (old_counters == NULL) {
1589 old_counters = new_counters;
1590 memset(old_counters, 0, sizeof(jlong) * new_size);
1591 } else {
1592 for (int i = 0; i < MIN2((int) current_size, new_size); i++) {
1593 new_counters[i] = old_counters[i];
1594 }
1595 if (new_size > current_size) {
1596 memset(new_counters + current_size, 0, sizeof(jlong) * (new_size - current_size));
1597 }
1598 FREE_C_HEAP_ARRAY(jlong, old_counters);
1599 }
1600 return new_counters;
1601 }
1602
1603 // Attempt to enlarge the array for per thread counters.
resize_counters(int current_size,int new_size)1604 void JavaThread::resize_counters(int current_size, int new_size) {
1605 _jvmci_counters = resize_counters_array(_jvmci_counters, current_size, new_size);
1606 }
1607
1608 class VM_JVMCIResizeCounters : public VM_Operation {
1609 private:
1610 int _new_size;
1611
1612 public:
VM_JVMCIResizeCounters(int new_size)1613 VM_JVMCIResizeCounters(int new_size) : _new_size(new_size) { }
type() const1614 VMOp_Type type() const { return VMOp_JVMCIResizeCounters; }
allow_nested_vm_operations() const1615 bool allow_nested_vm_operations() const { return true; }
doit()1616 void doit() {
1617 // Resize the old thread counters array
1618 jlong* new_counters = resize_counters_array(JavaThread::_jvmci_old_thread_counters, JVMCICounterSize, _new_size);
1619 JavaThread::_jvmci_old_thread_counters = new_counters;
1620
1621 // Now resize each threads array
1622 for (JavaThreadIteratorWithHandle jtiwh; JavaThread *tp = jtiwh.next(); ) {
1623 tp->resize_counters(JVMCICounterSize, _new_size);
1624 }
1625 JVMCICounterSize = _new_size;
1626 }
1627 };
1628
resize_all_jvmci_counters(int new_size)1629 void JavaThread::resize_all_jvmci_counters(int new_size) {
1630 VM_JVMCIResizeCounters op(new_size);
1631 VMThread::execute(&op);
1632 }
1633
1634 #endif // INCLUDE_JVMCI
1635
1636 // A JavaThread is a normal Java thread
1637
initialize()1638 void JavaThread::initialize() {
1639 // Initialize fields
1640
1641 set_saved_exception_pc(NULL);
1642 set_threadObj(NULL);
1643 _anchor.clear();
1644 set_entry_point(NULL);
1645 set_jni_functions(jni_functions());
1646 set_callee_target(NULL);
1647 set_vm_result(NULL);
1648 set_vm_result_2(NULL);
1649 set_vframe_array_head(NULL);
1650 set_vframe_array_last(NULL);
1651 set_deferred_locals(NULL);
1652 set_deopt_mark(NULL);
1653 set_deopt_compiled_method(NULL);
1654 set_monitor_chunks(NULL);
1655 _on_thread_list = false;
1656 _thread_state = _thread_new;
1657 _terminated = _not_terminated;
1658 _array_for_gc = NULL;
1659 _suspend_equivalent = false;
1660 _in_deopt_handler = 0;
1661 _doing_unsafe_access = false;
1662 _stack_guard_state = stack_guard_unused;
1663 #if INCLUDE_JVMCI
1664 _pending_monitorenter = false;
1665 _pending_deoptimization = -1;
1666 _pending_failed_speculation = 0;
1667 _pending_transfer_to_interpreter = false;
1668 _in_retryable_allocation = false;
1669 _jvmci._alternate_call_target = NULL;
1670 assert(_jvmci._implicit_exception_pc == NULL, "must be");
1671 _jvmci_counters = NULL;
1672 if (JVMCICounterSize > 0) {
1673 resize_counters(0, (int) JVMCICounterSize);
1674 }
1675 #endif // INCLUDE_JVMCI
1676 _reserved_stack_activation = NULL; // stack base not known yet
1677 (void)const_cast<oop&>(_exception_oop = oop(NULL));
1678 _exception_pc = 0;
1679 _exception_handler_pc = 0;
1680 _is_method_handle_return = 0;
1681 _jvmti_thread_state= NULL;
1682 _should_post_on_exceptions_flag = JNI_FALSE;
1683 _interp_only_mode = 0;
1684 _special_runtime_exit_condition = _no_async_condition;
1685 _pending_async_exception = NULL;
1686 _thread_stat = NULL;
1687 _thread_stat = new ThreadStatistics();
1688 _jni_active_critical = 0;
1689 _pending_jni_exception_check_fn = NULL;
1690 _do_not_unlock_if_synchronized = false;
1691 _cached_monitor_info = NULL;
1692 _parker = Parker::Allocate(this);
1693 _SleepEvent = ParkEvent::Allocate(this);
1694 // Setup safepoint state info for this thread
1695 ThreadSafepointState::create(this);
1696
1697 debug_only(_java_call_counter = 0);
1698
1699 // JVMTI PopFrame support
1700 _popframe_condition = popframe_inactive;
1701 _popframe_preserved_args = NULL;
1702 _popframe_preserved_args_size = 0;
1703 _frames_to_pop_failed_realloc = 0;
1704
1705 if (SafepointMechanism::uses_thread_local_poll()) {
1706 SafepointMechanism::initialize_header(this);
1707 }
1708
1709 _class_to_be_initialized = NULL;
1710
1711 pd_initialize();
1712 }
1713
JavaThread(bool is_attaching_via_jni)1714 JavaThread::JavaThread(bool is_attaching_via_jni) :
1715 Thread() {
1716 initialize();
1717 if (is_attaching_via_jni) {
1718 _jni_attach_state = _attaching_via_jni;
1719 } else {
1720 _jni_attach_state = _not_attaching_via_jni;
1721 }
1722 assert(deferred_card_mark().is_empty(), "Default MemRegion ctor");
1723 }
1724
1725
1726 // interrupt support
1727
interrupt()1728 void JavaThread::interrupt() {
1729 debug_only(check_for_dangling_thread_pointer(this);)
1730
1731 // For Windows _interrupt_event
1732 osthread()->set_interrupted(true);
1733
1734 // For Thread.sleep
1735 _SleepEvent->unpark();
1736
1737 // For JSR166 LockSupport.park
1738 parker()->unpark();
1739
1740 // For ObjectMonitor and JvmtiRawMonitor
1741 _ParkEvent->unpark();
1742 }
1743
1744
is_interrupted(bool clear_interrupted)1745 bool JavaThread::is_interrupted(bool clear_interrupted) {
1746 debug_only(check_for_dangling_thread_pointer(this);)
1747
1748 if (threadObj() == NULL) {
1749 // If there is no j.l.Thread then it is impossible to have
1750 // been interrupted. We can find NULL during VM initialization
1751 // or when a JNI thread is still in the process of attaching.
1752 // In such cases this must be the current thread.
1753 assert(this == Thread::current(), "invariant");
1754 return false;
1755 }
1756
1757 bool interrupted = java_lang_Thread::interrupted(threadObj());
1758
1759 // NOTE that since there is no "lock" around the interrupt and
1760 // is_interrupted operations, there is the possibility that the
1761 // interrupted flag will be "false" but that the
1762 // low-level events will be in the signaled state. This is
1763 // intentional. The effect of this is that Object.wait() and
1764 // LockSupport.park() will appear to have a spurious wakeup, which
1765 // is allowed and not harmful, and the possibility is so rare that
1766 // it is not worth the added complexity to add yet another lock.
1767 // For the sleep event an explicit reset is performed on entry
1768 // to JavaThread::sleep, so there is no early return. It has also been
1769 // recommended not to put the interrupted flag into the "event"
1770 // structure because it hides the issue.
1771 // Also, because there is no lock, we must only clear the interrupt
1772 // state if we are going to report that we were interrupted; otherwise
1773 // an interrupt that happens just after we read the field would be lost.
1774 if (interrupted && clear_interrupted) {
1775 assert(this == Thread::current(), "only the current thread can clear");
1776 java_lang_Thread::set_interrupted(threadObj(), false);
1777 osthread()->set_interrupted(false);
1778 }
1779
1780 return interrupted;
1781 }
1782
reguard_stack(address cur_sp)1783 bool JavaThread::reguard_stack(address cur_sp) {
1784 if (_stack_guard_state != stack_guard_yellow_reserved_disabled
1785 && _stack_guard_state != stack_guard_reserved_disabled) {
1786 return true; // Stack already guarded or guard pages not needed.
1787 }
1788
1789 if (register_stack_overflow()) {
1790 // For those architectures which have separate register and
1791 // memory stacks, we must check the register stack to see if
1792 // it has overflowed.
1793 return false;
1794 }
1795
1796 // Java code never executes within the yellow zone: the latter is only
1797 // there to provoke an exception during stack banging. If java code
1798 // is executing there, either StackShadowPages should be larger, or
1799 // some exception code in c1, c2 or the interpreter isn't unwinding
1800 // when it should.
1801 guarantee(cur_sp > stack_reserved_zone_base(),
1802 "not enough space to reguard - increase StackShadowPages");
1803 if (_stack_guard_state == stack_guard_yellow_reserved_disabled) {
1804 enable_stack_yellow_reserved_zone();
1805 if (reserved_stack_activation() != stack_base()) {
1806 set_reserved_stack_activation(stack_base());
1807 }
1808 } else if (_stack_guard_state == stack_guard_reserved_disabled) {
1809 set_reserved_stack_activation(stack_base());
1810 enable_stack_reserved_zone();
1811 }
1812 return true;
1813 }
1814
reguard_stack(void)1815 bool JavaThread::reguard_stack(void) {
1816 return reguard_stack(os::current_stack_pointer());
1817 }
1818
1819
block_if_vm_exited()1820 void JavaThread::block_if_vm_exited() {
1821 if (_terminated == _vm_exited) {
1822 // _vm_exited is set at safepoint, and Threads_lock is never released
1823 // we will block here forever.
1824 // Here we can be doing a jump from a safe state to an unsafe state without
1825 // proper transition, but it happens after the final safepoint has begun.
1826 set_thread_state(_thread_in_vm);
1827 Threads_lock->lock();
1828 ShouldNotReachHere();
1829 }
1830 }
1831
1832
1833 // Remove this ifdef when C1 is ported to the compiler interface.
1834 static void compiler_thread_entry(JavaThread* thread, TRAPS);
1835 static void sweeper_thread_entry(JavaThread* thread, TRAPS);
1836
JavaThread(ThreadFunction entry_point,size_t stack_sz)1837 JavaThread::JavaThread(ThreadFunction entry_point, size_t stack_sz) :
1838 Thread() {
1839 initialize();
1840 _jni_attach_state = _not_attaching_via_jni;
1841 set_entry_point(entry_point);
1842 // Create the native thread itself.
1843 // %note runtime_23
1844 os::ThreadType thr_type = os::java_thread;
1845 thr_type = entry_point == &compiler_thread_entry ? os::compiler_thread :
1846 os::java_thread;
1847 os::create_thread(this, thr_type, stack_sz);
1848 // The _osthread may be NULL here because we ran out of memory (too many threads active).
1849 // We need to throw and OutOfMemoryError - however we cannot do this here because the caller
1850 // may hold a lock and all locks must be unlocked before throwing the exception (throwing
1851 // the exception consists of creating the exception object & initializing it, initialization
1852 // will leave the VM via a JavaCall and then all locks must be unlocked).
1853 //
1854 // The thread is still suspended when we reach here. Thread must be explicit started
1855 // by creator! Furthermore, the thread must also explicitly be added to the Threads list
1856 // by calling Threads:add. The reason why this is not done here, is because the thread
1857 // object must be fully initialized (take a look at JVM_Start)
1858 }
1859
~JavaThread()1860 JavaThread::~JavaThread() {
1861
1862 // JSR166 -- return the parker to the free list
1863 Parker::Release(_parker);
1864 _parker = NULL;
1865
1866 // Return the sleep event to the free list
1867 ParkEvent::Release(_SleepEvent);
1868 _SleepEvent = NULL;
1869
1870 // Free any remaining previous UnrollBlock
1871 vframeArray* old_array = vframe_array_last();
1872
1873 if (old_array != NULL) {
1874 Deoptimization::UnrollBlock* old_info = old_array->unroll_block();
1875 old_array->set_unroll_block(NULL);
1876 delete old_info;
1877 delete old_array;
1878 }
1879
1880 GrowableArray<jvmtiDeferredLocalVariableSet*>* deferred = deferred_locals();
1881 if (deferred != NULL) {
1882 // This can only happen if thread is destroyed before deoptimization occurs.
1883 assert(deferred->length() != 0, "empty array!");
1884 do {
1885 jvmtiDeferredLocalVariableSet* dlv = deferred->at(0);
1886 deferred->remove_at(0);
1887 // individual jvmtiDeferredLocalVariableSet are CHeapObj's
1888 delete dlv;
1889 } while (deferred->length() != 0);
1890 delete deferred;
1891 }
1892
1893 // All Java related clean up happens in exit
1894 ThreadSafepointState::destroy(this);
1895 if (_thread_stat != NULL) delete _thread_stat;
1896
1897 #if INCLUDE_JVMCI
1898 if (JVMCICounterSize > 0) {
1899 if (jvmci_counters_include(this)) {
1900 for (int i = 0; i < JVMCICounterSize; i++) {
1901 _jvmci_old_thread_counters[i] += _jvmci_counters[i];
1902 }
1903 }
1904 FREE_C_HEAP_ARRAY(jlong, _jvmci_counters);
1905 }
1906 #endif // INCLUDE_JVMCI
1907 }
1908
1909
1910 // First JavaThread specific code executed by a new Java thread.
pre_run()1911 void JavaThread::pre_run() {
1912 // empty - see comments in run()
1913 }
1914
1915 // The main routine called by a new Java thread. This isn't overridden
1916 // by subclasses, instead different subclasses define a different "entry_point"
1917 // which defines the actual logic for that kind of thread.
run()1918 void JavaThread::run() {
1919 // initialize thread-local alloc buffer related fields
1920 this->initialize_tlab();
1921
1922 // Used to test validity of stack trace backs.
1923 // This can't be moved into pre_run() else we invalidate
1924 // the requirement that thread_main_inner is lower on
1925 // the stack. Consequently all the initialization logic
1926 // stays here in run() rather than pre_run().
1927 this->record_base_of_stack_pointer();
1928
1929 this->create_stack_guard_pages();
1930
1931 this->cache_global_variables();
1932
1933 // Thread is now sufficiently initialized to be handled by the safepoint code as being
1934 // in the VM. Change thread state from _thread_new to _thread_in_vm
1935 ThreadStateTransition::transition(this, _thread_new, _thread_in_vm);
1936 // Before a thread is on the threads list it is always safe, so after leaving the
1937 // _thread_new we should emit a instruction barrier. The distance to modified code
1938 // from here is probably far enough, but this is consistent and safe.
1939 OrderAccess::cross_modify_fence();
1940
1941 assert(JavaThread::current() == this, "sanity check");
1942 assert(!Thread::current()->owns_locks(), "sanity check");
1943
1944 DTRACE_THREAD_PROBE(start, this);
1945
1946 // This operation might block. We call that after all safepoint checks for a new thread has
1947 // been completed.
1948 this->set_active_handles(JNIHandleBlock::allocate_block());
1949
1950 if (JvmtiExport::should_post_thread_life()) {
1951 JvmtiExport::post_thread_start(this);
1952
1953 }
1954
1955 // We call another function to do the rest so we are sure that the stack addresses used
1956 // from there will be lower than the stack base just computed.
1957 thread_main_inner();
1958 }
1959
thread_main_inner()1960 void JavaThread::thread_main_inner() {
1961 assert(JavaThread::current() == this, "sanity check");
1962 assert(this->threadObj() != NULL, "just checking");
1963
1964 // Execute thread entry point unless this thread has a pending exception
1965 // or has been stopped before starting.
1966 // Note: Due to JVM_StopThread we can have pending exceptions already!
1967 if (!this->has_pending_exception() &&
1968 !java_lang_Thread::is_stillborn(this->threadObj())) {
1969 {
1970 ResourceMark rm(this);
1971 this->set_native_thread_name(this->get_thread_name());
1972 }
1973 HandleMark hm(this);
1974 this->entry_point()(this, this);
1975 }
1976
1977 DTRACE_THREAD_PROBE(stop, this);
1978
1979 // Cleanup is handled in post_run()
1980 }
1981
1982 // Shared teardown for all JavaThreads
post_run()1983 void JavaThread::post_run() {
1984 this->exit(false);
1985 // Defer deletion to here to ensure 'this' is still referenceable in call_run
1986 // for any shared tear-down.
1987 this->smr_delete();
1988 }
1989
ensure_join(JavaThread * thread)1990 static void ensure_join(JavaThread* thread) {
1991 // We do not need to grab the Threads_lock, since we are operating on ourself.
1992 Handle threadObj(thread, thread->threadObj());
1993 assert(threadObj.not_null(), "java thread object must exist");
1994 ObjectLocker lock(threadObj, thread);
1995 // Ignore pending exception (ThreadDeath), since we are exiting anyway
1996 thread->clear_pending_exception();
1997 // Thread is exiting. So set thread_status field in java.lang.Thread class to TERMINATED.
1998 java_lang_Thread::set_thread_status(threadObj(), java_lang_Thread::TERMINATED);
1999 // Clear the native thread instance - this makes isAlive return false and allows the join()
2000 // to complete once we've done the notify_all below
2001 java_lang_Thread::set_thread(threadObj(), NULL);
2002 lock.notify_all(thread);
2003 // Ignore pending exception (ThreadDeath), since we are exiting anyway
2004 thread->clear_pending_exception();
2005 }
2006
is_daemon(oop threadObj)2007 static bool is_daemon(oop threadObj) {
2008 return (threadObj != NULL && java_lang_Thread::is_daemon(threadObj));
2009 }
2010
2011 // For any new cleanup additions, please check to see if they need to be applied to
2012 // cleanup_failed_attach_current_thread as well.
exit(bool destroy_vm,ExitType exit_type)2013 void JavaThread::exit(bool destroy_vm, ExitType exit_type) {
2014 assert(this == JavaThread::current(), "thread consistency check");
2015
2016 elapsedTimer _timer_exit_phase1;
2017 elapsedTimer _timer_exit_phase2;
2018 elapsedTimer _timer_exit_phase3;
2019 elapsedTimer _timer_exit_phase4;
2020
2021 if (log_is_enabled(Debug, os, thread, timer)) {
2022 _timer_exit_phase1.start();
2023 }
2024
2025 HandleMark hm(this);
2026 Handle uncaught_exception(this, this->pending_exception());
2027 this->clear_pending_exception();
2028 Handle threadObj(this, this->threadObj());
2029 assert(threadObj.not_null(), "Java thread object should be created");
2030
2031 // FIXIT: This code should be moved into else part, when reliable 1.2/1.3 check is in place
2032 {
2033 EXCEPTION_MARK;
2034
2035 CLEAR_PENDING_EXCEPTION;
2036 }
2037 if (!destroy_vm) {
2038 if (uncaught_exception.not_null()) {
2039 EXCEPTION_MARK;
2040 // Call method Thread.dispatchUncaughtException().
2041 Klass* thread_klass = SystemDictionary::Thread_klass();
2042 JavaValue result(T_VOID);
2043 JavaCalls::call_virtual(&result,
2044 threadObj, thread_klass,
2045 vmSymbols::dispatchUncaughtException_name(),
2046 vmSymbols::throwable_void_signature(),
2047 uncaught_exception,
2048 THREAD);
2049 if (HAS_PENDING_EXCEPTION) {
2050 ResourceMark rm(this);
2051 jio_fprintf(defaultStream::error_stream(),
2052 "\nException: %s thrown from the UncaughtExceptionHandler"
2053 " in thread \"%s\"\n",
2054 pending_exception()->klass()->external_name(),
2055 get_thread_name());
2056 CLEAR_PENDING_EXCEPTION;
2057 }
2058 }
2059 JFR_ONLY(Jfr::on_java_thread_dismantle(this);)
2060
2061 // Call Thread.exit(). We try 3 times in case we got another Thread.stop during
2062 // the execution of the method. If that is not enough, then we don't really care. Thread.stop
2063 // is deprecated anyhow.
2064 if (!is_Compiler_thread()) {
2065 int count = 3;
2066 while (java_lang_Thread::threadGroup(threadObj()) != NULL && (count-- > 0)) {
2067 EXCEPTION_MARK;
2068 JavaValue result(T_VOID);
2069 Klass* thread_klass = SystemDictionary::Thread_klass();
2070 JavaCalls::call_virtual(&result,
2071 threadObj, thread_klass,
2072 vmSymbols::exit_method_name(),
2073 vmSymbols::void_method_signature(),
2074 THREAD);
2075 CLEAR_PENDING_EXCEPTION;
2076 }
2077 }
2078 // notify JVMTI
2079 if (JvmtiExport::should_post_thread_life()) {
2080 JvmtiExport::post_thread_end(this);
2081 }
2082
2083 // We have notified the agents that we are exiting, before we go on,
2084 // we must check for a pending external suspend request and honor it
2085 // in order to not surprise the thread that made the suspend request.
2086 while (true) {
2087 {
2088 MutexLocker ml(SR_lock(), Mutex::_no_safepoint_check_flag);
2089 if (!is_external_suspend()) {
2090 set_terminated(_thread_exiting);
2091 ThreadService::current_thread_exiting(this, is_daemon(threadObj()));
2092 break;
2093 }
2094 // Implied else:
2095 // Things get a little tricky here. We have a pending external
2096 // suspend request, but we are holding the SR_lock so we
2097 // can't just self-suspend. So we temporarily drop the lock
2098 // and then self-suspend.
2099 }
2100
2101 ThreadBlockInVM tbivm(this);
2102 java_suspend_self();
2103
2104 // We're done with this suspend request, but we have to loop around
2105 // and check again. Eventually we will get SR_lock without a pending
2106 // external suspend request and will be able to mark ourselves as
2107 // exiting.
2108 }
2109 // no more external suspends are allowed at this point
2110 } else {
2111 assert(!is_terminated() && !is_exiting(), "must not be exiting");
2112 // before_exit() has already posted JVMTI THREAD_END events
2113 }
2114
2115 if (log_is_enabled(Debug, os, thread, timer)) {
2116 _timer_exit_phase1.stop();
2117 _timer_exit_phase2.start();
2118 }
2119
2120 // Capture daemon status before the thread is marked as terminated.
2121 bool daemon = is_daemon(threadObj());
2122
2123 // Notify waiters on thread object. This has to be done after exit() is called
2124 // on the thread (if the thread is the last thread in a daemon ThreadGroup the
2125 // group should have the destroyed bit set before waiters are notified).
2126 ensure_join(this);
2127 assert(!this->has_pending_exception(), "ensure_join should have cleared");
2128
2129 if (log_is_enabled(Debug, os, thread, timer)) {
2130 _timer_exit_phase2.stop();
2131 _timer_exit_phase3.start();
2132 }
2133 // 6282335 JNI DetachCurrentThread spec states that all Java monitors
2134 // held by this thread must be released. The spec does not distinguish
2135 // between JNI-acquired and regular Java monitors. We can only see
2136 // regular Java monitors here if monitor enter-exit matching is broken.
2137 //
2138 // ensure_join() ignores IllegalThreadStateExceptions, and so does
2139 // ObjectSynchronizer::release_monitors_owned_by_thread().
2140 if (exit_type == jni_detach) {
2141 // Sanity check even though JNI DetachCurrentThread() would have
2142 // returned JNI_ERR if there was a Java frame. JavaThread exit
2143 // should be done executing Java code by the time we get here.
2144 assert(!this->has_last_Java_frame(),
2145 "should not have a Java frame when detaching or exiting");
2146 ObjectSynchronizer::release_monitors_owned_by_thread(this);
2147 assert(!this->has_pending_exception(), "release_monitors should have cleared");
2148 }
2149
2150 // These things needs to be done while we are still a Java Thread. Make sure that thread
2151 // is in a consistent state, in case GC happens
2152 JFR_ONLY(Jfr::on_thread_exit(this);)
2153
2154 if (active_handles() != NULL) {
2155 JNIHandleBlock* block = active_handles();
2156 set_active_handles(NULL);
2157 JNIHandleBlock::release_block(block);
2158 }
2159
2160 if (free_handle_block() != NULL) {
2161 JNIHandleBlock* block = free_handle_block();
2162 set_free_handle_block(NULL);
2163 JNIHandleBlock::release_block(block);
2164 }
2165
2166 // These have to be removed while this is still a valid thread.
2167 remove_stack_guard_pages();
2168
2169 if (UseTLAB) {
2170 tlab().retire();
2171 }
2172
2173 if (JvmtiEnv::environments_might_exist()) {
2174 JvmtiExport::cleanup_thread(this);
2175 }
2176
2177 // We must flush any deferred card marks and other various GC barrier
2178 // related buffers (e.g. G1 SATB buffer and G1 dirty card queue buffer)
2179 // before removing a thread from the list of active threads.
2180 BarrierSet::barrier_set()->on_thread_detach(this);
2181
2182 log_info(os, thread)("JavaThread %s (tid: " UINTX_FORMAT ").",
2183 exit_type == JavaThread::normal_exit ? "exiting" : "detaching",
2184 os::current_thread_id());
2185
2186 if (log_is_enabled(Debug, os, thread, timer)) {
2187 _timer_exit_phase3.stop();
2188 _timer_exit_phase4.start();
2189 }
2190 // Remove from list of active threads list, and notify VM thread if we are the last non-daemon thread
2191 Threads::remove(this, daemon);
2192
2193 if (log_is_enabled(Debug, os, thread, timer)) {
2194 _timer_exit_phase4.stop();
2195 ResourceMark rm(this);
2196 log_debug(os, thread, timer)("name='%s'"
2197 ", exit-phase1=" JLONG_FORMAT
2198 ", exit-phase2=" JLONG_FORMAT
2199 ", exit-phase3=" JLONG_FORMAT
2200 ", exit-phase4=" JLONG_FORMAT,
2201 get_thread_name(),
2202 _timer_exit_phase1.milliseconds(),
2203 _timer_exit_phase2.milliseconds(),
2204 _timer_exit_phase3.milliseconds(),
2205 _timer_exit_phase4.milliseconds());
2206 }
2207 }
2208
cleanup_failed_attach_current_thread(bool is_daemon)2209 void JavaThread::cleanup_failed_attach_current_thread(bool is_daemon) {
2210 if (active_handles() != NULL) {
2211 JNIHandleBlock* block = active_handles();
2212 set_active_handles(NULL);
2213 JNIHandleBlock::release_block(block);
2214 }
2215
2216 if (free_handle_block() != NULL) {
2217 JNIHandleBlock* block = free_handle_block();
2218 set_free_handle_block(NULL);
2219 JNIHandleBlock::release_block(block);
2220 }
2221
2222 // These have to be removed while this is still a valid thread.
2223 remove_stack_guard_pages();
2224
2225 if (UseTLAB) {
2226 tlab().retire();
2227 }
2228
2229 BarrierSet::barrier_set()->on_thread_detach(this);
2230
2231 Threads::remove(this, is_daemon);
2232 this->smr_delete();
2233 }
2234
active()2235 JavaThread* JavaThread::active() {
2236 Thread* thread = Thread::current();
2237 if (thread->is_Java_thread()) {
2238 return (JavaThread*) thread;
2239 } else {
2240 assert(thread->is_VM_thread(), "this must be a vm thread");
2241 VM_Operation* op = ((VMThread*) thread)->vm_operation();
2242 JavaThread *ret=op == NULL ? NULL : (JavaThread *)op->calling_thread();
2243 assert(ret->is_Java_thread(), "must be a Java thread");
2244 return ret;
2245 }
2246 }
2247
is_lock_owned(address adr) const2248 bool JavaThread::is_lock_owned(address adr) const {
2249 if (Thread::is_lock_owned(adr)) return true;
2250
2251 for (MonitorChunk* chunk = monitor_chunks(); chunk != NULL; chunk = chunk->next()) {
2252 if (chunk->contains(adr)) return true;
2253 }
2254
2255 return false;
2256 }
2257
2258
add_monitor_chunk(MonitorChunk * chunk)2259 void JavaThread::add_monitor_chunk(MonitorChunk* chunk) {
2260 chunk->set_next(monitor_chunks());
2261 set_monitor_chunks(chunk);
2262 }
2263
remove_monitor_chunk(MonitorChunk * chunk)2264 void JavaThread::remove_monitor_chunk(MonitorChunk* chunk) {
2265 guarantee(monitor_chunks() != NULL, "must be non empty");
2266 if (monitor_chunks() == chunk) {
2267 set_monitor_chunks(chunk->next());
2268 } else {
2269 MonitorChunk* prev = monitor_chunks();
2270 while (prev->next() != chunk) prev = prev->next();
2271 prev->set_next(chunk->next());
2272 }
2273 }
2274
2275 // JVM support.
2276
2277 // Note: this function shouldn't block if it's called in
2278 // _thread_in_native_trans state (such as from
2279 // check_special_condition_for_native_trans()).
check_and_handle_async_exceptions(bool check_unsafe_error)2280 void JavaThread::check_and_handle_async_exceptions(bool check_unsafe_error) {
2281
2282 if (has_last_Java_frame() && has_async_condition()) {
2283 // If we are at a polling page safepoint (not a poll return)
2284 // then we must defer async exception because live registers
2285 // will be clobbered by the exception path. Poll return is
2286 // ok because the call we a returning from already collides
2287 // with exception handling registers and so there is no issue.
2288 // (The exception handling path kills call result registers but
2289 // this is ok since the exception kills the result anyway).
2290
2291 if (is_at_poll_safepoint()) {
2292 // if the code we are returning to has deoptimized we must defer
2293 // the exception otherwise live registers get clobbered on the
2294 // exception path before deoptimization is able to retrieve them.
2295 //
2296 RegisterMap map(this, false);
2297 frame caller_fr = last_frame().sender(&map);
2298 assert(caller_fr.is_compiled_frame(), "what?");
2299 if (caller_fr.is_deoptimized_frame()) {
2300 log_info(exceptions)("deferred async exception at compiled safepoint");
2301 return;
2302 }
2303 }
2304 }
2305
2306 JavaThread::AsyncRequests condition = clear_special_runtime_exit_condition();
2307 if (condition == _no_async_condition) {
2308 // Conditions have changed since has_special_runtime_exit_condition()
2309 // was called:
2310 // - if we were here only because of an external suspend request,
2311 // then that was taken care of above (or cancelled) so we are done
2312 // - if we were here because of another async request, then it has
2313 // been cleared between the has_special_runtime_exit_condition()
2314 // and now so again we are done
2315 return;
2316 }
2317
2318 // Check for pending async. exception
2319 if (_pending_async_exception != NULL) {
2320 // Only overwrite an already pending exception, if it is not a threadDeath.
2321 if (!has_pending_exception() || !pending_exception()->is_a(SystemDictionary::ThreadDeath_klass())) {
2322
2323 // We cannot call Exceptions::_throw(...) here because we cannot block
2324 set_pending_exception(_pending_async_exception, __FILE__, __LINE__);
2325
2326 LogTarget(Info, exceptions) lt;
2327 if (lt.is_enabled()) {
2328 ResourceMark rm;
2329 LogStream ls(lt);
2330 ls.print("Async. exception installed at runtime exit (" INTPTR_FORMAT ")", p2i(this));
2331 if (has_last_Java_frame()) {
2332 frame f = last_frame();
2333 ls.print(" (pc: " INTPTR_FORMAT " sp: " INTPTR_FORMAT " )", p2i(f.pc()), p2i(f.sp()));
2334 }
2335 ls.print_cr(" of type: %s", _pending_async_exception->klass()->external_name());
2336 }
2337 _pending_async_exception = NULL;
2338 clear_has_async_exception();
2339 }
2340 }
2341
2342 if (check_unsafe_error &&
2343 condition == _async_unsafe_access_error && !has_pending_exception()) {
2344 condition = _no_async_condition; // done
2345 switch (thread_state()) {
2346 case _thread_in_vm: {
2347 JavaThread* THREAD = this;
2348 THROW_MSG(vmSymbols::java_lang_InternalError(), "a fault occurred in an unsafe memory access operation");
2349 }
2350 case _thread_in_native: {
2351 ThreadInVMfromNative tiv(this);
2352 JavaThread* THREAD = this;
2353 THROW_MSG(vmSymbols::java_lang_InternalError(), "a fault occurred in an unsafe memory access operation");
2354 }
2355 case _thread_in_Java: {
2356 ThreadInVMfromJava tiv(this);
2357 JavaThread* THREAD = this;
2358 THROW_MSG(vmSymbols::java_lang_InternalError(), "a fault occurred in a recent unsafe memory access operation in compiled Java code");
2359 }
2360 default:
2361 ShouldNotReachHere();
2362 }
2363 }
2364
2365 assert(condition == _no_async_condition || has_pending_exception() ||
2366 (!check_unsafe_error && condition == _async_unsafe_access_error),
2367 "must have handled the async condition, if no exception");
2368 }
2369
handle_special_runtime_exit_condition(bool check_asyncs)2370 void JavaThread::handle_special_runtime_exit_condition(bool check_asyncs) {
2371
2372 // Check for pending external suspend.
2373 if (is_external_suspend_with_lock()) {
2374 frame_anchor()->make_walkable(this);
2375 java_suspend_self_with_safepoint_check();
2376 }
2377
2378 // We might be here for reasons in addition to the self-suspend request
2379 // so check for other async requests.
2380 if (check_asyncs) {
2381 check_and_handle_async_exceptions();
2382 }
2383
2384 JFR_ONLY(SUSPEND_THREAD_CONDITIONAL(this);)
2385 }
2386
send_thread_stop(oop java_throwable)2387 void JavaThread::send_thread_stop(oop java_throwable) {
2388 assert(Thread::current()->is_VM_thread(), "should be in the vm thread");
2389 assert(Threads_lock->is_locked(), "Threads_lock should be locked by safepoint code");
2390 assert(SafepointSynchronize::is_at_safepoint(), "all threads are stopped");
2391
2392 // Do not throw asynchronous exceptions against the compiler thread
2393 // (the compiler thread should not be a Java thread -- fix in 1.4.2)
2394 if (!can_call_java()) return;
2395
2396 {
2397 // Actually throw the Throwable against the target Thread - however
2398 // only if there is no thread death exception installed already.
2399 if (_pending_async_exception == NULL || !_pending_async_exception->is_a(SystemDictionary::ThreadDeath_klass())) {
2400 // If the topmost frame is a runtime stub, then we are calling into
2401 // OptoRuntime from compiled code. Some runtime stubs (new, monitor_exit..)
2402 // must deoptimize the caller before continuing, as the compiled exception handler table
2403 // may not be valid
2404 if (has_last_Java_frame()) {
2405 frame f = last_frame();
2406 if (f.is_runtime_frame() || f.is_safepoint_blob_frame()) {
2407 // BiasedLocking needs an updated RegisterMap for the revoke monitors pass
2408 RegisterMap reg_map(this, UseBiasedLocking);
2409 frame compiled_frame = f.sender(®_map);
2410 if (!StressCompiledExceptionHandlers && compiled_frame.can_be_deoptimized()) {
2411 Deoptimization::deoptimize(this, compiled_frame, ®_map);
2412 }
2413 }
2414 }
2415
2416 // Set async. pending exception in thread.
2417 set_pending_async_exception(java_throwable);
2418
2419 if (log_is_enabled(Info, exceptions)) {
2420 ResourceMark rm;
2421 log_info(exceptions)("Pending Async. exception installed of type: %s",
2422 InstanceKlass::cast(_pending_async_exception->klass())->external_name());
2423 }
2424 // for AbortVMOnException flag
2425 Exceptions::debug_check_abort(_pending_async_exception->klass()->external_name());
2426 }
2427 }
2428
2429
2430 // Interrupt thread so it will wake up from a potential wait()/sleep()/park()
2431 java_lang_Thread::set_interrupted(threadObj(), true);
2432 this->interrupt();
2433 }
2434
2435 // External suspension mechanism.
2436 //
2437 // Tell the VM to suspend a thread when ever it knows that it does not hold on
2438 // to any VM_locks and it is at a transition
2439 // Self-suspension will happen on the transition out of the vm.
2440 // Catch "this" coming in from JNIEnv pointers when the thread has been freed
2441 //
2442 // Guarantees on return:
2443 // + Target thread will not execute any new bytecode (that's why we need to
2444 // force a safepoint)
2445 // + Target thread will not enter any new monitors
2446 //
java_suspend()2447 void JavaThread::java_suspend() {
2448 ThreadsListHandle tlh;
2449 if (!tlh.includes(this) || threadObj() == NULL || is_exiting()) {
2450 return;
2451 }
2452
2453 { MutexLocker ml(SR_lock(), Mutex::_no_safepoint_check_flag);
2454 if (!is_external_suspend()) {
2455 // a racing resume has cancelled us; bail out now
2456 return;
2457 }
2458
2459 // suspend is done
2460 uint32_t debug_bits = 0;
2461 // Warning: is_ext_suspend_completed() may temporarily drop the
2462 // SR_lock to allow the thread to reach a stable thread state if
2463 // it is currently in a transient thread state.
2464 if (is_ext_suspend_completed(false /* !called_by_wait */,
2465 SuspendRetryDelay, &debug_bits)) {
2466 return;
2467 }
2468 }
2469
2470 if (Thread::current() == this) {
2471 // Safely self-suspend.
2472 // If we don't do this explicitly it will implicitly happen
2473 // before we transition back to Java, and on some other thread-state
2474 // transition paths, but not as we exit a JVM TI SuspendThread call.
2475 // As SuspendThread(current) must not return (until resumed) we must
2476 // self-suspend here.
2477 ThreadBlockInVM tbivm(this);
2478 java_suspend_self();
2479 } else {
2480 VM_ThreadSuspend vm_suspend;
2481 VMThread::execute(&vm_suspend);
2482 }
2483 }
2484
2485 // Part II of external suspension.
2486 // A JavaThread self suspends when it detects a pending external suspend
2487 // request. This is usually on transitions. It is also done in places
2488 // where continuing to the next transition would surprise the caller,
2489 // e.g., monitor entry.
2490 //
2491 // Returns the number of times that the thread self-suspended.
2492 //
2493 // Note: DO NOT call java_suspend_self() when you just want to block current
2494 // thread. java_suspend_self() is the second stage of cooperative
2495 // suspension for external suspend requests and should only be used
2496 // to complete an external suspend request.
2497 //
java_suspend_self()2498 int JavaThread::java_suspend_self() {
2499 assert(thread_state() == _thread_blocked, "wrong state for java_suspend_self()");
2500 int ret = 0;
2501
2502 // we are in the process of exiting so don't suspend
2503 if (is_exiting()) {
2504 clear_external_suspend();
2505 return ret;
2506 }
2507
2508 assert(_anchor.walkable() ||
2509 (is_Java_thread() && !((JavaThread*)this)->has_last_Java_frame()),
2510 "must have walkable stack");
2511
2512 MonitorLocker ml(SR_lock(), Mutex::_no_safepoint_check_flag);
2513
2514 assert(!this->is_ext_suspended(),
2515 "a thread trying to self-suspend should not already be suspended");
2516
2517 if (this->is_suspend_equivalent()) {
2518 // If we are self-suspending as a result of the lifting of a
2519 // suspend equivalent condition, then the suspend_equivalent
2520 // flag is not cleared until we set the ext_suspended flag so
2521 // that wait_for_ext_suspend_completion() returns consistent
2522 // results.
2523 this->clear_suspend_equivalent();
2524 }
2525
2526 // A racing resume may have cancelled us before we grabbed SR_lock
2527 // above. Or another external suspend request could be waiting for us
2528 // by the time we return from SR_lock()->wait(). The thread
2529 // that requested the suspension may already be trying to walk our
2530 // stack and if we return now, we can change the stack out from under
2531 // it. This would be a "bad thing (TM)" and cause the stack walker
2532 // to crash. We stay self-suspended until there are no more pending
2533 // external suspend requests.
2534 while (is_external_suspend()) {
2535 ret++;
2536 this->set_ext_suspended();
2537
2538 // _ext_suspended flag is cleared by java_resume()
2539 while (is_ext_suspended()) {
2540 ml.wait();
2541 }
2542 }
2543 return ret;
2544 }
2545
2546 // Helper routine to set up the correct thread state before calling java_suspend_self.
2547 // This is called when regular thread-state transition helpers can't be used because
2548 // we can be in various states, in particular _thread_in_native_trans.
2549 // Because this thread is external suspended the safepoint code will count it as at
2550 // a safepoint, regardless of what its actual current thread-state is. But
2551 // is_ext_suspend_completed() may be waiting to see a thread transition from
2552 // _thread_in_native_trans to _thread_blocked. So we set the thread state directly
2553 // to _thread_blocked. The problem with setting thread state directly is that a
2554 // safepoint could happen just after java_suspend_self() returns after being resumed,
2555 // and the VM thread will see the _thread_blocked state. So we must check for a safepoint
2556 // after restoring the state to make sure we won't leave while a safepoint is in progress.
2557 // However, not all initial-states are allowed when performing a safepoint check, as we
2558 // should never be blocking at a safepoint whilst in those states. Of these 'bad' states
2559 // only _thread_in_native is possible when executing this code (based on our two callers).
2560 // A thread that is _thread_in_native is already safepoint-safe and so it doesn't matter
2561 // whether the VMThread sees the _thread_blocked state, or the _thread_in_native state,
2562 // and so we don't need the explicit safepoint check.
2563
java_suspend_self_with_safepoint_check()2564 void JavaThread::java_suspend_self_with_safepoint_check() {
2565 assert(this == Thread::current(), "invariant");
2566 JavaThreadState state = thread_state();
2567 set_thread_state(_thread_blocked);
2568 java_suspend_self();
2569 set_thread_state_fence(state);
2570 // Since we are not using a regular thread-state transition helper here,
2571 // we must manually emit the instruction barrier after leaving a safe state.
2572 OrderAccess::cross_modify_fence();
2573 if (state != _thread_in_native) {
2574 SafepointMechanism::block_if_requested(this);
2575 }
2576 }
2577
2578 #ifdef ASSERT
2579 // Verify the JavaThread has not yet been published in the Threads::list, and
2580 // hence doesn't need protection from concurrent access at this stage.
verify_not_published()2581 void JavaThread::verify_not_published() {
2582 // Cannot create a ThreadsListHandle here and check !tlh.includes(this)
2583 // since an unpublished JavaThread doesn't participate in the
2584 // Thread-SMR protocol for keeping a ThreadsList alive.
2585 assert(!on_thread_list(), "JavaThread shouldn't have been published yet!");
2586 }
2587 #endif
2588
2589 // Slow path when the native==>VM/Java barriers detect a safepoint is in
2590 // progress or when _suspend_flags is non-zero.
2591 // Current thread needs to self-suspend if there is a suspend request and/or
2592 // block if a safepoint is in progress.
2593 // Async exception ISN'T checked.
2594 // Note only the ThreadInVMfromNative transition can call this function
2595 // directly and when thread state is _thread_in_native_trans
check_safepoint_and_suspend_for_native_trans(JavaThread * thread)2596 void JavaThread::check_safepoint_and_suspend_for_native_trans(JavaThread *thread) {
2597 assert(thread->thread_state() == _thread_in_native_trans, "wrong state");
2598
2599 assert(!thread->has_last_Java_frame() || thread->frame_anchor()->walkable(), "Unwalkable stack in native->vm transition");
2600
2601 if (thread->is_external_suspend()) {
2602 thread->java_suspend_self_with_safepoint_check();
2603 } else {
2604 SafepointMechanism::block_if_requested(thread);
2605 }
2606
2607 JFR_ONLY(SUSPEND_THREAD_CONDITIONAL(thread);)
2608 }
2609
2610 // Slow path when the native==>VM/Java barriers detect a safepoint is in
2611 // progress or when _suspend_flags is non-zero.
2612 // Current thread needs to self-suspend if there is a suspend request and/or
2613 // block if a safepoint is in progress.
2614 // Also check for pending async exception (not including unsafe access error).
2615 // Note only the native==>VM/Java barriers can call this function and when
2616 // thread state is _thread_in_native_trans.
check_special_condition_for_native_trans(JavaThread * thread)2617 void JavaThread::check_special_condition_for_native_trans(JavaThread *thread) {
2618 check_safepoint_and_suspend_for_native_trans(thread);
2619
2620 if (thread->has_async_exception()) {
2621 // We are in _thread_in_native_trans state, don't handle unsafe
2622 // access error since that may block.
2623 thread->check_and_handle_async_exceptions(false);
2624 }
2625 }
2626
2627 // This is a variant of the normal
2628 // check_special_condition_for_native_trans with slightly different
2629 // semantics for use by critical native wrappers. It does all the
2630 // normal checks but also performs the transition back into
2631 // thread_in_Java state. This is required so that critical natives
2632 // can potentially block and perform a GC if they are the last thread
2633 // exiting the GCLocker.
check_special_condition_for_native_trans_and_transition(JavaThread * thread)2634 void JavaThread::check_special_condition_for_native_trans_and_transition(JavaThread *thread) {
2635 check_special_condition_for_native_trans(thread);
2636
2637 // Finish the transition
2638 thread->set_thread_state(_thread_in_Java);
2639
2640 if (thread->do_critical_native_unlock()) {
2641 ThreadInVMfromJavaNoAsyncException tiv(thread);
2642 GCLocker::unlock_critical(thread);
2643 thread->clear_critical_native_unlock();
2644 }
2645 }
2646
2647 // We need to guarantee the Threads_lock here, since resumes are not
2648 // allowed during safepoint synchronization
2649 // Can only resume from an external suspension
java_resume()2650 void JavaThread::java_resume() {
2651 assert_locked_or_safepoint(Threads_lock);
2652
2653 // Sanity check: thread is gone, has started exiting or the thread
2654 // was not externally suspended.
2655 ThreadsListHandle tlh;
2656 if (!tlh.includes(this) || is_exiting() || !is_external_suspend()) {
2657 return;
2658 }
2659
2660 MutexLocker ml(SR_lock(), Mutex::_no_safepoint_check_flag);
2661
2662 clear_external_suspend();
2663
2664 if (is_ext_suspended()) {
2665 clear_ext_suspended();
2666 SR_lock()->notify_all();
2667 }
2668 }
2669
2670 size_t JavaThread::_stack_red_zone_size = 0;
2671 size_t JavaThread::_stack_yellow_zone_size = 0;
2672 size_t JavaThread::_stack_reserved_zone_size = 0;
2673 size_t JavaThread::_stack_shadow_zone_size = 0;
2674
create_stack_guard_pages()2675 void JavaThread::create_stack_guard_pages() {
2676 if (!os::uses_stack_guard_pages() ||
2677 _stack_guard_state != stack_guard_unused ||
2678 (DisablePrimordialThreadGuardPages && os::is_primordial_thread())) {
2679 log_info(os, thread)("Stack guard page creation for thread "
2680 UINTX_FORMAT " disabled", os::current_thread_id());
2681 return;
2682 }
2683 address low_addr = stack_end();
2684 size_t len = stack_guard_zone_size();
2685
2686 assert(is_aligned(low_addr, os::vm_page_size()), "Stack base should be the start of a page");
2687 assert(is_aligned(len, os::vm_page_size()), "Stack size should be a multiple of page size");
2688
2689 int must_commit = os::must_commit_stack_guard_pages();
2690 // warning("Guarding at " PTR_FORMAT " for len " SIZE_FORMAT "\n", low_addr, len);
2691
2692 if (must_commit && !os::create_stack_guard_pages((char *) low_addr, len)) {
2693 log_warning(os, thread)("Attempt to allocate stack guard pages failed.");
2694 return;
2695 }
2696
2697 if (os::guard_memory((char *) low_addr, len)) {
2698 _stack_guard_state = stack_guard_enabled;
2699 } else {
2700 log_warning(os, thread)("Attempt to protect stack guard pages failed ("
2701 PTR_FORMAT "-" PTR_FORMAT ").", p2i(low_addr), p2i(low_addr + len));
2702 if (os::uncommit_memory((char *) low_addr, len)) {
2703 log_warning(os, thread)("Attempt to deallocate stack guard pages failed.");
2704 }
2705 return;
2706 }
2707
2708 log_debug(os, thread)("Thread " UINTX_FORMAT " stack guard pages activated: "
2709 PTR_FORMAT "-" PTR_FORMAT ".",
2710 os::current_thread_id(), p2i(low_addr), p2i(low_addr + len));
2711 }
2712
remove_stack_guard_pages()2713 void JavaThread::remove_stack_guard_pages() {
2714 assert(Thread::current() == this, "from different thread");
2715 if (_stack_guard_state == stack_guard_unused) return;
2716 address low_addr = stack_end();
2717 size_t len = stack_guard_zone_size();
2718
2719 if (os::must_commit_stack_guard_pages()) {
2720 if (os::remove_stack_guard_pages((char *) low_addr, len)) {
2721 _stack_guard_state = stack_guard_unused;
2722 } else {
2723 log_warning(os, thread)("Attempt to deallocate stack guard pages failed ("
2724 PTR_FORMAT "-" PTR_FORMAT ").", p2i(low_addr), p2i(low_addr + len));
2725 return;
2726 }
2727 } else {
2728 if (_stack_guard_state == stack_guard_unused) return;
2729 if (os::unguard_memory((char *) low_addr, len)) {
2730 _stack_guard_state = stack_guard_unused;
2731 } else {
2732 log_warning(os, thread)("Attempt to unprotect stack guard pages failed ("
2733 PTR_FORMAT "-" PTR_FORMAT ").", p2i(low_addr), p2i(low_addr + len));
2734 return;
2735 }
2736 }
2737
2738 log_debug(os, thread)("Thread " UINTX_FORMAT " stack guard pages removed: "
2739 PTR_FORMAT "-" PTR_FORMAT ".",
2740 os::current_thread_id(), p2i(low_addr), p2i(low_addr + len));
2741 }
2742
enable_stack_reserved_zone()2743 void JavaThread::enable_stack_reserved_zone() {
2744 assert(_stack_guard_state == stack_guard_reserved_disabled, "inconsistent state");
2745
2746 // The base notation is from the stack's point of view, growing downward.
2747 // We need to adjust it to work correctly with guard_memory()
2748 address base = stack_reserved_zone_base() - stack_reserved_zone_size();
2749
2750 guarantee(base < stack_base(),"Error calculating stack reserved zone");
2751 guarantee(base < os::current_stack_pointer(),"Error calculating stack reserved zone");
2752
2753 if (os::guard_memory((char *) base, stack_reserved_zone_size())) {
2754 _stack_guard_state = stack_guard_enabled;
2755 } else {
2756 warning("Attempt to guard stack reserved zone failed.");
2757 }
2758 enable_register_stack_guard();
2759 }
2760
disable_stack_reserved_zone()2761 void JavaThread::disable_stack_reserved_zone() {
2762 assert(_stack_guard_state == stack_guard_enabled, "inconsistent state");
2763
2764 // Simply return if called for a thread that does not use guard pages.
2765 if (_stack_guard_state != stack_guard_enabled) return;
2766
2767 // The base notation is from the stack's point of view, growing downward.
2768 // We need to adjust it to work correctly with guard_memory()
2769 address base = stack_reserved_zone_base() - stack_reserved_zone_size();
2770
2771 if (os::unguard_memory((char *)base, stack_reserved_zone_size())) {
2772 _stack_guard_state = stack_guard_reserved_disabled;
2773 } else {
2774 warning("Attempt to unguard stack reserved zone failed.");
2775 }
2776 disable_register_stack_guard();
2777 }
2778
enable_stack_yellow_reserved_zone()2779 void JavaThread::enable_stack_yellow_reserved_zone() {
2780 assert(_stack_guard_state != stack_guard_unused, "must be using guard pages.");
2781 assert(_stack_guard_state != stack_guard_enabled, "already enabled");
2782
2783 // The base notation is from the stacks point of view, growing downward.
2784 // We need to adjust it to work correctly with guard_memory()
2785 address base = stack_red_zone_base();
2786
2787 guarantee(base < stack_base(), "Error calculating stack yellow zone");
2788 guarantee(base < os::current_stack_pointer(), "Error calculating stack yellow zone");
2789
2790 if (os::guard_memory((char *) base, stack_yellow_reserved_zone_size())) {
2791 _stack_guard_state = stack_guard_enabled;
2792 } else {
2793 warning("Attempt to guard stack yellow zone failed.");
2794 }
2795 enable_register_stack_guard();
2796 }
2797
disable_stack_yellow_reserved_zone()2798 void JavaThread::disable_stack_yellow_reserved_zone() {
2799 assert(_stack_guard_state != stack_guard_unused, "must be using guard pages.");
2800 assert(_stack_guard_state != stack_guard_yellow_reserved_disabled, "already disabled");
2801
2802 // Simply return if called for a thread that does not use guard pages.
2803 if (_stack_guard_state == stack_guard_unused) return;
2804
2805 // The base notation is from the stacks point of view, growing downward.
2806 // We need to adjust it to work correctly with guard_memory()
2807 address base = stack_red_zone_base();
2808
2809 if (os::unguard_memory((char *)base, stack_yellow_reserved_zone_size())) {
2810 _stack_guard_state = stack_guard_yellow_reserved_disabled;
2811 } else {
2812 warning("Attempt to unguard stack yellow zone failed.");
2813 }
2814 disable_register_stack_guard();
2815 }
2816
enable_stack_red_zone()2817 void JavaThread::enable_stack_red_zone() {
2818 // The base notation is from the stacks point of view, growing downward.
2819 // We need to adjust it to work correctly with guard_memory()
2820 assert(_stack_guard_state != stack_guard_unused, "must be using guard pages.");
2821 address base = stack_red_zone_base() - stack_red_zone_size();
2822
2823 guarantee(base < stack_base(), "Error calculating stack red zone");
2824 guarantee(base < os::current_stack_pointer(), "Error calculating stack red zone");
2825
2826 if (!os::guard_memory((char *) base, stack_red_zone_size())) {
2827 warning("Attempt to guard stack red zone failed.");
2828 }
2829 }
2830
disable_stack_red_zone()2831 void JavaThread::disable_stack_red_zone() {
2832 // The base notation is from the stacks point of view, growing downward.
2833 // We need to adjust it to work correctly with guard_memory()
2834 assert(_stack_guard_state != stack_guard_unused, "must be using guard pages.");
2835 address base = stack_red_zone_base() - stack_red_zone_size();
2836 if (!os::unguard_memory((char *)base, stack_red_zone_size())) {
2837 warning("Attempt to unguard stack red zone failed.");
2838 }
2839 }
2840
frames_do(void f (frame *,const RegisterMap * map))2841 void JavaThread::frames_do(void f(frame*, const RegisterMap* map)) {
2842 // ignore is there is no stack
2843 if (!has_last_Java_frame()) return;
2844 // traverse the stack frames. Starts from top frame.
2845 for (StackFrameStream fst(this); !fst.is_done(); fst.next()) {
2846 frame* fr = fst.current();
2847 f(fr, fst.register_map());
2848 }
2849 }
2850
2851
2852 #ifndef PRODUCT
2853 // Deoptimization
2854 // Function for testing deoptimization
deoptimize()2855 void JavaThread::deoptimize() {
2856 // BiasedLocking needs an updated RegisterMap for the revoke monitors pass
2857 StackFrameStream fst(this, UseBiasedLocking);
2858 bool deopt = false; // Dump stack only if a deopt actually happens.
2859 bool only_at = strlen(DeoptimizeOnlyAt) > 0;
2860 // Iterate over all frames in the thread and deoptimize
2861 for (; !fst.is_done(); fst.next()) {
2862 if (fst.current()->can_be_deoptimized()) {
2863
2864 if (only_at) {
2865 // Deoptimize only at particular bcis. DeoptimizeOnlyAt
2866 // consists of comma or carriage return separated numbers so
2867 // search for the current bci in that string.
2868 address pc = fst.current()->pc();
2869 nmethod* nm = (nmethod*) fst.current()->cb();
2870 ScopeDesc* sd = nm->scope_desc_at(pc);
2871 char buffer[8];
2872 jio_snprintf(buffer, sizeof(buffer), "%d", sd->bci());
2873 size_t len = strlen(buffer);
2874 const char * found = strstr(DeoptimizeOnlyAt, buffer);
2875 while (found != NULL) {
2876 if ((found[len] == ',' || found[len] == '\n' || found[len] == '\0') &&
2877 (found == DeoptimizeOnlyAt || found[-1] == ',' || found[-1] == '\n')) {
2878 // Check that the bci found is bracketed by terminators.
2879 break;
2880 }
2881 found = strstr(found + 1, buffer);
2882 }
2883 if (!found) {
2884 continue;
2885 }
2886 }
2887
2888 if (DebugDeoptimization && !deopt) {
2889 deopt = true; // One-time only print before deopt
2890 tty->print_cr("[BEFORE Deoptimization]");
2891 trace_frames();
2892 trace_stack();
2893 }
2894 Deoptimization::deoptimize(this, *fst.current(), fst.register_map());
2895 }
2896 }
2897
2898 if (DebugDeoptimization && deopt) {
2899 tty->print_cr("[AFTER Deoptimization]");
2900 trace_frames();
2901 }
2902 }
2903
2904
2905 // Make zombies
make_zombies()2906 void JavaThread::make_zombies() {
2907 for (StackFrameStream fst(this); !fst.is_done(); fst.next()) {
2908 if (fst.current()->can_be_deoptimized()) {
2909 // it is a Java nmethod
2910 nmethod* nm = CodeCache::find_nmethod(fst.current()->pc());
2911 nm->make_not_entrant();
2912 }
2913 }
2914 }
2915 #endif // PRODUCT
2916
2917
deoptimize_marked_methods()2918 void JavaThread::deoptimize_marked_methods() {
2919 if (!has_last_Java_frame()) return;
2920 // BiasedLocking needs an updated RegisterMap for the revoke monitors pass
2921 StackFrameStream fst(this, UseBiasedLocking);
2922 for (; !fst.is_done(); fst.next()) {
2923 if (fst.current()->should_be_deoptimized()) {
2924 Deoptimization::deoptimize(this, *fst.current(), fst.register_map());
2925 }
2926 }
2927 }
2928
2929 // If the caller is a NamedThread, then remember, in the current scope,
2930 // the given JavaThread in its _processed_thread field.
2931 class RememberProcessedThread: public StackObj {
2932 NamedThread* _cur_thr;
2933 public:
RememberProcessedThread(JavaThread * jthr)2934 RememberProcessedThread(JavaThread* jthr) {
2935 Thread* thread = Thread::current();
2936 if (thread->is_Named_thread()) {
2937 _cur_thr = (NamedThread *)thread;
2938 _cur_thr->set_processed_thread(jthr);
2939 } else {
2940 _cur_thr = NULL;
2941 }
2942 }
2943
~RememberProcessedThread()2944 ~RememberProcessedThread() {
2945 if (_cur_thr) {
2946 _cur_thr->set_processed_thread(NULL);
2947 }
2948 }
2949 };
2950
oops_do(OopClosure * f,CodeBlobClosure * cf)2951 void JavaThread::oops_do(OopClosure* f, CodeBlobClosure* cf) {
2952 // Verify that the deferred card marks have been flushed.
2953 assert(deferred_card_mark().is_empty(), "Should be empty during GC");
2954
2955 // Traverse the GCHandles
2956 Thread::oops_do(f, cf);
2957
2958 assert((!has_last_Java_frame() && java_call_counter() == 0) ||
2959 (has_last_Java_frame() && java_call_counter() > 0), "wrong java_sp info!");
2960
2961 if (has_last_Java_frame()) {
2962 // Record JavaThread to GC thread
2963 RememberProcessedThread rpt(this);
2964
2965 // traverse the registered growable array
2966 if (_array_for_gc != NULL) {
2967 for (int index = 0; index < _array_for_gc->length(); index++) {
2968 f->do_oop(_array_for_gc->adr_at(index));
2969 }
2970 }
2971
2972 // Traverse the monitor chunks
2973 for (MonitorChunk* chunk = monitor_chunks(); chunk != NULL; chunk = chunk->next()) {
2974 chunk->oops_do(f);
2975 }
2976
2977 // Traverse the execution stack
2978 for (StackFrameStream fst(this); !fst.is_done(); fst.next()) {
2979 fst.current()->oops_do(f, cf, fst.register_map());
2980 }
2981 }
2982
2983 assert(vframe_array_head() == NULL, "deopt in progress at a safepoint!");
2984 // If we have deferred set_locals there might be oops waiting to be
2985 // written
2986 GrowableArray<jvmtiDeferredLocalVariableSet*>* list = deferred_locals();
2987 if (list != NULL) {
2988 for (int i = 0; i < list->length(); i++) {
2989 list->at(i)->oops_do(f);
2990 }
2991 }
2992
2993 // Traverse instance variables at the end since the GC may be moving things
2994 // around using this function
2995 f->do_oop((oop*) &_threadObj);
2996 f->do_oop((oop*) &_vm_result);
2997 f->do_oop((oop*) &_exception_oop);
2998 f->do_oop((oop*) &_pending_async_exception);
2999
3000 if (jvmti_thread_state() != NULL) {
3001 jvmti_thread_state()->oops_do(f, cf);
3002 }
3003 }
3004
3005 #ifdef ASSERT
verify_states_for_handshake()3006 void JavaThread::verify_states_for_handshake() {
3007 // This checks that the thread has a correct frame state during a handshake.
3008 assert((!has_last_Java_frame() && java_call_counter() == 0) ||
3009 (has_last_Java_frame() && java_call_counter() > 0),
3010 "unexpected frame info: has_last_frame=%d, java_call_counter=%d",
3011 has_last_Java_frame(), java_call_counter());
3012 }
3013 #endif
3014
nmethods_do(CodeBlobClosure * cf)3015 void JavaThread::nmethods_do(CodeBlobClosure* cf) {
3016 assert((!has_last_Java_frame() && java_call_counter() == 0) ||
3017 (has_last_Java_frame() && java_call_counter() > 0),
3018 "unexpected frame info: has_last_frame=%d, java_call_counter=%d",
3019 has_last_Java_frame(), java_call_counter());
3020
3021 if (has_last_Java_frame()) {
3022 // Traverse the execution stack
3023 for (StackFrameStream fst(this); !fst.is_done(); fst.next()) {
3024 fst.current()->nmethods_do(cf);
3025 }
3026 }
3027
3028 if (jvmti_thread_state() != NULL) {
3029 jvmti_thread_state()->nmethods_do(cf);
3030 }
3031 }
3032
metadata_do(MetadataClosure * f)3033 void JavaThread::metadata_do(MetadataClosure* f) {
3034 if (has_last_Java_frame()) {
3035 // Traverse the execution stack to call f() on the methods in the stack
3036 for (StackFrameStream fst(this); !fst.is_done(); fst.next()) {
3037 fst.current()->metadata_do(f);
3038 }
3039 } else if (is_Compiler_thread()) {
3040 // need to walk ciMetadata in current compile tasks to keep alive.
3041 CompilerThread* ct = (CompilerThread*)this;
3042 if (ct->env() != NULL) {
3043 ct->env()->metadata_do(f);
3044 }
3045 CompileTask* task = ct->task();
3046 if (task != NULL) {
3047 task->metadata_do(f);
3048 }
3049 }
3050 }
3051
3052 // Printing
_get_thread_state_name(JavaThreadState _thread_state)3053 const char* _get_thread_state_name(JavaThreadState _thread_state) {
3054 switch (_thread_state) {
3055 case _thread_uninitialized: return "_thread_uninitialized";
3056 case _thread_new: return "_thread_new";
3057 case _thread_new_trans: return "_thread_new_trans";
3058 case _thread_in_native: return "_thread_in_native";
3059 case _thread_in_native_trans: return "_thread_in_native_trans";
3060 case _thread_in_vm: return "_thread_in_vm";
3061 case _thread_in_vm_trans: return "_thread_in_vm_trans";
3062 case _thread_in_Java: return "_thread_in_Java";
3063 case _thread_in_Java_trans: return "_thread_in_Java_trans";
3064 case _thread_blocked: return "_thread_blocked";
3065 case _thread_blocked_trans: return "_thread_blocked_trans";
3066 default: return "unknown thread state";
3067 }
3068 }
3069
3070 #ifndef PRODUCT
print_thread_state_on(outputStream * st) const3071 void JavaThread::print_thread_state_on(outputStream *st) const {
3072 st->print_cr(" JavaThread state: %s", _get_thread_state_name(_thread_state));
3073 };
3074 #endif // PRODUCT
3075
3076 // Called by Threads::print() for VM_PrintThreads operation
print_on(outputStream * st,bool print_extended_info) const3077 void JavaThread::print_on(outputStream *st, bool print_extended_info) const {
3078 st->print_raw("\"");
3079 st->print_raw(get_thread_name());
3080 st->print_raw("\" ");
3081 oop thread_oop = threadObj();
3082 if (thread_oop != NULL) {
3083 st->print("#" INT64_FORMAT " ", (int64_t)java_lang_Thread::thread_id(thread_oop));
3084 if (java_lang_Thread::is_daemon(thread_oop)) st->print("daemon ");
3085 st->print("prio=%d ", java_lang_Thread::priority(thread_oop));
3086 }
3087 Thread::print_on(st, print_extended_info);
3088 // print guess for valid stack memory region (assume 4K pages); helps lock debugging
3089 st->print_cr("[" INTPTR_FORMAT "]", (intptr_t)last_Java_sp() & ~right_n_bits(12));
3090 if (thread_oop != NULL) {
3091 st->print_cr(" java.lang.Thread.State: %s", java_lang_Thread::thread_status_name(thread_oop));
3092 }
3093 #ifndef PRODUCT
3094 _safepoint_state->print_on(st);
3095 #endif // PRODUCT
3096 if (is_Compiler_thread()) {
3097 CompileTask *task = ((CompilerThread*)this)->task();
3098 if (task != NULL) {
3099 st->print(" Compiling: ");
3100 task->print(st, NULL, true, false);
3101 } else {
3102 st->print(" No compile task");
3103 }
3104 st->cr();
3105 }
3106 }
3107
print() const3108 void JavaThread::print() const { print_on(tty); }
3109
print_name_on_error(outputStream * st,char * buf,int buflen) const3110 void JavaThread::print_name_on_error(outputStream* st, char *buf, int buflen) const {
3111 st->print("%s", get_thread_name_string(buf, buflen));
3112 }
3113
3114 // Called by fatal error handler. The difference between this and
3115 // JavaThread::print() is that we can't grab lock or allocate memory.
print_on_error(outputStream * st,char * buf,int buflen) const3116 void JavaThread::print_on_error(outputStream* st, char *buf, int buflen) const {
3117 st->print("JavaThread \"%s\"", get_thread_name_string(buf, buflen));
3118 oop thread_obj = threadObj();
3119 if (thread_obj != NULL) {
3120 if (java_lang_Thread::is_daemon(thread_obj)) st->print(" daemon");
3121 }
3122 st->print(" [");
3123 st->print("%s", _get_thread_state_name(_thread_state));
3124 if (osthread()) {
3125 st->print(", id=%d", osthread()->thread_id());
3126 }
3127 st->print(", stack(" PTR_FORMAT "," PTR_FORMAT ")",
3128 p2i(stack_end()), p2i(stack_base()));
3129 st->print("]");
3130
3131 ThreadsSMRSupport::print_info_on(this, st);
3132 return;
3133 }
3134
3135 // Verification
3136
frame_verify(frame * f,const RegisterMap * map)3137 static void frame_verify(frame* f, const RegisterMap *map) { f->verify(map); }
3138
verify()3139 void JavaThread::verify() {
3140 // Verify oops in the thread.
3141 oops_do(&VerifyOopClosure::verify_oop, NULL);
3142
3143 // Verify the stack frames.
3144 frames_do(frame_verify);
3145 }
3146
3147 // CR 6300358 (sub-CR 2137150)
3148 // Most callers of this method assume that it can't return NULL but a
3149 // thread may not have a name whilst it is in the process of attaching to
3150 // the VM - see CR 6412693, and there are places where a JavaThread can be
3151 // seen prior to having it's threadObj set (eg JNI attaching threads and
3152 // if vm exit occurs during initialization). These cases can all be accounted
3153 // for such that this method never returns NULL.
get_thread_name() const3154 const char* JavaThread::get_thread_name() const {
3155 #ifdef ASSERT
3156 // early safepoints can hit while current thread does not yet have TLS
3157 if (!SafepointSynchronize::is_at_safepoint()) {
3158 Thread *cur = Thread::current();
3159 if (!(cur->is_Java_thread() && cur == this)) {
3160 // Current JavaThreads are allowed to get their own name without
3161 // the Threads_lock.
3162 assert_locked_or_safepoint(Threads_lock);
3163 }
3164 }
3165 #endif // ASSERT
3166 return get_thread_name_string();
3167 }
3168
3169 // Returns a non-NULL representation of this thread's name, or a suitable
3170 // descriptive string if there is no set name
get_thread_name_string(char * buf,int buflen) const3171 const char* JavaThread::get_thread_name_string(char* buf, int buflen) const {
3172 const char* name_str;
3173 oop thread_obj = threadObj();
3174 if (thread_obj != NULL) {
3175 oop name = java_lang_Thread::name(thread_obj);
3176 if (name != NULL) {
3177 if (buf == NULL) {
3178 name_str = java_lang_String::as_utf8_string(name);
3179 } else {
3180 name_str = java_lang_String::as_utf8_string(name, buf, buflen);
3181 }
3182 } else if (is_attaching_via_jni()) { // workaround for 6412693 - see 6404306
3183 name_str = "<no-name - thread is attaching>";
3184 } else {
3185 name_str = Thread::name();
3186 }
3187 } else {
3188 name_str = Thread::name();
3189 }
3190 assert(name_str != NULL, "unexpected NULL thread name");
3191 return name_str;
3192 }
3193
prepare(jobject jni_thread,ThreadPriority prio)3194 void JavaThread::prepare(jobject jni_thread, ThreadPriority prio) {
3195
3196 assert(Threads_lock->owner() == Thread::current(), "must have threads lock");
3197 assert(NoPriority <= prio && prio <= MaxPriority, "sanity check");
3198 // Link Java Thread object <-> C++ Thread
3199
3200 // Get the C++ thread object (an oop) from the JNI handle (a jthread)
3201 // and put it into a new Handle. The Handle "thread_oop" can then
3202 // be used to pass the C++ thread object to other methods.
3203
3204 // Set the Java level thread object (jthread) field of the
3205 // new thread (a JavaThread *) to C++ thread object using the
3206 // "thread_oop" handle.
3207
3208 // Set the thread field (a JavaThread *) of the
3209 // oop representing the java_lang_Thread to the new thread (a JavaThread *).
3210
3211 Handle thread_oop(Thread::current(),
3212 JNIHandles::resolve_non_null(jni_thread));
3213 assert(InstanceKlass::cast(thread_oop->klass())->is_linked(),
3214 "must be initialized");
3215 set_threadObj(thread_oop());
3216 java_lang_Thread::set_thread(thread_oop(), this);
3217
3218 if (prio == NoPriority) {
3219 prio = java_lang_Thread::priority(thread_oop());
3220 assert(prio != NoPriority, "A valid priority should be present");
3221 }
3222
3223 // Push the Java priority down to the native thread; needs Threads_lock
3224 Thread::set_priority(this, prio);
3225
3226 // Add the new thread to the Threads list and set it in motion.
3227 // We must have threads lock in order to call Threads::add.
3228 // It is crucial that we do not block before the thread is
3229 // added to the Threads list for if a GC happens, then the java_thread oop
3230 // will not be visited by GC.
3231 Threads::add(this);
3232 }
3233
current_park_blocker()3234 oop JavaThread::current_park_blocker() {
3235 // Support for JSR-166 locks
3236 oop thread_oop = threadObj();
3237 if (thread_oop != NULL) {
3238 return java_lang_Thread::park_blocker(thread_oop);
3239 }
3240 return NULL;
3241 }
3242
3243
print_stack_on(outputStream * st)3244 void JavaThread::print_stack_on(outputStream* st) {
3245 if (!has_last_Java_frame()) return;
3246 ResourceMark rm;
3247 HandleMark hm;
3248
3249 RegisterMap reg_map(this);
3250 vframe* start_vf = last_java_vframe(®_map);
3251 int count = 0;
3252 for (vframe* f = start_vf; f != NULL; f = f->sender()) {
3253 if (f->is_java_frame()) {
3254 javaVFrame* jvf = javaVFrame::cast(f);
3255 java_lang_Throwable::print_stack_element(st, jvf->method(), jvf->bci());
3256
3257 // Print out lock information
3258 if (JavaMonitorsInStackTrace) {
3259 jvf->print_lock_info_on(st, count);
3260 }
3261 } else {
3262 // Ignore non-Java frames
3263 }
3264
3265 // Bail-out case for too deep stacks if MaxJavaStackTraceDepth > 0
3266 count++;
3267 if (MaxJavaStackTraceDepth > 0 && MaxJavaStackTraceDepth == count) return;
3268 }
3269 }
3270
3271
3272 // JVMTI PopFrame support
popframe_preserve_args(ByteSize size_in_bytes,void * start)3273 void JavaThread::popframe_preserve_args(ByteSize size_in_bytes, void* start) {
3274 assert(_popframe_preserved_args == NULL, "should not wipe out old PopFrame preserved arguments");
3275 if (in_bytes(size_in_bytes) != 0) {
3276 _popframe_preserved_args = NEW_C_HEAP_ARRAY(char, in_bytes(size_in_bytes), mtThread);
3277 _popframe_preserved_args_size = in_bytes(size_in_bytes);
3278 Copy::conjoint_jbytes(start, _popframe_preserved_args, _popframe_preserved_args_size);
3279 }
3280 }
3281
popframe_preserved_args()3282 void* JavaThread::popframe_preserved_args() {
3283 return _popframe_preserved_args;
3284 }
3285
popframe_preserved_args_size()3286 ByteSize JavaThread::popframe_preserved_args_size() {
3287 return in_ByteSize(_popframe_preserved_args_size);
3288 }
3289
popframe_preserved_args_size_in_words()3290 WordSize JavaThread::popframe_preserved_args_size_in_words() {
3291 int sz = in_bytes(popframe_preserved_args_size());
3292 assert(sz % wordSize == 0, "argument size must be multiple of wordSize");
3293 return in_WordSize(sz / wordSize);
3294 }
3295
popframe_free_preserved_args()3296 void JavaThread::popframe_free_preserved_args() {
3297 assert(_popframe_preserved_args != NULL, "should not free PopFrame preserved arguments twice");
3298 FREE_C_HEAP_ARRAY(char, (char*)_popframe_preserved_args);
3299 _popframe_preserved_args = NULL;
3300 _popframe_preserved_args_size = 0;
3301 }
3302
3303 #ifndef PRODUCT
3304
trace_frames()3305 void JavaThread::trace_frames() {
3306 tty->print_cr("[Describe stack]");
3307 int frame_no = 1;
3308 for (StackFrameStream fst(this); !fst.is_done(); fst.next()) {
3309 tty->print(" %d. ", frame_no++);
3310 fst.current()->print_value_on(tty, this);
3311 tty->cr();
3312 }
3313 }
3314
3315 class PrintAndVerifyOopClosure: public OopClosure {
3316 protected:
do_oop_work(T * p)3317 template <class T> inline void do_oop_work(T* p) {
3318 oop obj = RawAccess<>::oop_load(p);
3319 if (obj == NULL) return;
3320 tty->print(INTPTR_FORMAT ": ", p2i(p));
3321 if (oopDesc::is_oop_or_null(obj)) {
3322 if (obj->is_objArray()) {
3323 tty->print_cr("valid objArray: " INTPTR_FORMAT, p2i(obj));
3324 } else {
3325 obj->print();
3326 }
3327 } else {
3328 tty->print_cr("invalid oop: " INTPTR_FORMAT, p2i(obj));
3329 }
3330 tty->cr();
3331 }
3332 public:
do_oop(oop * p)3333 virtual void do_oop(oop* p) { do_oop_work(p); }
do_oop(narrowOop * p)3334 virtual void do_oop(narrowOop* p) { do_oop_work(p); }
3335 };
3336
3337 #ifdef ASSERT
3338 // Print or validate the layout of stack frames
print_frame_layout(int depth,bool validate_only)3339 void JavaThread::print_frame_layout(int depth, bool validate_only) {
3340 ResourceMark rm;
3341 PRESERVE_EXCEPTION_MARK;
3342 FrameValues values;
3343 int frame_no = 0;
3344 for (StackFrameStream fst(this, false); !fst.is_done(); fst.next()) {
3345 fst.current()->describe(values, ++frame_no);
3346 if (depth == frame_no) break;
3347 }
3348 if (validate_only) {
3349 values.validate();
3350 } else {
3351 tty->print_cr("[Describe stack layout]");
3352 values.print(this);
3353 }
3354 }
3355 #endif
3356
trace_stack_from(vframe * start_vf)3357 void JavaThread::trace_stack_from(vframe* start_vf) {
3358 ResourceMark rm;
3359 int vframe_no = 1;
3360 for (vframe* f = start_vf; f; f = f->sender()) {
3361 if (f->is_java_frame()) {
3362 javaVFrame::cast(f)->print_activation(vframe_no++);
3363 } else {
3364 f->print();
3365 }
3366 if (vframe_no > StackPrintLimit) {
3367 tty->print_cr("...<more frames>...");
3368 return;
3369 }
3370 }
3371 }
3372
3373
trace_stack()3374 void JavaThread::trace_stack() {
3375 if (!has_last_Java_frame()) return;
3376 ResourceMark rm;
3377 HandleMark hm;
3378 RegisterMap reg_map(this);
3379 trace_stack_from(last_java_vframe(®_map));
3380 }
3381
3382
3383 #endif // PRODUCT
3384
3385
last_java_vframe(RegisterMap * reg_map)3386 javaVFrame* JavaThread::last_java_vframe(RegisterMap *reg_map) {
3387 assert(reg_map != NULL, "a map must be given");
3388 frame f = last_frame();
3389 for (vframe* vf = vframe::new_vframe(&f, reg_map, this); vf; vf = vf->sender()) {
3390 if (vf->is_java_frame()) return javaVFrame::cast(vf);
3391 }
3392 return NULL;
3393 }
3394
3395
security_get_caller_class(int depth)3396 Klass* JavaThread::security_get_caller_class(int depth) {
3397 vframeStream vfst(this);
3398 vfst.security_get_caller_frame(depth);
3399 if (!vfst.at_end()) {
3400 return vfst.method()->method_holder();
3401 }
3402 return NULL;
3403 }
3404
3405 // java.lang.Thread.sleep support
3406 // Returns true if sleep time elapsed as expected, and false
3407 // if the thread was interrupted.
sleep(jlong millis)3408 bool JavaThread::sleep(jlong millis) {
3409 assert(this == Thread::current(), "thread consistency check");
3410
3411 ParkEvent * const slp = this->_SleepEvent;
3412 // Because there can be races with thread interruption sending an unpark()
3413 // to the event, we explicitly reset it here to avoid an immediate return.
3414 // The actual interrupt state will be checked before we park().
3415 slp->reset();
3416 // Thread interruption establishes a happens-before ordering in the
3417 // Java Memory Model, so we need to ensure we synchronize with the
3418 // interrupt state.
3419 OrderAccess::fence();
3420
3421 jlong prevtime = os::javaTimeNanos();
3422
3423 for (;;) {
3424 // interruption has precedence over timing out
3425 if (this->is_interrupted(true)) {
3426 return false;
3427 }
3428
3429 if (millis <= 0) {
3430 return true;
3431 }
3432
3433 {
3434 ThreadBlockInVM tbivm(this);
3435 OSThreadWaitState osts(this->osthread(), false /* not Object.wait() */);
3436
3437 this->set_suspend_equivalent();
3438 // cleared by handle_special_suspend_equivalent_condition() or
3439 // java_suspend_self() via check_and_wait_while_suspended()
3440
3441 slp->park(millis);
3442
3443 // were we externally suspended while we were waiting?
3444 this->check_and_wait_while_suspended();
3445 }
3446
3447 // Update elapsed time tracking
3448 jlong newtime = os::javaTimeNanos();
3449 if (newtime - prevtime < 0) {
3450 // time moving backwards, should only happen if no monotonic clock
3451 // not a guarantee() because JVM should not abort on kernel/glibc bugs
3452 assert(!os::supports_monotonic_clock(),
3453 "unexpected time moving backwards detected in JavaThread::sleep()");
3454 } else {
3455 millis -= (newtime - prevtime) / NANOSECS_PER_MILLISEC;
3456 }
3457 prevtime = newtime;
3458 }
3459 }
3460
compiler_thread_entry(JavaThread * thread,TRAPS)3461 static void compiler_thread_entry(JavaThread* thread, TRAPS) {
3462 assert(thread->is_Compiler_thread(), "must be compiler thread");
3463 CompileBroker::compiler_thread_loop();
3464 }
3465
sweeper_thread_entry(JavaThread * thread,TRAPS)3466 static void sweeper_thread_entry(JavaThread* thread, TRAPS) {
3467 NMethodSweeper::sweeper_loop();
3468 }
3469
3470 // Create a CompilerThread
CompilerThread(CompileQueue * queue,CompilerCounters * counters)3471 CompilerThread::CompilerThread(CompileQueue* queue,
3472 CompilerCounters* counters)
3473 : JavaThread(&compiler_thread_entry) {
3474 _env = NULL;
3475 _log = NULL;
3476 _task = NULL;
3477 _queue = queue;
3478 _counters = counters;
3479 _buffer_blob = NULL;
3480 _compiler = NULL;
3481
3482 // Compiler uses resource area for compilation, let's bias it to mtCompiler
3483 resource_area()->bias_to(mtCompiler);
3484
3485 #ifndef PRODUCT
3486 _ideal_graph_printer = NULL;
3487 #endif
3488 }
3489
~CompilerThread()3490 CompilerThread::~CompilerThread() {
3491 // Delete objects which were allocated on heap.
3492 delete _counters;
3493 }
3494
can_call_java() const3495 bool CompilerThread::can_call_java() const {
3496 return _compiler != NULL && _compiler->is_jvmci();
3497 }
3498
3499 // Create sweeper thread
CodeCacheSweeperThread()3500 CodeCacheSweeperThread::CodeCacheSweeperThread()
3501 : JavaThread(&sweeper_thread_entry) {
3502 _scanned_compiled_method = NULL;
3503 }
3504
oops_do(OopClosure * f,CodeBlobClosure * cf)3505 void CodeCacheSweeperThread::oops_do(OopClosure* f, CodeBlobClosure* cf) {
3506 JavaThread::oops_do(f, cf);
3507 if (_scanned_compiled_method != NULL && cf != NULL) {
3508 // Safepoints can occur when the sweeper is scanning an nmethod so
3509 // process it here to make sure it isn't unloaded in the middle of
3510 // a scan.
3511 cf->do_code_blob(_scanned_compiled_method);
3512 }
3513 }
3514
nmethods_do(CodeBlobClosure * cf)3515 void CodeCacheSweeperThread::nmethods_do(CodeBlobClosure* cf) {
3516 JavaThread::nmethods_do(cf);
3517 if (_scanned_compiled_method != NULL && cf != NULL) {
3518 // Safepoints can occur when the sweeper is scanning an nmethod so
3519 // process it here to make sure it isn't unloaded in the middle of
3520 // a scan.
3521 cf->do_code_blob(_scanned_compiled_method);
3522 }
3523 }
3524
3525
3526 // ======= Threads ========
3527
3528 // The Threads class links together all active threads, and provides
3529 // operations over all threads. It is protected by the Threads_lock,
3530 // which is also used in other global contexts like safepointing.
3531 // ThreadsListHandles are used to safely perform operations on one
3532 // or more threads without the risk of the thread exiting during the
3533 // operation.
3534 //
3535 // Note: The Threads_lock is currently more widely used than we
3536 // would like. We are actively migrating Threads_lock uses to other
3537 // mechanisms in order to reduce Threads_lock contention.
3538
3539 int Threads::_number_of_threads = 0;
3540 int Threads::_number_of_non_daemon_threads = 0;
3541 int Threads::_return_code = 0;
3542 uintx Threads::_thread_claim_token = 1; // Never zero.
3543 size_t JavaThread::_stack_size_at_create = 0;
3544
3545 #ifdef ASSERT
3546 bool Threads::_vm_complete = false;
3547 #endif
3548
prefetch_and_load_ptr(void ** addr,intx prefetch_interval)3549 static inline void *prefetch_and_load_ptr(void **addr, intx prefetch_interval) {
3550 Prefetch::read((void*)addr, prefetch_interval);
3551 return *addr;
3552 }
3553
3554 // Possibly the ugliest for loop the world has seen. C++ does not allow
3555 // multiple types in the declaration section of the for loop. In this case
3556 // we are only dealing with pointers and hence can cast them. It looks ugly
3557 // but macros are ugly and therefore it's fine to make things absurdly ugly.
3558 #define DO_JAVA_THREADS(LIST, X) \
3559 for (JavaThread *MACRO_scan_interval = (JavaThread*)(uintptr_t)PrefetchScanIntervalInBytes, \
3560 *MACRO_list = (JavaThread*)(LIST), \
3561 **MACRO_end = ((JavaThread**)((ThreadsList*)MACRO_list)->threads()) + ((ThreadsList*)MACRO_list)->length(), \
3562 **MACRO_current_p = (JavaThread**)((ThreadsList*)MACRO_list)->threads(), \
3563 *X = (JavaThread*)prefetch_and_load_ptr((void**)MACRO_current_p, (intx)MACRO_scan_interval); \
3564 MACRO_current_p != MACRO_end; \
3565 MACRO_current_p++, \
3566 X = (JavaThread*)prefetch_and_load_ptr((void**)MACRO_current_p, (intx)MACRO_scan_interval))
3567
3568 // All JavaThreads
3569 #define ALL_JAVA_THREADS(X) DO_JAVA_THREADS(ThreadsSMRSupport::get_java_thread_list(), X)
3570
3571 // All NonJavaThreads (i.e., every non-JavaThread in the system).
non_java_threads_do(ThreadClosure * tc)3572 void Threads::non_java_threads_do(ThreadClosure* tc) {
3573 NoSafepointVerifier nsv;
3574 for (NonJavaThread::Iterator njti; !njti.end(); njti.step()) {
3575 tc->do_thread(njti.current());
3576 }
3577 }
3578
3579 // All JavaThreads
java_threads_do(ThreadClosure * tc)3580 void Threads::java_threads_do(ThreadClosure* tc) {
3581 assert_locked_or_safepoint(Threads_lock);
3582 // ALL_JAVA_THREADS iterates through all JavaThreads.
3583 ALL_JAVA_THREADS(p) {
3584 tc->do_thread(p);
3585 }
3586 }
3587
java_threads_and_vm_thread_do(ThreadClosure * tc)3588 void Threads::java_threads_and_vm_thread_do(ThreadClosure* tc) {
3589 assert_locked_or_safepoint(Threads_lock);
3590 java_threads_do(tc);
3591 tc->do_thread(VMThread::vm_thread());
3592 }
3593
3594 // All JavaThreads + all non-JavaThreads (i.e., every thread in the system).
threads_do(ThreadClosure * tc)3595 void Threads::threads_do(ThreadClosure* tc) {
3596 assert_locked_or_safepoint(Threads_lock);
3597 java_threads_do(tc);
3598 non_java_threads_do(tc);
3599 }
3600
possibly_parallel_threads_do(bool is_par,ThreadClosure * tc)3601 void Threads::possibly_parallel_threads_do(bool is_par, ThreadClosure* tc) {
3602 uintx claim_token = Threads::thread_claim_token();
3603 ALL_JAVA_THREADS(p) {
3604 if (p->claim_threads_do(is_par, claim_token)) {
3605 tc->do_thread(p);
3606 }
3607 }
3608 VMThread* vmt = VMThread::vm_thread();
3609 if (vmt->claim_threads_do(is_par, claim_token)) {
3610 tc->do_thread(vmt);
3611 }
3612 }
3613
3614 // The system initialization in the library has three phases.
3615 //
3616 // Phase 1: java.lang.System class initialization
3617 // java.lang.System is a primordial class loaded and initialized
3618 // by the VM early during startup. java.lang.System.<clinit>
3619 // only does registerNatives and keeps the rest of the class
3620 // initialization work later until thread initialization completes.
3621 //
3622 // System.initPhase1 initializes the system properties, the static
3623 // fields in, out, and err. Set up java signal handlers, OS-specific
3624 // system settings, and thread group of the main thread.
call_initPhase1(TRAPS)3625 static void call_initPhase1(TRAPS) {
3626 Klass* klass = SystemDictionary::resolve_or_fail(vmSymbols::java_lang_System(), true, CHECK);
3627 JavaValue result(T_VOID);
3628 JavaCalls::call_static(&result, klass, vmSymbols::initPhase1_name(),
3629 vmSymbols::void_method_signature(), CHECK);
3630 }
3631
3632 // Phase 2. Module system initialization
3633 // This will initialize the module system. Only java.base classes
3634 // can be loaded until phase 2 completes.
3635 //
3636 // Call System.initPhase2 after the compiler initialization and jsr292
3637 // classes get initialized because module initialization runs a lot of java
3638 // code, that for performance reasons, should be compiled. Also, this will
3639 // enable the startup code to use lambda and other language features in this
3640 // phase and onward.
3641 //
3642 // After phase 2, The VM will begin search classes from -Xbootclasspath/a.
call_initPhase2(TRAPS)3643 static void call_initPhase2(TRAPS) {
3644 TraceTime timer("Initialize module system", TRACETIME_LOG(Info, startuptime));
3645
3646 Klass* klass = SystemDictionary::resolve_or_fail(vmSymbols::java_lang_System(), true, CHECK);
3647
3648 JavaValue result(T_INT);
3649 JavaCallArguments args;
3650 args.push_int(DisplayVMOutputToStderr);
3651 args.push_int(log_is_enabled(Debug, init)); // print stack trace if exception thrown
3652 JavaCalls::call_static(&result, klass, vmSymbols::initPhase2_name(),
3653 vmSymbols::boolean_boolean_int_signature(), &args, CHECK);
3654 if (result.get_jint() != JNI_OK) {
3655 vm_exit_during_initialization(); // no message or exception
3656 }
3657
3658 universe_post_module_init();
3659 }
3660
3661 // Phase 3. final setup - set security manager, system class loader and TCCL
3662 //
3663 // This will instantiate and set the security manager, set the system class
3664 // loader as well as the thread context class loader. The security manager
3665 // and system class loader may be a custom class loaded from -Xbootclasspath/a,
3666 // other modules or the application's classpath.
call_initPhase3(TRAPS)3667 static void call_initPhase3(TRAPS) {
3668 Klass* klass = SystemDictionary::resolve_or_fail(vmSymbols::java_lang_System(), true, CHECK);
3669 JavaValue result(T_VOID);
3670 JavaCalls::call_static(&result, klass, vmSymbols::initPhase3_name(),
3671 vmSymbols::void_method_signature(), CHECK);
3672 }
3673
initialize_java_lang_classes(JavaThread * main_thread,TRAPS)3674 void Threads::initialize_java_lang_classes(JavaThread* main_thread, TRAPS) {
3675 TraceTime timer("Initialize java.lang classes", TRACETIME_LOG(Info, startuptime));
3676
3677 if (EagerXrunInit && Arguments::init_libraries_at_startup()) {
3678 create_vm_init_libraries();
3679 }
3680
3681 initialize_class(vmSymbols::java_lang_String(), CHECK);
3682
3683 // Inject CompactStrings value after the static initializers for String ran.
3684 java_lang_String::set_compact_strings(CompactStrings);
3685
3686 // Initialize java_lang.System (needed before creating the thread)
3687 initialize_class(vmSymbols::java_lang_System(), CHECK);
3688 // The VM creates & returns objects of this class. Make sure it's initialized.
3689 initialize_class(vmSymbols::java_lang_Class(), CHECK);
3690 initialize_class(vmSymbols::java_lang_ThreadGroup(), CHECK);
3691 Handle thread_group = create_initial_thread_group(CHECK);
3692 Universe::set_main_thread_group(thread_group());
3693 initialize_class(vmSymbols::java_lang_Thread(), CHECK);
3694 oop thread_object = create_initial_thread(thread_group, main_thread, CHECK);
3695 main_thread->set_threadObj(thread_object);
3696
3697 // Set thread status to running since main thread has
3698 // been started and running.
3699 java_lang_Thread::set_thread_status(thread_object,
3700 java_lang_Thread::RUNNABLE);
3701
3702 // The VM creates objects of this class.
3703 initialize_class(vmSymbols::java_lang_Module(), CHECK);
3704
3705 #ifdef ASSERT
3706 InstanceKlass *k = SystemDictionary::UnsafeConstants_klass();
3707 assert(k->is_not_initialized(), "UnsafeConstants should not already be initialized");
3708 #endif
3709
3710 // initialize the hardware-specific constants needed by Unsafe
3711 initialize_class(vmSymbols::jdk_internal_misc_UnsafeConstants(), CHECK);
3712 jdk_internal_misc_UnsafeConstants::set_unsafe_constants();
3713
3714 // The VM preresolves methods to these classes. Make sure that they get initialized
3715 initialize_class(vmSymbols::java_lang_reflect_Method(), CHECK);
3716 initialize_class(vmSymbols::java_lang_ref_Finalizer(), CHECK);
3717
3718 // Phase 1 of the system initialization in the library, java.lang.System class initialization
3719 call_initPhase1(CHECK);
3720
3721 // get the Java runtime name, version, and vendor info after java.lang.System is initialized
3722 JDK_Version::set_runtime_name(get_java_runtime_name(THREAD));
3723 JDK_Version::set_runtime_version(get_java_runtime_version(THREAD));
3724 JDK_Version::set_runtime_vendor_version(get_java_runtime_vendor_version(THREAD));
3725 JDK_Version::set_runtime_vendor_vm_bug_url(get_java_runtime_vendor_vm_bug_url(THREAD));
3726
3727 // an instance of OutOfMemory exception has been allocated earlier
3728 initialize_class(vmSymbols::java_lang_OutOfMemoryError(), CHECK);
3729 initialize_class(vmSymbols::java_lang_NullPointerException(), CHECK);
3730 initialize_class(vmSymbols::java_lang_ClassCastException(), CHECK);
3731 initialize_class(vmSymbols::java_lang_ArrayStoreException(), CHECK);
3732 initialize_class(vmSymbols::java_lang_ArithmeticException(), CHECK);
3733 initialize_class(vmSymbols::java_lang_StackOverflowError(), CHECK);
3734 initialize_class(vmSymbols::java_lang_IllegalMonitorStateException(), CHECK);
3735 initialize_class(vmSymbols::java_lang_IllegalArgumentException(), CHECK);
3736
3737 // Eager box cache initialization only if AOT is on and any library is loaded.
3738 AOTLoader::initialize_box_caches(CHECK);
3739 }
3740
initialize_jsr292_core_classes(TRAPS)3741 void Threads::initialize_jsr292_core_classes(TRAPS) {
3742 TraceTime timer("Initialize java.lang.invoke classes", TRACETIME_LOG(Info, startuptime));
3743
3744 initialize_class(vmSymbols::java_lang_invoke_MethodHandle(), CHECK);
3745 initialize_class(vmSymbols::java_lang_invoke_ResolvedMethodName(), CHECK);
3746 initialize_class(vmSymbols::java_lang_invoke_MemberName(), CHECK);
3747 initialize_class(vmSymbols::java_lang_invoke_MethodHandleNatives(), CHECK);
3748 }
3749
create_vm(JavaVMInitArgs * args,bool * canTryAgain)3750 jint Threads::create_vm(JavaVMInitArgs* args, bool* canTryAgain) {
3751 extern void JDK_Version_init();
3752
3753 // Preinitialize version info.
3754 VM_Version::early_initialize();
3755
3756 // Check version
3757 if (!is_supported_jni_version(args->version)) return JNI_EVERSION;
3758
3759 // Initialize library-based TLS
3760 ThreadLocalStorage::init();
3761
3762 // Initialize the output stream module
3763 ostream_init();
3764
3765 // Process java launcher properties.
3766 Arguments::process_sun_java_launcher_properties(args);
3767
3768 // Initialize the os module
3769 os::init();
3770
3771 // Record VM creation timing statistics
3772 TraceVmCreationTime create_vm_timer;
3773 create_vm_timer.start();
3774
3775 // Initialize system properties.
3776 Arguments::init_system_properties();
3777
3778 // So that JDK version can be used as a discriminator when parsing arguments
3779 JDK_Version_init();
3780
3781 // Update/Initialize System properties after JDK version number is known
3782 Arguments::init_version_specific_system_properties();
3783
3784 // Make sure to initialize log configuration *before* parsing arguments
3785 LogConfiguration::initialize(create_vm_timer.begin_time());
3786
3787 // Parse arguments
3788 // Note: this internally calls os::init_container_support()
3789 jint parse_result = Arguments::parse(args);
3790 if (parse_result != JNI_OK) return parse_result;
3791
3792 os::init_before_ergo();
3793
3794 jint ergo_result = Arguments::apply_ergo();
3795 if (ergo_result != JNI_OK) return ergo_result;
3796
3797 // Final check of all ranges after ergonomics which may change values.
3798 if (!JVMFlagRangeList::check_ranges()) {
3799 return JNI_EINVAL;
3800 }
3801
3802 // Final check of all 'AfterErgo' constraints after ergonomics which may change values.
3803 bool constraint_result = JVMFlagConstraintList::check_constraints(JVMFlagConstraint::AfterErgo);
3804 if (!constraint_result) {
3805 return JNI_EINVAL;
3806 }
3807
3808 JVMFlagWriteableList::mark_startup();
3809
3810 if (PauseAtStartup) {
3811 os::pause();
3812 }
3813
3814 HOTSPOT_VM_INIT_BEGIN();
3815
3816 // Timing (must come after argument parsing)
3817 TraceTime timer("Create VM", TRACETIME_LOG(Info, startuptime));
3818
3819 // Initialize the os module after parsing the args
3820 jint os_init_2_result = os::init_2();
3821 if (os_init_2_result != JNI_OK) return os_init_2_result;
3822
3823 #ifdef CAN_SHOW_REGISTERS_ON_ASSERT
3824 // Initialize assert poison page mechanism.
3825 if (ShowRegistersOnAssert) {
3826 initialize_assert_poison();
3827 }
3828 #endif // CAN_SHOW_REGISTERS_ON_ASSERT
3829
3830 SafepointMechanism::initialize();
3831
3832 jint adjust_after_os_result = Arguments::adjust_after_os();
3833 if (adjust_after_os_result != JNI_OK) return adjust_after_os_result;
3834
3835 // Initialize output stream logging
3836 ostream_init_log();
3837
3838 // Convert -Xrun to -agentlib: if there is no JVM_OnLoad
3839 // Must be before create_vm_init_agents()
3840 if (Arguments::init_libraries_at_startup()) {
3841 convert_vm_init_libraries_to_agents();
3842 }
3843
3844 // Launch -agentlib/-agentpath and converted -Xrun agents
3845 if (Arguments::init_agents_at_startup()) {
3846 create_vm_init_agents();
3847 }
3848
3849 // Initialize Threads state
3850 _number_of_threads = 0;
3851 _number_of_non_daemon_threads = 0;
3852
3853 // Initialize global data structures and create system classes in heap
3854 vm_init_globals();
3855
3856 #if INCLUDE_JVMCI
3857 if (JVMCICounterSize > 0) {
3858 JavaThread::_jvmci_old_thread_counters = NEW_C_HEAP_ARRAY(jlong, JVMCICounterSize, mtJVMCI);
3859 memset(JavaThread::_jvmci_old_thread_counters, 0, sizeof(jlong) * JVMCICounterSize);
3860 } else {
3861 JavaThread::_jvmci_old_thread_counters = NULL;
3862 }
3863 #endif // INCLUDE_JVMCI
3864
3865 // Attach the main thread to this os thread
3866 JavaThread* main_thread = new JavaThread();
3867 main_thread->set_thread_state(_thread_in_vm);
3868 main_thread->initialize_thread_current();
3869 // must do this before set_active_handles
3870 main_thread->record_stack_base_and_size();
3871 main_thread->register_thread_stack_with_NMT();
3872 main_thread->set_active_handles(JNIHandleBlock::allocate_block());
3873
3874 if (!main_thread->set_as_starting_thread()) {
3875 vm_shutdown_during_initialization(
3876 "Failed necessary internal allocation. Out of swap space");
3877 main_thread->smr_delete();
3878 *canTryAgain = false; // don't let caller call JNI_CreateJavaVM again
3879 return JNI_ENOMEM;
3880 }
3881
3882 // Enable guard page *after* os::create_main_thread(), otherwise it would
3883 // crash Linux VM, see notes in os_linux.cpp.
3884 main_thread->create_stack_guard_pages();
3885
3886 // Initialize Java-Level synchronization subsystem
3887 ObjectMonitor::Initialize();
3888
3889 // Initialize global modules
3890 jint status = init_globals();
3891 if (status != JNI_OK) {
3892 main_thread->smr_delete();
3893 *canTryAgain = false; // don't let caller call JNI_CreateJavaVM again
3894 return status;
3895 }
3896
3897 JFR_ONLY(Jfr::on_create_vm_1();)
3898
3899 // Should be done after the heap is fully created
3900 main_thread->cache_global_variables();
3901
3902 HandleMark hm;
3903
3904 { MutexLocker mu(Threads_lock);
3905 Threads::add(main_thread);
3906 }
3907
3908 // Any JVMTI raw monitors entered in onload will transition into
3909 // real raw monitor. VM is setup enough here for raw monitor enter.
3910 JvmtiExport::transition_pending_onload_raw_monitors();
3911
3912 // Create the VMThread
3913 { TraceTime timer("Start VMThread", TRACETIME_LOG(Info, startuptime));
3914
3915 VMThread::create();
3916 Thread* vmthread = VMThread::vm_thread();
3917
3918 if (!os::create_thread(vmthread, os::vm_thread)) {
3919 vm_exit_during_initialization("Cannot create VM thread. "
3920 "Out of system resources.");
3921 }
3922
3923 // Wait for the VM thread to become ready, and VMThread::run to initialize
3924 // Monitors can have spurious returns, must always check another state flag
3925 {
3926 MonitorLocker ml(Notify_lock);
3927 os::start_thread(vmthread);
3928 while (vmthread->active_handles() == NULL) {
3929 ml.wait();
3930 }
3931 }
3932 }
3933
3934 assert(Universe::is_fully_initialized(), "not initialized");
3935 if (VerifyDuringStartup) {
3936 // Make sure we're starting with a clean slate.
3937 VM_Verify verify_op;
3938 VMThread::execute(&verify_op);
3939 }
3940
3941 // We need this to update the java.vm.info property in case any flags used
3942 // to initially define it have been changed. This is needed for both CDS and
3943 // AOT, since UseSharedSpaces and UseAOT may be changed after java.vm.info
3944 // is initially computed. See Abstract_VM_Version::vm_info_string().
3945 // This update must happen before we initialize the java classes, but
3946 // after any initialization logic that might modify the flags.
3947 Arguments::update_vm_info_property(VM_Version::vm_info_string());
3948
3949 Thread* THREAD = Thread::current();
3950
3951 // Always call even when there are not JVMTI environments yet, since environments
3952 // may be attached late and JVMTI must track phases of VM execution
3953 JvmtiExport::enter_early_start_phase();
3954
3955 // Notify JVMTI agents that VM has started (JNI is up) - nop if no agents.
3956 JvmtiExport::post_early_vm_start();
3957
3958 initialize_java_lang_classes(main_thread, CHECK_JNI_ERR);
3959
3960 quicken_jni_functions();
3961
3962 // No more stub generation allowed after that point.
3963 StubCodeDesc::freeze();
3964
3965 // Set flag that basic initialization has completed. Used by exceptions and various
3966 // debug stuff, that does not work until all basic classes have been initialized.
3967 set_init_completed();
3968
3969 LogConfiguration::post_initialize();
3970 Metaspace::post_initialize();
3971
3972 HOTSPOT_VM_INIT_END();
3973
3974 // record VM initialization completion time
3975 #if INCLUDE_MANAGEMENT
3976 Management::record_vm_init_completed();
3977 #endif // INCLUDE_MANAGEMENT
3978
3979 // Signal Dispatcher needs to be started before VMInit event is posted
3980 os::initialize_jdk_signal_support(CHECK_JNI_ERR);
3981
3982 // Start Attach Listener if +StartAttachListener or it can't be started lazily
3983 if (!DisableAttachMechanism) {
3984 AttachListener::vm_start();
3985 if (StartAttachListener || AttachListener::init_at_startup()) {
3986 AttachListener::init();
3987 }
3988 }
3989
3990 // Launch -Xrun agents
3991 // Must be done in the JVMTI live phase so that for backward compatibility the JDWP
3992 // back-end can launch with -Xdebug -Xrunjdwp.
3993 if (!EagerXrunInit && Arguments::init_libraries_at_startup()) {
3994 create_vm_init_libraries();
3995 }
3996
3997 if (CleanChunkPoolAsync) {
3998 Chunk::start_chunk_pool_cleaner_task();
3999 }
4000
4001 // Start the service thread
4002 // The service thread enqueues JVMTI deferred events and does various hashtable
4003 // and other cleanups. Needs to start before the compilers start posting events.
4004 ServiceThread::initialize();
4005
4006 // initialize compiler(s)
4007 #if defined(COMPILER1) || COMPILER2_OR_JVMCI
4008 #if INCLUDE_JVMCI
4009 bool force_JVMCI_intialization = false;
4010 if (EnableJVMCI) {
4011 // Initialize JVMCI eagerly when it is explicitly requested.
4012 // Or when JVMCILibDumpJNIConfig or JVMCIPrintProperties is enabled.
4013 force_JVMCI_intialization = EagerJVMCI || JVMCIPrintProperties || JVMCILibDumpJNIConfig;
4014
4015 if (!force_JVMCI_intialization) {
4016 // 8145270: Force initialization of JVMCI runtime otherwise requests for blocking
4017 // compilations via JVMCI will not actually block until JVMCI is initialized.
4018 force_JVMCI_intialization = UseJVMCICompiler && (!UseInterpreter || !BackgroundCompilation);
4019 }
4020 }
4021 #endif
4022 CompileBroker::compilation_init_phase1(CHECK_JNI_ERR);
4023 // Postpone completion of compiler initialization to after JVMCI
4024 // is initialized to avoid timeouts of blocking compilations.
4025 if (JVMCI_ONLY(!force_JVMCI_intialization) NOT_JVMCI(true)) {
4026 CompileBroker::compilation_init_phase2();
4027 }
4028 #endif
4029
4030 // Pre-initialize some JSR292 core classes to avoid deadlock during class loading.
4031 // It is done after compilers are initialized, because otherwise compilations of
4032 // signature polymorphic MH intrinsics can be missed
4033 // (see SystemDictionary::find_method_handle_intrinsic).
4034 initialize_jsr292_core_classes(CHECK_JNI_ERR);
4035
4036 // This will initialize the module system. Only java.base classes can be
4037 // loaded until phase 2 completes
4038 call_initPhase2(CHECK_JNI_ERR);
4039
4040 JFR_ONLY(Jfr::on_create_vm_2();)
4041
4042 // Always call even when there are not JVMTI environments yet, since environments
4043 // may be attached late and JVMTI must track phases of VM execution
4044 JvmtiExport::enter_start_phase();
4045
4046 // Notify JVMTI agents that VM has started (JNI is up) - nop if no agents.
4047 JvmtiExport::post_vm_start();
4048
4049 // Final system initialization including security manager and system class loader
4050 call_initPhase3(CHECK_JNI_ERR);
4051
4052 // cache the system and platform class loaders
4053 SystemDictionary::compute_java_loaders(CHECK_JNI_ERR);
4054
4055 #if INCLUDE_CDS
4056 // capture the module path info from the ModuleEntryTable
4057 ClassLoader::initialize_module_path(THREAD);
4058 #endif
4059
4060 #if INCLUDE_JVMCI
4061 if (force_JVMCI_intialization) {
4062 JVMCI::initialize_compiler(CHECK_JNI_ERR);
4063 CompileBroker::compilation_init_phase2();
4064 }
4065 #endif
4066
4067 // Always call even when there are not JVMTI environments yet, since environments
4068 // may be attached late and JVMTI must track phases of VM execution
4069 JvmtiExport::enter_live_phase();
4070
4071 // Make perfmemory accessible
4072 PerfMemory::set_accessible(true);
4073
4074 // Notify JVMTI agents that VM initialization is complete - nop if no agents.
4075 JvmtiExport::post_vm_initialized();
4076
4077 JFR_ONLY(Jfr::on_create_vm_3();)
4078
4079 #if INCLUDE_MANAGEMENT
4080 Management::initialize(THREAD);
4081
4082 if (HAS_PENDING_EXCEPTION) {
4083 // management agent fails to start possibly due to
4084 // configuration problem and is responsible for printing
4085 // stack trace if appropriate. Simply exit VM.
4086 vm_exit(1);
4087 }
4088 #endif // INCLUDE_MANAGEMENT
4089
4090 if (MemProfiling) MemProfiler::engage();
4091 StatSampler::engage();
4092 if (CheckJNICalls) JniPeriodicChecker::engage();
4093
4094 BiasedLocking::init();
4095
4096 #if INCLUDE_RTM_OPT
4097 RTMLockingCounters::init();
4098 #endif
4099
4100 call_postVMInitHook(THREAD);
4101 // The Java side of PostVMInitHook.run must deal with all
4102 // exceptions and provide means of diagnosis.
4103 if (HAS_PENDING_EXCEPTION) {
4104 CLEAR_PENDING_EXCEPTION;
4105 }
4106
4107 {
4108 MutexLocker ml(PeriodicTask_lock);
4109 // Make sure the WatcherThread can be started by WatcherThread::start()
4110 // or by dynamic enrollment.
4111 WatcherThread::make_startable();
4112 // Start up the WatcherThread if there are any periodic tasks
4113 // NOTE: All PeriodicTasks should be registered by now. If they
4114 // aren't, late joiners might appear to start slowly (we might
4115 // take a while to process their first tick).
4116 if (PeriodicTask::num_tasks() > 0) {
4117 WatcherThread::start();
4118 }
4119 }
4120
4121 create_vm_timer.end();
4122 #ifdef ASSERT
4123 _vm_complete = true;
4124 #endif
4125
4126 if (DumpSharedSpaces) {
4127 MetaspaceShared::preload_and_dump(CHECK_JNI_ERR);
4128 ShouldNotReachHere();
4129 }
4130
4131 return JNI_OK;
4132 }
4133
4134 // type for the Agent_OnLoad and JVM_OnLoad entry points
4135 extern "C" {
4136 typedef jint (JNICALL *OnLoadEntry_t)(JavaVM *, char *, void *);
4137 }
4138 // Find a command line agent library and return its entry point for
4139 // -agentlib: -agentpath: -Xrun
4140 // num_symbol_entries must be passed-in since only the caller knows the number of symbols in the array.
lookup_on_load(AgentLibrary * agent,const char * on_load_symbols[],size_t num_symbol_entries)4141 static OnLoadEntry_t lookup_on_load(AgentLibrary* agent,
4142 const char *on_load_symbols[],
4143 size_t num_symbol_entries) {
4144 OnLoadEntry_t on_load_entry = NULL;
4145 void *library = NULL;
4146
4147 if (!agent->valid()) {
4148 char buffer[JVM_MAXPATHLEN];
4149 char ebuf[1024] = "";
4150 const char *name = agent->name();
4151 const char *msg = "Could not find agent library ";
4152
4153 // First check to see if agent is statically linked into executable
4154 if (os::find_builtin_agent(agent, on_load_symbols, num_symbol_entries)) {
4155 library = agent->os_lib();
4156 } else if (agent->is_absolute_path()) {
4157 library = os::dll_load(name, ebuf, sizeof ebuf);
4158 if (library == NULL) {
4159 const char *sub_msg = " in absolute path, with error: ";
4160 size_t len = strlen(msg) + strlen(name) + strlen(sub_msg) + strlen(ebuf) + 1;
4161 char *buf = NEW_C_HEAP_ARRAY(char, len, mtThread);
4162 jio_snprintf(buf, len, "%s%s%s%s", msg, name, sub_msg, ebuf);
4163 // If we can't find the agent, exit.
4164 vm_exit_during_initialization(buf, NULL);
4165 FREE_C_HEAP_ARRAY(char, buf);
4166 }
4167 } else {
4168 // Try to load the agent from the standard dll directory
4169 if (os::dll_locate_lib(buffer, sizeof(buffer), Arguments::get_dll_dir(),
4170 name)) {
4171 library = os::dll_load(buffer, ebuf, sizeof ebuf);
4172 }
4173 if (library == NULL) { // Try the library path directory.
4174 if (os::dll_build_name(buffer, sizeof(buffer), name)) {
4175 library = os::dll_load(buffer, ebuf, sizeof ebuf);
4176 }
4177 if (library == NULL) {
4178 const char *sub_msg = " on the library path, with error: ";
4179 const char *sub_msg2 = "\nModule java.instrument may be missing from runtime image.";
4180
4181 size_t len = strlen(msg) + strlen(name) + strlen(sub_msg) +
4182 strlen(ebuf) + strlen(sub_msg2) + 1;
4183 char *buf = NEW_C_HEAP_ARRAY(char, len, mtThread);
4184 if (!agent->is_instrument_lib()) {
4185 jio_snprintf(buf, len, "%s%s%s%s", msg, name, sub_msg, ebuf);
4186 } else {
4187 jio_snprintf(buf, len, "%s%s%s%s%s", msg, name, sub_msg, ebuf, sub_msg2);
4188 }
4189 // If we can't find the agent, exit.
4190 vm_exit_during_initialization(buf, NULL);
4191 FREE_C_HEAP_ARRAY(char, buf);
4192 }
4193 }
4194 }
4195 agent->set_os_lib(library);
4196 agent->set_valid();
4197 }
4198
4199 // Find the OnLoad function.
4200 on_load_entry =
4201 CAST_TO_FN_PTR(OnLoadEntry_t, os::find_agent_function(agent,
4202 false,
4203 on_load_symbols,
4204 num_symbol_entries));
4205 return on_load_entry;
4206 }
4207
4208 // Find the JVM_OnLoad entry point
lookup_jvm_on_load(AgentLibrary * agent)4209 static OnLoadEntry_t lookup_jvm_on_load(AgentLibrary* agent) {
4210 const char *on_load_symbols[] = JVM_ONLOAD_SYMBOLS;
4211 return lookup_on_load(agent, on_load_symbols, sizeof(on_load_symbols) / sizeof(char*));
4212 }
4213
4214 // Find the Agent_OnLoad entry point
lookup_agent_on_load(AgentLibrary * agent)4215 static OnLoadEntry_t lookup_agent_on_load(AgentLibrary* agent) {
4216 const char *on_load_symbols[] = AGENT_ONLOAD_SYMBOLS;
4217 return lookup_on_load(agent, on_load_symbols, sizeof(on_load_symbols) / sizeof(char*));
4218 }
4219
4220 // For backwards compatibility with -Xrun
4221 // Convert libraries with no JVM_OnLoad, but which have Agent_OnLoad to be
4222 // treated like -agentpath:
4223 // Must be called before agent libraries are created
convert_vm_init_libraries_to_agents()4224 void Threads::convert_vm_init_libraries_to_agents() {
4225 AgentLibrary* agent;
4226 AgentLibrary* next;
4227
4228 for (agent = Arguments::libraries(); agent != NULL; agent = next) {
4229 next = agent->next(); // cache the next agent now as this agent may get moved off this list
4230 OnLoadEntry_t on_load_entry = lookup_jvm_on_load(agent);
4231
4232 // If there is an JVM_OnLoad function it will get called later,
4233 // otherwise see if there is an Agent_OnLoad
4234 if (on_load_entry == NULL) {
4235 on_load_entry = lookup_agent_on_load(agent);
4236 if (on_load_entry != NULL) {
4237 // switch it to the agent list -- so that Agent_OnLoad will be called,
4238 // JVM_OnLoad won't be attempted and Agent_OnUnload will
4239 Arguments::convert_library_to_agent(agent);
4240 } else {
4241 vm_exit_during_initialization("Could not find JVM_OnLoad or Agent_OnLoad function in the library", agent->name());
4242 }
4243 }
4244 }
4245 }
4246
4247 // Create agents for -agentlib: -agentpath: and converted -Xrun
4248 // Invokes Agent_OnLoad
4249 // Called very early -- before JavaThreads exist
create_vm_init_agents()4250 void Threads::create_vm_init_agents() {
4251 extern struct JavaVM_ main_vm;
4252 AgentLibrary* agent;
4253
4254 JvmtiExport::enter_onload_phase();
4255
4256 for (agent = Arguments::agents(); agent != NULL; agent = agent->next()) {
4257 // CDS dumping does not support native JVMTI agent.
4258 // CDS dumping supports Java agent if the AllowArchivingWithJavaAgent diagnostic option is specified.
4259 if (Arguments::is_dumping_archive()) {
4260 if(!agent->is_instrument_lib()) {
4261 vm_exit_during_cds_dumping("CDS dumping does not support native JVMTI agent, name", agent->name());
4262 } else if (!AllowArchivingWithJavaAgent) {
4263 vm_exit_during_cds_dumping(
4264 "Must enable AllowArchivingWithJavaAgent in order to run Java agent during CDS dumping");
4265 }
4266 }
4267
4268 OnLoadEntry_t on_load_entry = lookup_agent_on_load(agent);
4269
4270 if (on_load_entry != NULL) {
4271 // Invoke the Agent_OnLoad function
4272 jint err = (*on_load_entry)(&main_vm, agent->options(), NULL);
4273 if (err != JNI_OK) {
4274 vm_exit_during_initialization("agent library failed to init", agent->name());
4275 }
4276 } else {
4277 vm_exit_during_initialization("Could not find Agent_OnLoad function in the agent library", agent->name());
4278 }
4279 }
4280
4281 JvmtiExport::enter_primordial_phase();
4282 }
4283
4284 extern "C" {
4285 typedef void (JNICALL *Agent_OnUnload_t)(JavaVM *);
4286 }
4287
shutdown_vm_agents()4288 void Threads::shutdown_vm_agents() {
4289 // Send any Agent_OnUnload notifications
4290 const char *on_unload_symbols[] = AGENT_ONUNLOAD_SYMBOLS;
4291 size_t num_symbol_entries = ARRAY_SIZE(on_unload_symbols);
4292 extern struct JavaVM_ main_vm;
4293 for (AgentLibrary* agent = Arguments::agents(); agent != NULL; agent = agent->next()) {
4294
4295 // Find the Agent_OnUnload function.
4296 Agent_OnUnload_t unload_entry = CAST_TO_FN_PTR(Agent_OnUnload_t,
4297 os::find_agent_function(agent,
4298 false,
4299 on_unload_symbols,
4300 num_symbol_entries));
4301
4302 // Invoke the Agent_OnUnload function
4303 if (unload_entry != NULL) {
4304 JavaThread* thread = JavaThread::current();
4305 ThreadToNativeFromVM ttn(thread);
4306 HandleMark hm(thread);
4307 (*unload_entry)(&main_vm);
4308 }
4309 }
4310 }
4311
4312 // Called for after the VM is initialized for -Xrun libraries which have not been converted to agent libraries
4313 // Invokes JVM_OnLoad
create_vm_init_libraries()4314 void Threads::create_vm_init_libraries() {
4315 extern struct JavaVM_ main_vm;
4316 AgentLibrary* agent;
4317
4318 for (agent = Arguments::libraries(); agent != NULL; agent = agent->next()) {
4319 OnLoadEntry_t on_load_entry = lookup_jvm_on_load(agent);
4320
4321 if (on_load_entry != NULL) {
4322 // Invoke the JVM_OnLoad function
4323 JavaThread* thread = JavaThread::current();
4324 ThreadToNativeFromVM ttn(thread);
4325 HandleMark hm(thread);
4326 jint err = (*on_load_entry)(&main_vm, agent->options(), NULL);
4327 if (err != JNI_OK) {
4328 vm_exit_during_initialization("-Xrun library failed to init", agent->name());
4329 }
4330 } else {
4331 vm_exit_during_initialization("Could not find JVM_OnLoad function in -Xrun library", agent->name());
4332 }
4333 }
4334 }
4335
4336
4337 // Last thread running calls java.lang.Shutdown.shutdown()
invoke_shutdown_hooks()4338 void JavaThread::invoke_shutdown_hooks() {
4339 HandleMark hm(this);
4340
4341 // We could get here with a pending exception, if so clear it now.
4342 if (this->has_pending_exception()) {
4343 this->clear_pending_exception();
4344 }
4345
4346 EXCEPTION_MARK;
4347 Klass* shutdown_klass =
4348 SystemDictionary::resolve_or_null(vmSymbols::java_lang_Shutdown(),
4349 THREAD);
4350 if (shutdown_klass != NULL) {
4351 // SystemDictionary::resolve_or_null will return null if there was
4352 // an exception. If we cannot load the Shutdown class, just don't
4353 // call Shutdown.shutdown() at all. This will mean the shutdown hooks
4354 // won't be run. Note that if a shutdown hook was registered,
4355 // the Shutdown class would have already been loaded
4356 // (Runtime.addShutdownHook will load it).
4357 JavaValue result(T_VOID);
4358 JavaCalls::call_static(&result,
4359 shutdown_klass,
4360 vmSymbols::shutdown_name(),
4361 vmSymbols::void_method_signature(),
4362 THREAD);
4363 }
4364 CLEAR_PENDING_EXCEPTION;
4365 }
4366
4367 // Threads::destroy_vm() is normally called from jni_DestroyJavaVM() when
4368 // the program falls off the end of main(). Another VM exit path is through
4369 // vm_exit() when the program calls System.exit() to return a value or when
4370 // there is a serious error in VM. The two shutdown paths are not exactly
4371 // the same, but they share Shutdown.shutdown() at Java level and before_exit()
4372 // and VM_Exit op at VM level.
4373 //
4374 // Shutdown sequence:
4375 // + Shutdown native memory tracking if it is on
4376 // + Wait until we are the last non-daemon thread to execute
4377 // <-- every thing is still working at this moment -->
4378 // + Call java.lang.Shutdown.shutdown(), which will invoke Java level
4379 // shutdown hooks
4380 // + Call before_exit(), prepare for VM exit
4381 // > run VM level shutdown hooks (they are registered through JVM_OnExit(),
4382 // currently the only user of this mechanism is File.deleteOnExit())
4383 // > stop StatSampler, watcher thread,
4384 // post thread end and vm death events to JVMTI,
4385 // stop signal thread
4386 // + Call JavaThread::exit(), it will:
4387 // > release JNI handle blocks, remove stack guard pages
4388 // > remove this thread from Threads list
4389 // <-- no more Java code from this thread after this point -->
4390 // + Stop VM thread, it will bring the remaining VM to a safepoint and stop
4391 // the compiler threads at safepoint
4392 // <-- do not use anything that could get blocked by Safepoint -->
4393 // + Disable tracing at JNI/JVM barriers
4394 // + Set _vm_exited flag for threads that are still running native code
4395 // + Call exit_globals()
4396 // > deletes tty
4397 // > deletes PerfMemory resources
4398 // + Delete this thread
4399 // + Return to caller
4400
destroy_vm()4401 bool Threads::destroy_vm() {
4402 JavaThread* thread = JavaThread::current();
4403
4404 #ifdef ASSERT
4405 _vm_complete = false;
4406 #endif
4407 // Wait until we are the last non-daemon thread to execute
4408 { MonitorLocker nu(Threads_lock);
4409 while (Threads::number_of_non_daemon_threads() > 1)
4410 // This wait should make safepoint checks, wait without a timeout,
4411 // and wait as a suspend-equivalent condition.
4412 nu.wait(0, Mutex::_as_suspend_equivalent_flag);
4413 }
4414
4415 EventShutdown e;
4416 if (e.should_commit()) {
4417 e.set_reason("No remaining non-daemon Java threads");
4418 e.commit();
4419 }
4420
4421 // Hang forever on exit if we are reporting an error.
4422 if (ShowMessageBoxOnError && VMError::is_error_reported()) {
4423 os::infinite_sleep();
4424 }
4425 os::wait_for_keypress_at_exit();
4426
4427 // run Java level shutdown hooks
4428 thread->invoke_shutdown_hooks();
4429
4430 before_exit(thread);
4431
4432 thread->exit(true);
4433
4434 // Stop VM thread.
4435 {
4436 // 4945125 The vm thread comes to a safepoint during exit.
4437 // GC vm_operations can get caught at the safepoint, and the
4438 // heap is unparseable if they are caught. Grab the Heap_lock
4439 // to prevent this. The GC vm_operations will not be able to
4440 // queue until after the vm thread is dead. After this point,
4441 // we'll never emerge out of the safepoint before the VM exits.
4442
4443 MutexLocker ml(Heap_lock, Mutex::_no_safepoint_check_flag);
4444
4445 VMThread::wait_for_vm_thread_exit();
4446 assert(SafepointSynchronize::is_at_safepoint(), "VM thread should exit at Safepoint");
4447 VMThread::destroy();
4448 }
4449
4450 // Now, all Java threads are gone except daemon threads. Daemon threads
4451 // running Java code or in VM are stopped by the Safepoint. However,
4452 // daemon threads executing native code are still running. But they
4453 // will be stopped at native=>Java/VM barriers. Note that we can't
4454 // simply kill or suspend them, as it is inherently deadlock-prone.
4455
4456 VM_Exit::set_vm_exited();
4457
4458 // Clean up ideal graph printers after the VMThread has started
4459 // the final safepoint which will block all the Compiler threads.
4460 // Note that this Thread has already logically exited so the
4461 // clean_up() function's use of a JavaThreadIteratorWithHandle
4462 // would be a problem except set_vm_exited() has remembered the
4463 // shutdown thread which is granted a policy exception.
4464 #if defined(COMPILER2) && !defined(PRODUCT)
4465 IdealGraphPrinter::clean_up();
4466 #endif
4467
4468 notify_vm_shutdown();
4469
4470 // exit_globals() will delete tty
4471 exit_globals();
4472
4473 // We are after VM_Exit::set_vm_exited() so we can't call
4474 // thread->smr_delete() or we will block on the Threads_lock.
4475 // Deleting the shutdown thread here is safe because another
4476 // JavaThread cannot have an active ThreadsListHandle for
4477 // this JavaThread.
4478 delete thread;
4479
4480 #if INCLUDE_JVMCI
4481 if (JVMCICounterSize > 0) {
4482 FREE_C_HEAP_ARRAY(jlong, JavaThread::_jvmci_old_thread_counters);
4483 }
4484 #endif
4485
4486 LogConfiguration::finalize();
4487
4488 return true;
4489 }
4490
4491
is_supported_jni_version_including_1_1(jint version)4492 jboolean Threads::is_supported_jni_version_including_1_1(jint version) {
4493 if (version == JNI_VERSION_1_1) return JNI_TRUE;
4494 return is_supported_jni_version(version);
4495 }
4496
4497
is_supported_jni_version(jint version)4498 jboolean Threads::is_supported_jni_version(jint version) {
4499 if (version == JNI_VERSION_1_2) return JNI_TRUE;
4500 if (version == JNI_VERSION_1_4) return JNI_TRUE;
4501 if (version == JNI_VERSION_1_6) return JNI_TRUE;
4502 if (version == JNI_VERSION_1_8) return JNI_TRUE;
4503 if (version == JNI_VERSION_9) return JNI_TRUE;
4504 if (version == JNI_VERSION_10) return JNI_TRUE;
4505 return JNI_FALSE;
4506 }
4507
4508
add(JavaThread * p,bool force_daemon)4509 void Threads::add(JavaThread* p, bool force_daemon) {
4510 // The threads lock must be owned at this point
4511 assert(Threads_lock->owned_by_self(), "must have threads lock");
4512
4513 BarrierSet::barrier_set()->on_thread_attach(p);
4514
4515 // Once a JavaThread is added to the Threads list, smr_delete() has
4516 // to be used to delete it. Otherwise we can just delete it directly.
4517 p->set_on_thread_list();
4518
4519 _number_of_threads++;
4520 oop threadObj = p->threadObj();
4521 bool daemon = true;
4522 // Bootstrapping problem: threadObj can be null for initial
4523 // JavaThread (or for threads attached via JNI)
4524 if ((!force_daemon) && !is_daemon((threadObj))) {
4525 _number_of_non_daemon_threads++;
4526 daemon = false;
4527 }
4528
4529 ThreadService::add_thread(p, daemon);
4530
4531 // Maintain fast thread list
4532 ThreadsSMRSupport::add_thread(p);
4533
4534 // Possible GC point.
4535 Events::log(p, "Thread added: " INTPTR_FORMAT, p2i(p));
4536 }
4537
remove(JavaThread * p,bool is_daemon)4538 void Threads::remove(JavaThread* p, bool is_daemon) {
4539
4540 // Reclaim the ObjectMonitors from the om_in_use_list and om_free_list of the moribund thread.
4541 ObjectSynchronizer::om_flush(p);
4542
4543 // Extra scope needed for Thread_lock, so we can check
4544 // that we do not remove thread without safepoint code notice
4545 { MonitorLocker ml(Threads_lock);
4546
4547 assert(ThreadsSMRSupport::get_java_thread_list()->includes(p), "p must be present");
4548
4549 // Maintain fast thread list
4550 ThreadsSMRSupport::remove_thread(p);
4551
4552 _number_of_threads--;
4553 if (!is_daemon) {
4554 _number_of_non_daemon_threads--;
4555
4556 // Only one thread left, do a notify on the Threads_lock so a thread waiting
4557 // on destroy_vm will wake up.
4558 if (number_of_non_daemon_threads() == 1) {
4559 ml.notify_all();
4560 }
4561 }
4562 ThreadService::remove_thread(p, is_daemon);
4563
4564 // Make sure that safepoint code disregard this thread. This is needed since
4565 // the thread might mess around with locks after this point. This can cause it
4566 // to do callbacks into the safepoint code. However, the safepoint code is not aware
4567 // of this thread since it is removed from the queue.
4568 p->set_terminated_value();
4569 } // unlock Threads_lock
4570
4571 // Since Events::log uses a lock, we grab it outside the Threads_lock
4572 Events::log(p, "Thread exited: " INTPTR_FORMAT, p2i(p));
4573 }
4574
4575 // Operations on the Threads list for GC. These are not explicitly locked,
4576 // but the garbage collector must provide a safe context for them to run.
4577 // In particular, these things should never be called when the Threads_lock
4578 // is held by some other thread. (Note: the Safepoint abstraction also
4579 // uses the Threads_lock to guarantee this property. It also makes sure that
4580 // all threads gets blocked when exiting or starting).
4581
oops_do(OopClosure * f,CodeBlobClosure * cf)4582 void Threads::oops_do(OopClosure* f, CodeBlobClosure* cf) {
4583 ALL_JAVA_THREADS(p) {
4584 p->oops_do(f, cf);
4585 }
4586 VMThread::vm_thread()->oops_do(f, cf);
4587 }
4588
change_thread_claim_token()4589 void Threads::change_thread_claim_token() {
4590 if (++_thread_claim_token == 0) {
4591 // On overflow of the token counter, there is a risk of future
4592 // collisions between a new global token value and a stale token
4593 // for a thread, because not all iterations visit all threads.
4594 // (Though it's pretty much a theoretical concern for non-trivial
4595 // token counter sizes.) To deal with the possibility, reset all
4596 // the thread tokens to zero on global token overflow.
4597 struct ResetClaims : public ThreadClosure {
4598 virtual void do_thread(Thread* t) {
4599 t->claim_threads_do(false, 0);
4600 }
4601 } reset_claims;
4602 Threads::threads_do(&reset_claims);
4603 // On overflow, update the global token to non-zero, to
4604 // avoid the special "never claimed" initial thread value.
4605 _thread_claim_token = 1;
4606 }
4607 }
4608
4609 #ifdef ASSERT
assert_thread_claimed(const char * kind,Thread * t,uintx expected)4610 void assert_thread_claimed(const char* kind, Thread* t, uintx expected) {
4611 const uintx token = t->threads_do_token();
4612 assert(token == expected,
4613 "%s " PTR_FORMAT " has incorrect value " UINTX_FORMAT " != "
4614 UINTX_FORMAT, kind, p2i(t), token, expected);
4615 }
4616
assert_all_threads_claimed()4617 void Threads::assert_all_threads_claimed() {
4618 ALL_JAVA_THREADS(p) {
4619 assert_thread_claimed("Thread", p, _thread_claim_token);
4620 }
4621 assert_thread_claimed("VMThread", VMThread::vm_thread(), _thread_claim_token);
4622 }
4623 #endif // ASSERT
4624
4625 class ParallelOopsDoThreadClosure : public ThreadClosure {
4626 private:
4627 OopClosure* _f;
4628 CodeBlobClosure* _cf;
4629 public:
ParallelOopsDoThreadClosure(OopClosure * f,CodeBlobClosure * cf)4630 ParallelOopsDoThreadClosure(OopClosure* f, CodeBlobClosure* cf) : _f(f), _cf(cf) {}
do_thread(Thread * t)4631 void do_thread(Thread* t) {
4632 t->oops_do(_f, _cf);
4633 }
4634 };
4635
possibly_parallel_oops_do(bool is_par,OopClosure * f,CodeBlobClosure * cf)4636 void Threads::possibly_parallel_oops_do(bool is_par, OopClosure* f, CodeBlobClosure* cf) {
4637 ParallelOopsDoThreadClosure tc(f, cf);
4638 possibly_parallel_threads_do(is_par, &tc);
4639 }
4640
nmethods_do(CodeBlobClosure * cf)4641 void Threads::nmethods_do(CodeBlobClosure* cf) {
4642 ALL_JAVA_THREADS(p) {
4643 // This is used by the code cache sweeper to mark nmethods that are active
4644 // on the stack of a Java thread. Ignore the sweeper thread itself to avoid
4645 // marking CodeCacheSweeperThread::_scanned_compiled_method as active.
4646 if(!p->is_Code_cache_sweeper_thread()) {
4647 p->nmethods_do(cf);
4648 }
4649 }
4650 }
4651
metadata_do(MetadataClosure * f)4652 void Threads::metadata_do(MetadataClosure* f) {
4653 ALL_JAVA_THREADS(p) {
4654 p->metadata_do(f);
4655 }
4656 }
4657
4658 class ThreadHandlesClosure : public ThreadClosure {
4659 void (*_f)(Metadata*);
4660 public:
ThreadHandlesClosure(void f (Metadata *))4661 ThreadHandlesClosure(void f(Metadata*)) : _f(f) {}
do_thread(Thread * thread)4662 virtual void do_thread(Thread* thread) {
4663 thread->metadata_handles_do(_f);
4664 }
4665 };
4666
metadata_handles_do(void f (Metadata *))4667 void Threads::metadata_handles_do(void f(Metadata*)) {
4668 // Only walk the Handles in Thread.
4669 ThreadHandlesClosure handles_closure(f);
4670 threads_do(&handles_closure);
4671 }
4672
4673 // Get count Java threads that are waiting to enter the specified monitor.
get_pending_threads(ThreadsList * t_list,int count,address monitor)4674 GrowableArray<JavaThread*>* Threads::get_pending_threads(ThreadsList * t_list,
4675 int count,
4676 address monitor) {
4677 GrowableArray<JavaThread*>* result = new GrowableArray<JavaThread*>(count);
4678
4679 int i = 0;
4680 DO_JAVA_THREADS(t_list, p) {
4681 if (!p->can_call_java()) continue;
4682
4683 address pending = (address)p->current_pending_monitor();
4684 if (pending == monitor) { // found a match
4685 if (i < count) result->append(p); // save the first count matches
4686 i++;
4687 }
4688 }
4689
4690 return result;
4691 }
4692
4693
owning_thread_from_monitor_owner(ThreadsList * t_list,address owner)4694 JavaThread *Threads::owning_thread_from_monitor_owner(ThreadsList * t_list,
4695 address owner) {
4696 // NULL owner means not locked so we can skip the search
4697 if (owner == NULL) return NULL;
4698
4699 DO_JAVA_THREADS(t_list, p) {
4700 // first, see if owner is the address of a Java thread
4701 if (owner == (address)p) return p;
4702 }
4703
4704 // Cannot assert on lack of success here since this function may be
4705 // used by code that is trying to report useful problem information
4706 // like deadlock detection.
4707 if (UseHeavyMonitors) return NULL;
4708
4709 // If we didn't find a matching Java thread and we didn't force use of
4710 // heavyweight monitors, then the owner is the stack address of the
4711 // Lock Word in the owning Java thread's stack.
4712 //
4713 JavaThread* the_owner = NULL;
4714 DO_JAVA_THREADS(t_list, q) {
4715 if (q->is_lock_owned(owner)) {
4716 the_owner = q;
4717 break;
4718 }
4719 }
4720
4721 // cannot assert on lack of success here; see above comment
4722 return the_owner;
4723 }
4724
4725 // Threads::print_on() is called at safepoint by VM_PrintThreads operation.
print_on(outputStream * st,bool print_stacks,bool internal_format,bool print_concurrent_locks,bool print_extended_info)4726 void Threads::print_on(outputStream* st, bool print_stacks,
4727 bool internal_format, bool print_concurrent_locks,
4728 bool print_extended_info) {
4729 char buf[32];
4730 st->print_raw_cr(os::local_time_string(buf, sizeof(buf)));
4731
4732 st->print_cr("Full thread dump %s (%s %s):",
4733 VM_Version::vm_name(),
4734 VM_Version::vm_release(),
4735 VM_Version::vm_info_string());
4736 st->cr();
4737
4738 #if INCLUDE_SERVICES
4739 // Dump concurrent locks
4740 ConcurrentLocksDump concurrent_locks;
4741 if (print_concurrent_locks) {
4742 concurrent_locks.dump_at_safepoint();
4743 }
4744 #endif // INCLUDE_SERVICES
4745
4746 ThreadsSMRSupport::print_info_on(st);
4747 st->cr();
4748
4749 ALL_JAVA_THREADS(p) {
4750 ResourceMark rm;
4751 p->print_on(st, print_extended_info);
4752 if (print_stacks) {
4753 if (internal_format) {
4754 p->trace_stack();
4755 } else {
4756 p->print_stack_on(st);
4757 }
4758 }
4759 st->cr();
4760 #if INCLUDE_SERVICES
4761 if (print_concurrent_locks) {
4762 concurrent_locks.print_locks_on(p, st);
4763 }
4764 #endif // INCLUDE_SERVICES
4765 }
4766
4767 VMThread::vm_thread()->print_on(st);
4768 st->cr();
4769 Universe::heap()->print_gc_threads_on(st);
4770 WatcherThread* wt = WatcherThread::watcher_thread();
4771 if (wt != NULL) {
4772 wt->print_on(st);
4773 st->cr();
4774 }
4775
4776 st->flush();
4777 }
4778
print_on_error(Thread * this_thread,outputStream * st,Thread * current,char * buf,int buflen,bool * found_current)4779 void Threads::print_on_error(Thread* this_thread, outputStream* st, Thread* current, char* buf,
4780 int buflen, bool* found_current) {
4781 if (this_thread != NULL) {
4782 bool is_current = (current == this_thread);
4783 *found_current = *found_current || is_current;
4784 st->print("%s", is_current ? "=>" : " ");
4785
4786 st->print(PTR_FORMAT, p2i(this_thread));
4787 st->print(" ");
4788 this_thread->print_on_error(st, buf, buflen);
4789 st->cr();
4790 }
4791 }
4792
4793 class PrintOnErrorClosure : public ThreadClosure {
4794 outputStream* _st;
4795 Thread* _current;
4796 char* _buf;
4797 int _buflen;
4798 bool* _found_current;
4799 public:
PrintOnErrorClosure(outputStream * st,Thread * current,char * buf,int buflen,bool * found_current)4800 PrintOnErrorClosure(outputStream* st, Thread* current, char* buf,
4801 int buflen, bool* found_current) :
4802 _st(st), _current(current), _buf(buf), _buflen(buflen), _found_current(found_current) {}
4803
do_thread(Thread * thread)4804 virtual void do_thread(Thread* thread) {
4805 Threads::print_on_error(thread, _st, _current, _buf, _buflen, _found_current);
4806 }
4807 };
4808
4809 // Threads::print_on_error() is called by fatal error handler. It's possible
4810 // that VM is not at safepoint and/or current thread is inside signal handler.
4811 // Don't print stack trace, as the stack may not be walkable. Don't allocate
4812 // memory (even in resource area), it might deadlock the error handler.
print_on_error(outputStream * st,Thread * current,char * buf,int buflen)4813 void Threads::print_on_error(outputStream* st, Thread* current, char* buf,
4814 int buflen) {
4815 ThreadsSMRSupport::print_info_on(st);
4816 st->cr();
4817
4818 bool found_current = false;
4819 st->print_cr("Java Threads: ( => current thread )");
4820 ALL_JAVA_THREADS(thread) {
4821 print_on_error(thread, st, current, buf, buflen, &found_current);
4822 }
4823 st->cr();
4824
4825 st->print_cr("Other Threads:");
4826 print_on_error(VMThread::vm_thread(), st, current, buf, buflen, &found_current);
4827 print_on_error(WatcherThread::watcher_thread(), st, current, buf, buflen, &found_current);
4828
4829 PrintOnErrorClosure print_closure(st, current, buf, buflen, &found_current);
4830 Universe::heap()->gc_threads_do(&print_closure);
4831
4832 if (!found_current) {
4833 st->cr();
4834 st->print("=>" PTR_FORMAT " (exited) ", p2i(current));
4835 current->print_on_error(st, buf, buflen);
4836 st->cr();
4837 }
4838 st->cr();
4839
4840 st->print_cr("Threads with active compile tasks:");
4841 print_threads_compiling(st, buf, buflen);
4842 }
4843
print_threads_compiling(outputStream * st,char * buf,int buflen,bool short_form)4844 void Threads::print_threads_compiling(outputStream* st, char* buf, int buflen, bool short_form) {
4845 ALL_JAVA_THREADS(thread) {
4846 if (thread->is_Compiler_thread()) {
4847 CompilerThread* ct = (CompilerThread*) thread;
4848
4849 // Keep task in local variable for NULL check.
4850 // ct->_task might be set to NULL by concurring compiler thread
4851 // because it completed the compilation. The task is never freed,
4852 // though, just returned to a free list.
4853 CompileTask* task = ct->task();
4854 if (task != NULL) {
4855 thread->print_name_on_error(st, buf, buflen);
4856 st->print(" ");
4857 task->print(st, NULL, short_form, true);
4858 }
4859 }
4860 }
4861 }
4862
4863
4864 // Internal SpinLock and Mutex
4865 // Based on ParkEvent
4866
4867 // Ad-hoc mutual exclusion primitives: SpinLock and Mux
4868 //
4869 // We employ SpinLocks _only for low-contention, fixed-length
4870 // short-duration critical sections where we're concerned
4871 // about native mutex_t or HotSpot Mutex:: latency.
4872 // The mux construct provides a spin-then-block mutual exclusion
4873 // mechanism.
4874 //
4875 // Testing has shown that contention on the ListLock guarding gFreeList
4876 // is common. If we implement ListLock as a simple SpinLock it's common
4877 // for the JVM to devolve to yielding with little progress. This is true
4878 // despite the fact that the critical sections protected by ListLock are
4879 // extremely short.
4880 //
4881 // TODO-FIXME: ListLock should be of type SpinLock.
4882 // We should make this a 1st-class type, integrated into the lock
4883 // hierarchy as leaf-locks. Critically, the SpinLock structure
4884 // should have sufficient padding to avoid false-sharing and excessive
4885 // cache-coherency traffic.
4886
4887
4888 typedef volatile int SpinLockT;
4889
SpinAcquire(volatile int * adr,const char * LockName)4890 void Thread::SpinAcquire(volatile int * adr, const char * LockName) {
4891 if (Atomic::cmpxchg(adr, 0, 1) == 0) {
4892 return; // normal fast-path return
4893 }
4894
4895 // Slow-path : We've encountered contention -- Spin/Yield/Block strategy.
4896 int ctr = 0;
4897 int Yields = 0;
4898 for (;;) {
4899 while (*adr != 0) {
4900 ++ctr;
4901 if ((ctr & 0xFFF) == 0 || !os::is_MP()) {
4902 if (Yields > 5) {
4903 os::naked_short_sleep(1);
4904 } else {
4905 os::naked_yield();
4906 ++Yields;
4907 }
4908 } else {
4909 SpinPause();
4910 }
4911 }
4912 if (Atomic::cmpxchg(adr, 0, 1) == 0) return;
4913 }
4914 }
4915
SpinRelease(volatile int * adr)4916 void Thread::SpinRelease(volatile int * adr) {
4917 assert(*adr != 0, "invariant");
4918 OrderAccess::fence(); // guarantee at least release consistency.
4919 // Roach-motel semantics.
4920 // It's safe if subsequent LDs and STs float "up" into the critical section,
4921 // but prior LDs and STs within the critical section can't be allowed
4922 // to reorder or float past the ST that releases the lock.
4923 // Loads and stores in the critical section - which appear in program
4924 // order before the store that releases the lock - must also appear
4925 // before the store that releases the lock in memory visibility order.
4926 // Conceptually we need a #loadstore|#storestore "release" MEMBAR before
4927 // the ST of 0 into the lock-word which releases the lock, so fence
4928 // more than covers this on all platforms.
4929 *adr = 0;
4930 }
4931
4932 // muxAcquire and muxRelease:
4933 //
4934 // * muxAcquire and muxRelease support a single-word lock-word construct.
4935 // The LSB of the word is set IFF the lock is held.
4936 // The remainder of the word points to the head of a singly-linked list
4937 // of threads blocked on the lock.
4938 //
4939 // * The current implementation of muxAcquire-muxRelease uses its own
4940 // dedicated Thread._MuxEvent instance. If we're interested in
4941 // minimizing the peak number of extant ParkEvent instances then
4942 // we could eliminate _MuxEvent and "borrow" _ParkEvent as long
4943 // as certain invariants were satisfied. Specifically, care would need
4944 // to be taken with regards to consuming unpark() "permits".
4945 // A safe rule of thumb is that a thread would never call muxAcquire()
4946 // if it's enqueued (cxq, EntryList, WaitList, etc) and will subsequently
4947 // park(). Otherwise the _ParkEvent park() operation in muxAcquire() could
4948 // consume an unpark() permit intended for monitorenter, for instance.
4949 // One way around this would be to widen the restricted-range semaphore
4950 // implemented in park(). Another alternative would be to provide
4951 // multiple instances of the PlatformEvent() for each thread. One
4952 // instance would be dedicated to muxAcquire-muxRelease, for instance.
4953 //
4954 // * Usage:
4955 // -- Only as leaf locks
4956 // -- for short-term locking only as muxAcquire does not perform
4957 // thread state transitions.
4958 //
4959 // Alternatives:
4960 // * We could implement muxAcquire and muxRelease with MCS or CLH locks
4961 // but with parking or spin-then-park instead of pure spinning.
4962 // * Use Taura-Oyama-Yonenzawa locks.
4963 // * It's possible to construct a 1-0 lock if we encode the lockword as
4964 // (List,LockByte). Acquire will CAS the full lockword while Release
4965 // will STB 0 into the LockByte. The 1-0 scheme admits stranding, so
4966 // acquiring threads use timers (ParkTimed) to detect and recover from
4967 // the stranding window. Thread/Node structures must be aligned on 256-byte
4968 // boundaries by using placement-new.
4969 // * Augment MCS with advisory back-link fields maintained with CAS().
4970 // Pictorially: LockWord -> T1 <-> T2 <-> T3 <-> ... <-> Tn <-> Owner.
4971 // The validity of the backlinks must be ratified before we trust the value.
4972 // If the backlinks are invalid the exiting thread must back-track through the
4973 // the forward links, which are always trustworthy.
4974 // * Add a successor indication. The LockWord is currently encoded as
4975 // (List, LOCKBIT:1). We could also add a SUCCBIT or an explicit _succ variable
4976 // to provide the usual futile-wakeup optimization.
4977 // See RTStt for details.
4978 //
4979
4980
4981 const intptr_t LOCKBIT = 1;
4982
muxAcquire(volatile intptr_t * Lock,const char * LockName)4983 void Thread::muxAcquire(volatile intptr_t * Lock, const char * LockName) {
4984 intptr_t w = Atomic::cmpxchg(Lock, (intptr_t)0, LOCKBIT);
4985 if (w == 0) return;
4986 if ((w & LOCKBIT) == 0 && Atomic::cmpxchg(Lock, w, w|LOCKBIT) == w) {
4987 return;
4988 }
4989
4990 ParkEvent * const Self = Thread::current()->_MuxEvent;
4991 assert((intptr_t(Self) & LOCKBIT) == 0, "invariant");
4992 for (;;) {
4993 int its = (os::is_MP() ? 100 : 0) + 1;
4994
4995 // Optional spin phase: spin-then-park strategy
4996 while (--its >= 0) {
4997 w = *Lock;
4998 if ((w & LOCKBIT) == 0 && Atomic::cmpxchg(Lock, w, w|LOCKBIT) == w) {
4999 return;
5000 }
5001 }
5002
5003 Self->reset();
5004 Self->OnList = intptr_t(Lock);
5005 // The following fence() isn't _strictly necessary as the subsequent
5006 // CAS() both serializes execution and ratifies the fetched *Lock value.
5007 OrderAccess::fence();
5008 for (;;) {
5009 w = *Lock;
5010 if ((w & LOCKBIT) == 0) {
5011 if (Atomic::cmpxchg(Lock, w, w|LOCKBIT) == w) {
5012 Self->OnList = 0; // hygiene - allows stronger asserts
5013 return;
5014 }
5015 continue; // Interference -- *Lock changed -- Just retry
5016 }
5017 assert(w & LOCKBIT, "invariant");
5018 Self->ListNext = (ParkEvent *) (w & ~LOCKBIT);
5019 if (Atomic::cmpxchg(Lock, w, intptr_t(Self)|LOCKBIT) == w) break;
5020 }
5021
5022 while (Self->OnList != 0) {
5023 Self->park();
5024 }
5025 }
5026 }
5027
5028 // Release() must extract a successor from the list and then wake that thread.
5029 // It can "pop" the front of the list or use a detach-modify-reattach (DMR) scheme
5030 // similar to that used by ParkEvent::Allocate() and ::Release(). DMR-based
5031 // Release() would :
5032 // (A) CAS() or swap() null to *Lock, releasing the lock and detaching the list.
5033 // (B) Extract a successor from the private list "in-hand"
5034 // (C) attempt to CAS() the residual back into *Lock over null.
5035 // If there were any newly arrived threads and the CAS() would fail.
5036 // In that case Release() would detach the RATs, re-merge the list in-hand
5037 // with the RATs and repeat as needed. Alternately, Release() might
5038 // detach and extract a successor, but then pass the residual list to the wakee.
5039 // The wakee would be responsible for reattaching and remerging before it
5040 // competed for the lock.
5041 //
5042 // Both "pop" and DMR are immune from ABA corruption -- there can be
5043 // multiple concurrent pushers, but only one popper or detacher.
5044 // This implementation pops from the head of the list. This is unfair,
5045 // but tends to provide excellent throughput as hot threads remain hot.
5046 // (We wake recently run threads first).
5047 //
5048 // All paths through muxRelease() will execute a CAS.
5049 // Release consistency -- We depend on the CAS in muxRelease() to provide full
5050 // bidirectional fence/MEMBAR semantics, ensuring that all prior memory operations
5051 // executed within the critical section are complete and globally visible before the
5052 // store (CAS) to the lock-word that releases the lock becomes globally visible.
muxRelease(volatile intptr_t * Lock)5053 void Thread::muxRelease(volatile intptr_t * Lock) {
5054 for (;;) {
5055 const intptr_t w = Atomic::cmpxchg(Lock, LOCKBIT, (intptr_t)0);
5056 assert(w & LOCKBIT, "invariant");
5057 if (w == LOCKBIT) return;
5058 ParkEvent * const List = (ParkEvent *) (w & ~LOCKBIT);
5059 assert(List != NULL, "invariant");
5060 assert(List->OnList == intptr_t(Lock), "invariant");
5061 ParkEvent * const nxt = List->ListNext;
5062 guarantee((intptr_t(nxt) & LOCKBIT) == 0, "invariant");
5063
5064 // The following CAS() releases the lock and pops the head element.
5065 // The CAS() also ratifies the previously fetched lock-word value.
5066 if (Atomic::cmpxchg(Lock, w, intptr_t(nxt)) != w) {
5067 continue;
5068 }
5069 List->OnList = 0;
5070 OrderAccess::fence();
5071 List->unpark();
5072 return;
5073 }
5074 }
5075
5076
verify()5077 void Threads::verify() {
5078 ALL_JAVA_THREADS(p) {
5079 p->verify();
5080 }
5081 VMThread* thread = VMThread::vm_thread();
5082 if (thread != NULL) thread->verify();
5083 }
5084