1 /* 2 * Copyright (c) 1997, 2021, Oracle and/or its affiliates. All rights reserved. 3 * Copyright (c) 2021, Azul Systems, Inc. All rights reserved. 4 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 5 * 6 * This code is free software; you can redistribute it and/or modify it 7 * under the terms of the GNU General Public License version 2 only, as 8 * published by the Free Software Foundation. 9 * 10 * This code is distributed in the hope that it will be useful, but WITHOUT 11 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 12 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 13 * version 2 for more details (a copy is included in the LICENSE file that 14 * accompanied this code). 15 * 16 * You should have received a copy of the GNU General Public License version 17 * 2 along with this work; if not, write to the Free Software Foundation, 18 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 19 * 20 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 21 * or visit www.oracle.com if you need additional information or have any 22 * questions. 23 * 24 */ 25 26 #include "precompiled.hpp" 27 #include "jvm.h" 28 #include "cds/dynamicArchive.hpp" 29 #include "cds/metaspaceShared.hpp" 30 #include "classfile/classLoader.hpp" 31 #include "classfile/javaClasses.hpp" 32 #include "classfile/javaThreadStatus.hpp" 33 #include "classfile/systemDictionary.hpp" 34 #include "classfile/vmClasses.hpp" 35 #include "classfile/vmSymbols.hpp" 36 #include "code/codeCache.hpp" 37 #include "code/scopeDesc.hpp" 38 #include "compiler/compileBroker.hpp" 39 #include "compiler/compileTask.hpp" 40 #include "compiler/compilerThread.hpp" 41 #include "gc/shared/barrierSet.hpp" 42 #include "gc/shared/collectedHeap.hpp" 43 #include "gc/shared/gcId.hpp" 44 #include "gc/shared/gcLocker.inline.hpp" 45 #include "gc/shared/gcVMOperations.hpp" 46 #include "gc/shared/oopStorage.hpp" 47 #include "gc/shared/oopStorageSet.hpp" 48 #include "gc/shared/stringdedup/stringDedup.hpp" 49 #include "gc/shared/tlab_globals.hpp" 50 #include "interpreter/interpreter.hpp" 51 #include "interpreter/linkResolver.hpp" 52 #include "interpreter/oopMapCache.hpp" 53 #include "jfr/jfrEvents.hpp" 54 #include "jvmtifiles/jvmtiEnv.hpp" 55 #include "logging/log.hpp" 56 #include "logging/logAsyncWriter.hpp" 57 #include "logging/logConfiguration.hpp" 58 #include "logging/logStream.hpp" 59 #include "memory/allocation.inline.hpp" 60 #include "memory/iterator.hpp" 61 #include "memory/oopFactory.hpp" 62 #include "memory/resourceArea.hpp" 63 #include "memory/universe.hpp" 64 #include "oops/access.inline.hpp" 65 #include "oops/instanceKlass.hpp" 66 #include "oops/klass.inline.hpp" 67 #include "oops/objArrayOop.hpp" 68 #include "oops/oop.inline.hpp" 69 #include "oops/oopHandle.inline.hpp" 70 #include "oops/symbol.hpp" 71 #include "oops/typeArrayOop.inline.hpp" 72 #include "oops/verifyOopClosure.hpp" 73 #include "prims/jvm_misc.hpp" 74 #include "prims/jvmtiDeferredUpdates.hpp" 75 #include "prims/jvmtiExport.hpp" 76 #include "prims/jvmtiThreadState.hpp" 77 #include "runtime/arguments.hpp" 78 #include "runtime/atomic.hpp" 79 #include "runtime/biasedLocking.hpp" 80 #include "runtime/fieldDescriptor.inline.hpp" 81 #include "runtime/flags/jvmFlagLimit.hpp" 82 #include "runtime/deoptimization.hpp" 83 #include "runtime/frame.inline.hpp" 84 #include "runtime/handles.inline.hpp" 85 #include "runtime/handshake.hpp" 86 #include "runtime/init.hpp" 87 #include "runtime/interfaceSupport.inline.hpp" 88 #include "runtime/java.hpp" 89 #include "runtime/javaCalls.hpp" 90 #include "runtime/jniHandles.inline.hpp" 91 #include "runtime/jniPeriodicChecker.hpp" 92 #include "runtime/monitorDeflationThread.hpp" 93 #include "runtime/mutexLocker.hpp" 94 #include "runtime/nonJavaThread.hpp" 95 #include "runtime/objectMonitor.hpp" 96 #include "runtime/orderAccess.hpp" 97 #include "runtime/osThread.hpp" 98 #include "runtime/prefetch.inline.hpp" 99 #include "runtime/safepoint.hpp" 100 #include "runtime/safepointMechanism.inline.hpp" 101 #include "runtime/safepointVerifiers.hpp" 102 #include "runtime/serviceThread.hpp" 103 #include "runtime/sharedRuntime.hpp" 104 #include "runtime/stackFrameStream.inline.hpp" 105 #include "runtime/stackWatermarkSet.hpp" 106 #include "runtime/statSampler.hpp" 107 #include "runtime/task.hpp" 108 #include "runtime/thread.inline.hpp" 109 #include "runtime/threadCritical.hpp" 110 #include "runtime/threadSMR.inline.hpp" 111 #include "runtime/threadStatisticalInfo.hpp" 112 #include "runtime/threadWXSetters.inline.hpp" 113 #include "runtime/timer.hpp" 114 #include "runtime/timerTrace.hpp" 115 #include "runtime/vframe.inline.hpp" 116 #include "runtime/vframeArray.hpp" 117 #include "runtime/vframe_hp.hpp" 118 #include "runtime/vmThread.hpp" 119 #include "runtime/vmOperations.hpp" 120 #include "runtime/vm_version.hpp" 121 #include "services/attachListener.hpp" 122 #include "services/management.hpp" 123 #include "services/memTracker.hpp" 124 #include "services/threadService.hpp" 125 #include "utilities/align.hpp" 126 #include "utilities/copy.hpp" 127 #include "utilities/defaultStream.hpp" 128 #include "utilities/dtrace.hpp" 129 #include "utilities/events.hpp" 130 #include "utilities/macros.hpp" 131 #include "utilities/preserveException.hpp" 132 #include "utilities/spinYield.hpp" 133 #include "utilities/vmError.hpp" 134 #if INCLUDE_JVMCI 135 #include "jvmci/jvmci.hpp" 136 #include "jvmci/jvmciEnv.hpp" 137 #endif 138 #ifdef COMPILER1 139 #include "c1/c1_Compiler.hpp" 140 #endif 141 #ifdef COMPILER2 142 #include "opto/c2compiler.hpp" 143 #include "opto/idealGraphPrinter.hpp" 144 #endif 145 #if INCLUDE_RTM_OPT 146 #include "runtime/rtmLocking.hpp" 147 #endif 148 #if INCLUDE_JFR 149 #include "jfr/jfr.hpp" 150 #endif 151 152 // Initialization after module runtime initialization 153 void universe_post_module_init(); // must happen after call_initPhase2 154 155 #ifdef DTRACE_ENABLED 156 157 // Only bother with this argument setup if dtrace is available 158 159 #define HOTSPOT_THREAD_PROBE_start HOTSPOT_THREAD_START 160 #define HOTSPOT_THREAD_PROBE_stop HOTSPOT_THREAD_STOP 161 162 #define DTRACE_THREAD_PROBE(probe, javathread) \ 163 { \ 164 ResourceMark rm(this); \ 165 int len = 0; \ 166 const char* name = (javathread)->get_thread_name(); \ 167 len = strlen(name); \ 168 HOTSPOT_THREAD_PROBE_##probe(/* probe = start, stop */ \ 169 (char *) name, len, \ 170 java_lang_Thread::thread_id((javathread)->threadObj()), \ 171 (uintptr_t) (javathread)->osthread()->thread_id(), \ 172 java_lang_Thread::is_daemon((javathread)->threadObj())); \ 173 } 174 175 #else // ndef DTRACE_ENABLED 176 177 #define DTRACE_THREAD_PROBE(probe, javathread) 178 179 #endif // ndef DTRACE_ENABLED 180 181 #ifndef USE_LIBRARY_BASED_TLS_ONLY 182 // Current thread is maintained as a thread-local variable 183 THREAD_LOCAL Thread* Thread::_thr_current = NULL; 184 #endif 185 186 // ======= Thread ======== 187 // Support for forcing alignment of thread objects for biased locking 188 void* Thread::allocate(size_t size, bool throw_excpt, MEMFLAGS flags) { 189 if (UseBiasedLocking) { 190 const size_t alignment = markWord::biased_lock_alignment; 191 size_t aligned_size = size + (alignment - sizeof(intptr_t)); 192 void* real_malloc_addr = throw_excpt? AllocateHeap(aligned_size, flags, CURRENT_PC) 193 : AllocateHeap(aligned_size, flags, CURRENT_PC, 194 AllocFailStrategy::RETURN_NULL); 195 void* aligned_addr = align_up(real_malloc_addr, alignment); 196 assert(((uintptr_t) aligned_addr + (uintptr_t) size) <= 197 ((uintptr_t) real_malloc_addr + (uintptr_t) aligned_size), 198 "JavaThread alignment code overflowed allocated storage"); 199 if (aligned_addr != real_malloc_addr) { 200 log_info(biasedlocking)("Aligned thread " INTPTR_FORMAT " to " INTPTR_FORMAT, 201 p2i(real_malloc_addr), 202 p2i(aligned_addr)); 203 } 204 ((Thread*) aligned_addr)->_real_malloc_address = real_malloc_addr; 205 return aligned_addr; 206 } else { 207 return throw_excpt? AllocateHeap(size, flags, CURRENT_PC) 208 : AllocateHeap(size, flags, CURRENT_PC, AllocFailStrategy::RETURN_NULL); 209 } 210 } 211 212 void Thread::operator delete(void* p) { 213 if (UseBiasedLocking) { 214 FreeHeap(((Thread*) p)->_real_malloc_address); 215 } else { 216 FreeHeap(p); 217 } 218 } 219 220 void JavaThread::smr_delete() { 221 if (_on_thread_list) { 222 ThreadsSMRSupport::smr_delete(this); 223 } else { 224 delete this; 225 } 226 } 227 228 // Base class for all threads: VMThread, WatcherThread, ConcurrentMarkSweepThread, 229 // JavaThread 230 231 DEBUG_ONLY(Thread* Thread::_starting_thread = NULL;) 232 233 Thread::Thread() { 234 235 DEBUG_ONLY(_run_state = PRE_CALL_RUN;) 236 237 // stack and get_thread 238 set_stack_base(NULL); 239 set_stack_size(0); 240 set_lgrp_id(-1); 241 DEBUG_ONLY(clear_suspendible_thread();) 242 243 // allocated data structures 244 set_osthread(NULL); 245 set_resource_area(new (mtThread)ResourceArea()); 246 DEBUG_ONLY(_current_resource_mark = NULL;) 247 set_handle_area(new (mtThread) HandleArea(NULL)); 248 set_metadata_handles(new (ResourceObj::C_HEAP, mtClass) GrowableArray<Metadata*>(30, mtClass)); 249 set_active_handles(NULL); 250 set_free_handle_block(NULL); 251 set_last_handle_mark(NULL); 252 DEBUG_ONLY(_missed_ic_stub_refill_verifier = NULL); 253 254 // Initial value of zero ==> never claimed. 255 _threads_do_token = 0; 256 _threads_hazard_ptr = NULL; 257 _threads_list_ptr = NULL; 258 _nested_threads_hazard_ptr_cnt = 0; 259 _rcu_counter = 0; 260 261 // the handle mark links itself to last_handle_mark 262 new HandleMark(this); 263 264 // plain initialization 265 debug_only(_owned_locks = NULL;) 266 NOT_PRODUCT(_skip_gcalot = false;) 267 _jvmti_env_iteration_count = 0; 268 set_allocated_bytes(0); 269 _current_pending_raw_monitor = NULL; 270 271 // thread-specific hashCode stream generator state - Marsaglia shift-xor form 272 _hashStateX = os::random(); 273 _hashStateY = 842502087; 274 _hashStateZ = 0x8767; // (int)(3579807591LL & 0xffff) ; 275 _hashStateW = 273326509; 276 277 // Many of the following fields are effectively final - immutable 278 // Note that nascent threads can't use the Native Monitor-Mutex 279 // construct until the _MutexEvent is initialized ... 280 // CONSIDER: instead of using a fixed set of purpose-dedicated ParkEvents 281 // we might instead use a stack of ParkEvents that we could provision on-demand. 282 // The stack would act as a cache to avoid calls to ParkEvent::Allocate() 283 // and ::Release() 284 _ParkEvent = ParkEvent::Allocate(this); 285 286 #ifdef CHECK_UNHANDLED_OOPS 287 if (CheckUnhandledOops) { 288 _unhandled_oops = new UnhandledOops(this); 289 } 290 #endif // CHECK_UNHANDLED_OOPS 291 #ifdef ASSERT 292 if (UseBiasedLocking) { 293 assert(is_aligned(this, markWord::biased_lock_alignment), "forced alignment of thread object failed"); 294 assert(this == _real_malloc_address || 295 this == align_up(_real_malloc_address, markWord::biased_lock_alignment), 296 "bug in forced alignment of thread objects"); 297 } 298 #endif // ASSERT 299 300 // Notify the barrier set that a thread is being created. The initial 301 // thread is created before the barrier set is available. The call to 302 // BarrierSet::on_thread_create() for this thread is therefore deferred 303 // to BarrierSet::set_barrier_set(). 304 BarrierSet* const barrier_set = BarrierSet::barrier_set(); 305 if (barrier_set != NULL) { 306 barrier_set->on_thread_create(this); 307 } else { 308 // Only the main thread should be created before the barrier set 309 // and that happens just before Thread::current is set. No other thread 310 // can attach as the VM is not created yet, so they can't execute this code. 311 // If the main thread creates other threads before the barrier set that is an error. 312 assert(Thread::current_or_null() == NULL, "creating thread before barrier set"); 313 } 314 315 MACOS_AARCH64_ONLY(DEBUG_ONLY(_wx_init = false)); 316 } 317 318 void Thread::initialize_tlab() { 319 if (UseTLAB) { 320 tlab().initialize(); 321 } 322 } 323 324 void Thread::initialize_thread_current() { 325 #ifndef USE_LIBRARY_BASED_TLS_ONLY 326 assert(_thr_current == NULL, "Thread::current already initialized"); 327 _thr_current = this; 328 #endif 329 assert(ThreadLocalStorage::thread() == NULL, "ThreadLocalStorage::thread already initialized"); 330 ThreadLocalStorage::set_thread(this); 331 assert(Thread::current() == ThreadLocalStorage::thread(), "TLS mismatch!"); 332 } 333 334 void Thread::clear_thread_current() { 335 assert(Thread::current() == ThreadLocalStorage::thread(), "TLS mismatch!"); 336 #ifndef USE_LIBRARY_BASED_TLS_ONLY 337 _thr_current = NULL; 338 #endif 339 ThreadLocalStorage::set_thread(NULL); 340 } 341 342 void Thread::record_stack_base_and_size() { 343 // Note: at this point, Thread object is not yet initialized. Do not rely on 344 // any members being initialized. Do not rely on Thread::current() being set. 345 // If possible, refrain from doing anything which may crash or assert since 346 // quite probably those crash dumps will be useless. 347 set_stack_base(os::current_stack_base()); 348 set_stack_size(os::current_stack_size()); 349 350 // Set stack limits after thread is initialized. 351 if (is_Java_thread()) { 352 as_Java_thread()->stack_overflow_state()->initialize(stack_base(), stack_end()); 353 } 354 } 355 356 #if INCLUDE_NMT 357 void Thread::register_thread_stack_with_NMT() { 358 MemTracker::record_thread_stack(stack_end(), stack_size()); 359 } 360 361 void Thread::unregister_thread_stack_with_NMT() { 362 MemTracker::release_thread_stack(stack_end(), stack_size()); 363 } 364 #endif // INCLUDE_NMT 365 366 void Thread::call_run() { 367 DEBUG_ONLY(_run_state = CALL_RUN;) 368 369 // At this point, Thread object should be fully initialized and 370 // Thread::current() should be set. 371 372 assert(Thread::current_or_null() != NULL, "current thread is unset"); 373 assert(Thread::current_or_null() == this, "current thread is wrong"); 374 375 // Perform common initialization actions 376 377 MACOS_AARCH64_ONLY(this->init_wx()); 378 379 register_thread_stack_with_NMT(); 380 381 JFR_ONLY(Jfr::on_thread_start(this);) 382 383 log_debug(os, thread)("Thread " UINTX_FORMAT " stack dimensions: " 384 PTR_FORMAT "-" PTR_FORMAT " (" SIZE_FORMAT "k).", 385 os::current_thread_id(), p2i(stack_end()), 386 p2i(stack_base()), stack_size()/1024); 387 388 // Perform <ChildClass> initialization actions 389 DEBUG_ONLY(_run_state = PRE_RUN;) 390 this->pre_run(); 391 392 // Invoke <ChildClass>::run() 393 DEBUG_ONLY(_run_state = RUN;) 394 this->run(); 395 // Returned from <ChildClass>::run(). Thread finished. 396 397 // Perform common tear-down actions 398 399 assert(Thread::current_or_null() != NULL, "current thread is unset"); 400 assert(Thread::current_or_null() == this, "current thread is wrong"); 401 402 // Perform <ChildClass> tear-down actions 403 DEBUG_ONLY(_run_state = POST_RUN;) 404 this->post_run(); 405 406 // Note: at this point the thread object may already have deleted itself, 407 // so from here on do not dereference *this*. Not all thread types currently 408 // delete themselves when they terminate. But no thread should ever be deleted 409 // asynchronously with respect to its termination - that is what _run_state can 410 // be used to check. 411 412 assert(Thread::current_or_null() == NULL, "current thread still present"); 413 } 414 415 Thread::~Thread() { 416 417 // Attached threads will remain in PRE_CALL_RUN, as will threads that don't actually 418 // get started due to errors etc. Any active thread should at least reach post_run 419 // before it is deleted (usually in post_run()). 420 assert(_run_state == PRE_CALL_RUN || 421 _run_state == POST_RUN, "Active Thread deleted before post_run(): " 422 "_run_state=%d", (int)_run_state); 423 424 // Notify the barrier set that a thread is being destroyed. Note that a barrier 425 // set might not be available if we encountered errors during bootstrapping. 426 BarrierSet* const barrier_set = BarrierSet::barrier_set(); 427 if (barrier_set != NULL) { 428 barrier_set->on_thread_destroy(this); 429 } 430 431 // deallocate data structures 432 delete resource_area(); 433 // since the handle marks are using the handle area, we have to deallocated the root 434 // handle mark before deallocating the thread's handle area, 435 assert(last_handle_mark() != NULL, "check we have an element"); 436 delete last_handle_mark(); 437 assert(last_handle_mark() == NULL, "check we have reached the end"); 438 439 ParkEvent::Release(_ParkEvent); 440 // Set to NULL as a termination indicator for has_terminated(). 441 Atomic::store(&_ParkEvent, (ParkEvent*)NULL); 442 443 delete handle_area(); 444 delete metadata_handles(); 445 446 // osthread() can be NULL, if creation of thread failed. 447 if (osthread() != NULL) os::free_thread(osthread()); 448 449 // Clear Thread::current if thread is deleting itself and it has not 450 // already been done. This must be done before the memory is deallocated. 451 // Needed to ensure JNI correctly detects non-attached threads. 452 if (this == Thread::current_or_null()) { 453 Thread::clear_thread_current(); 454 } 455 456 CHECK_UNHANDLED_OOPS_ONLY(if (CheckUnhandledOops) delete unhandled_oops();) 457 } 458 459 #ifdef ASSERT 460 // A JavaThread is considered dangling if it not handshake-safe with respect to 461 // the current thread, it is not on a ThreadsList, or not at safepoint. 462 void Thread::check_for_dangling_thread_pointer(Thread *thread) { 463 assert(!thread->is_Java_thread() || 464 thread->as_Java_thread()->is_handshake_safe_for(Thread::current()) || 465 !thread->as_Java_thread()->on_thread_list() || 466 SafepointSynchronize::is_at_safepoint() || 467 ThreadsSMRSupport::is_a_protected_JavaThread_with_lock(thread->as_Java_thread()), 468 "possibility of dangling Thread pointer"); 469 } 470 #endif 471 472 // Is the target JavaThread protected by the calling Thread 473 // or by some other mechanism: 474 bool Thread::is_JavaThread_protected(const JavaThread* p) { 475 // Do the simplest check first: 476 if (SafepointSynchronize::is_at_safepoint()) { 477 // The target is protected since JavaThreads cannot exit 478 // while we're at a safepoint. 479 return true; 480 } 481 482 // If the target hasn't been started yet then it is trivially 483 // "protected". We assume the caller is the thread that will do 484 // the starting. 485 if (p->osthread() == NULL || p->osthread()->get_state() <= INITIALIZED) { 486 return true; 487 } 488 489 // Now make the simple checks based on who the caller is: 490 Thread* current_thread = Thread::current(); 491 if (current_thread == p || Threads_lock->owner() == current_thread) { 492 // Target JavaThread is self or calling thread owns the Threads_lock. 493 // Second check is the same as Threads_lock->owner_is_self(), 494 // but we already have the current thread so check directly. 495 return true; 496 } 497 498 // Check the ThreadsLists associated with the calling thread (if any) 499 // to see if one of them protects the target JavaThread: 500 for (SafeThreadsListPtr* stlp = current_thread->_threads_list_ptr; 501 stlp != NULL; stlp = stlp->previous()) { 502 if (stlp->list()->includes(p)) { 503 // The target JavaThread is protected by this ThreadsList: 504 return true; 505 } 506 } 507 508 // Use this debug code with -XX:+UseNewCode to diagnose locations that 509 // are missing a ThreadsListHandle or other protection mechanism: 510 // guarantee(!UseNewCode, "current_thread=" INTPTR_FORMAT " is not protecting p=" 511 // INTPTR_FORMAT, p2i(current_thread), p2i(p)); 512 513 // Note: Since 'p' isn't protected by a TLH, the call to 514 // p->is_handshake_safe_for() may crash, but we have debug bits so 515 // we'll be able to figure out what protection mechanism is missing. 516 assert(p->is_handshake_safe_for(current_thread), "JavaThread=" INTPTR_FORMAT 517 " is not protected and not handshake safe.", p2i(p)); 518 519 // The target JavaThread is not protected so it is not safe to query: 520 return false; 521 } 522 523 ThreadPriority Thread::get_priority(const Thread* const thread) { 524 ThreadPriority priority; 525 // Can return an error! 526 (void)os::get_priority(thread, priority); 527 assert(MinPriority <= priority && priority <= MaxPriority, "non-Java priority found"); 528 return priority; 529 } 530 531 void Thread::set_priority(Thread* thread, ThreadPriority priority) { 532 debug_only(check_for_dangling_thread_pointer(thread);) 533 // Can return an error! 534 (void)os::set_priority(thread, priority); 535 } 536 537 538 void Thread::start(Thread* thread) { 539 // Start is different from resume in that its safety is guaranteed by context or 540 // being called from a Java method synchronized on the Thread object. 541 if (thread->is_Java_thread()) { 542 // Initialize the thread state to RUNNABLE before starting this thread. 543 // Can not set it after the thread started because we do not know the 544 // exact thread state at that time. It could be in MONITOR_WAIT or 545 // in SLEEPING or some other state. 546 java_lang_Thread::set_thread_status(thread->as_Java_thread()->threadObj(), 547 JavaThreadStatus::RUNNABLE); 548 } 549 os::start_thread(thread); 550 } 551 552 // GC Support 553 bool Thread::claim_par_threads_do(uintx claim_token) { 554 uintx token = _threads_do_token; 555 if (token != claim_token) { 556 uintx res = Atomic::cmpxchg(&_threads_do_token, token, claim_token); 557 if (res == token) { 558 return true; 559 } 560 guarantee(res == claim_token, "invariant"); 561 } 562 return false; 563 } 564 565 void Thread::oops_do_no_frames(OopClosure* f, CodeBlobClosure* cf) { 566 if (active_handles() != NULL) { 567 active_handles()->oops_do(f); 568 } 569 // Do oop for ThreadShadow 570 f->do_oop((oop*)&_pending_exception); 571 handle_area()->oops_do(f); 572 } 573 574 // If the caller is a NamedThread, then remember, in the current scope, 575 // the given JavaThread in its _processed_thread field. 576 class RememberProcessedThread: public StackObj { 577 NamedThread* _cur_thr; 578 public: 579 RememberProcessedThread(Thread* thread) { 580 Thread* self = Thread::current(); 581 if (self->is_Named_thread()) { 582 _cur_thr = (NamedThread *)self; 583 assert(_cur_thr->processed_thread() == NULL, "nesting not supported"); 584 _cur_thr->set_processed_thread(thread); 585 } else { 586 _cur_thr = NULL; 587 } 588 } 589 590 ~RememberProcessedThread() { 591 if (_cur_thr) { 592 assert(_cur_thr->processed_thread() != NULL, "nesting not supported"); 593 _cur_thr->set_processed_thread(NULL); 594 } 595 } 596 }; 597 598 void Thread::oops_do(OopClosure* f, CodeBlobClosure* cf) { 599 // Record JavaThread to GC thread 600 RememberProcessedThread rpt(this); 601 oops_do_no_frames(f, cf); 602 oops_do_frames(f, cf); 603 } 604 605 void Thread::metadata_handles_do(void f(Metadata*)) { 606 // Only walk the Handles in Thread. 607 if (metadata_handles() != NULL) { 608 for (int i = 0; i< metadata_handles()->length(); i++) { 609 f(metadata_handles()->at(i)); 610 } 611 } 612 } 613 614 void Thread::print_on(outputStream* st, bool print_extended_info) const { 615 // get_priority assumes osthread initialized 616 if (osthread() != NULL) { 617 int os_prio; 618 if (os::get_native_priority(this, &os_prio) == OS_OK) { 619 st->print("os_prio=%d ", os_prio); 620 } 621 622 st->print("cpu=%.2fms ", 623 os::thread_cpu_time(const_cast<Thread*>(this), true) / 1000000.0 624 ); 625 st->print("elapsed=%.2fs ", 626 _statistical_info.getElapsedTime() / 1000.0 627 ); 628 if (is_Java_thread() && (PrintExtendedThreadInfo || print_extended_info)) { 629 size_t allocated_bytes = (size_t) const_cast<Thread*>(this)->cooked_allocated_bytes(); 630 st->print("allocated=" SIZE_FORMAT "%s ", 631 byte_size_in_proper_unit(allocated_bytes), 632 proper_unit_for_byte_size(allocated_bytes) 633 ); 634 st->print("defined_classes=" INT64_FORMAT " ", _statistical_info.getDefineClassCount()); 635 } 636 637 st->print("tid=" INTPTR_FORMAT " ", p2i(this)); 638 osthread()->print_on(st); 639 } 640 ThreadsSMRSupport::print_info_on(this, st); 641 st->print(" "); 642 debug_only(if (WizardMode) print_owned_locks_on(st);) 643 } 644 645 void Thread::print() const { print_on(tty); } 646 647 // Thread::print_on_error() is called by fatal error handler. Don't use 648 // any lock or allocate memory. 649 void Thread::print_on_error(outputStream* st, char* buf, int buflen) const { 650 assert(!(is_Compiler_thread() || is_Java_thread()), "Can't call name() here if it allocates"); 651 652 if (is_VM_thread()) { st->print("VMThread"); } 653 else if (is_GC_task_thread()) { st->print("GCTaskThread"); } 654 else if (is_Watcher_thread()) { st->print("WatcherThread"); } 655 else if (is_ConcurrentGC_thread()) { st->print("ConcurrentGCThread"); } 656 else { st->print("Thread"); } 657 658 if (is_Named_thread()) { 659 st->print(" \"%s\"", name()); 660 } 661 662 OSThread* os_thr = osthread(); 663 if (os_thr != NULL) { 664 if (os_thr->get_state() != ZOMBIE) { 665 st->print(" [stack: " PTR_FORMAT "," PTR_FORMAT "]", 666 p2i(stack_end()), p2i(stack_base())); 667 st->print(" [id=%d]", osthread()->thread_id()); 668 } else { 669 st->print(" terminated"); 670 } 671 } else { 672 st->print(" unknown state (no osThread)"); 673 } 674 ThreadsSMRSupport::print_info_on(this, st); 675 } 676 677 void Thread::print_value_on(outputStream* st) const { 678 if (is_Named_thread()) { 679 st->print(" \"%s\" ", name()); 680 } 681 st->print(INTPTR_FORMAT, p2i(this)); // print address 682 } 683 684 #ifdef ASSERT 685 void Thread::print_owned_locks_on(outputStream* st) const { 686 Mutex* cur = _owned_locks; 687 if (cur == NULL) { 688 st->print(" (no locks) "); 689 } else { 690 st->print_cr(" Locks owned:"); 691 while (cur) { 692 cur->print_on(st); 693 cur = cur->next(); 694 } 695 } 696 } 697 #endif // ASSERT 698 699 // We had to move these methods here, because vm threads get into ObjectSynchronizer::enter 700 // However, there is a note in JavaThread::is_lock_owned() about the VM threads not being 701 // used for compilation in the future. If that change is made, the need for these methods 702 // should be revisited, and they should be removed if possible. 703 704 bool Thread::is_lock_owned(address adr) const { 705 return is_in_full_stack(adr); 706 } 707 708 bool Thread::set_as_starting_thread() { 709 assert(_starting_thread == NULL, "already initialized: " 710 "_starting_thread=" INTPTR_FORMAT, p2i(_starting_thread)); 711 // NOTE: this must be called inside the main thread. 712 DEBUG_ONLY(_starting_thread = this;) 713 return os::create_main_thread(this->as_Java_thread()); 714 } 715 716 static void initialize_class(Symbol* class_name, TRAPS) { 717 Klass* klass = SystemDictionary::resolve_or_fail(class_name, true, CHECK); 718 InstanceKlass::cast(klass)->initialize(CHECK); 719 } 720 721 722 // Creates the initial ThreadGroup 723 static Handle create_initial_thread_group(TRAPS) { 724 Handle system_instance = JavaCalls::construct_new_instance( 725 vmClasses::ThreadGroup_klass(), 726 vmSymbols::void_method_signature(), 727 CHECK_NH); 728 Universe::set_system_thread_group(system_instance()); 729 730 Handle string = java_lang_String::create_from_str("main", CHECK_NH); 731 Handle main_instance = JavaCalls::construct_new_instance( 732 vmClasses::ThreadGroup_klass(), 733 vmSymbols::threadgroup_string_void_signature(), 734 system_instance, 735 string, 736 CHECK_NH); 737 return main_instance; 738 } 739 740 // Creates the initial Thread, and sets it to running. 741 static void create_initial_thread(Handle thread_group, JavaThread* thread, 742 TRAPS) { 743 InstanceKlass* ik = vmClasses::Thread_klass(); 744 assert(ik->is_initialized(), "must be"); 745 instanceHandle thread_oop = ik->allocate_instance_handle(CHECK); 746 747 // Cannot use JavaCalls::construct_new_instance because the java.lang.Thread 748 // constructor calls Thread.current(), which must be set here for the 749 // initial thread. 750 java_lang_Thread::set_thread(thread_oop(), thread); 751 java_lang_Thread::set_priority(thread_oop(), NormPriority); 752 thread->set_threadObj(thread_oop()); 753 754 Handle string = java_lang_String::create_from_str("main", CHECK); 755 756 JavaValue result(T_VOID); 757 JavaCalls::call_special(&result, thread_oop, 758 ik, 759 vmSymbols::object_initializer_name(), 760 vmSymbols::threadgroup_string_void_signature(), 761 thread_group, 762 string, 763 CHECK); 764 765 // Set thread status to running since main thread has 766 // been started and running. 767 java_lang_Thread::set_thread_status(thread_oop(), 768 JavaThreadStatus::RUNNABLE); 769 } 770 771 // Extract version and vendor specific information from 772 // java.lang.VersionProps fields. 773 // Returned char* is allocated in the thread's resource area 774 // so must be copied for permanency. 775 static const char* get_java_version_info(InstanceKlass* ik, 776 Symbol* field_name) { 777 fieldDescriptor fd; 778 bool found = ik != NULL && 779 ik->find_local_field(field_name, 780 vmSymbols::string_signature(), &fd); 781 if (found) { 782 oop name_oop = ik->java_mirror()->obj_field(fd.offset()); 783 if (name_oop == NULL) { 784 return NULL; 785 } 786 const char* name = java_lang_String::as_utf8_string(name_oop); 787 return name; 788 } else { 789 return NULL; 790 } 791 } 792 793 // General purpose hook into Java code, run once when the VM is initialized. 794 // The Java library method itself may be changed independently from the VM. 795 static void call_postVMInitHook(TRAPS) { 796 Klass* klass = SystemDictionary::resolve_or_null(vmSymbols::jdk_internal_vm_PostVMInitHook(), THREAD); 797 if (klass != NULL) { 798 JavaValue result(T_VOID); 799 JavaCalls::call_static(&result, klass, vmSymbols::run_method_name(), 800 vmSymbols::void_method_signature(), 801 CHECK); 802 } 803 } 804 805 // Initialized by VMThread at vm_global_init 806 static OopStorage* _thread_oop_storage = NULL; 807 808 oop JavaThread::threadObj() const { 809 return _threadObj.resolve(); 810 } 811 812 void JavaThread::set_threadObj(oop p) { 813 assert(_thread_oop_storage != NULL, "not yet initialized"); 814 _threadObj = OopHandle(_thread_oop_storage, p); 815 } 816 817 OopStorage* JavaThread::thread_oop_storage() { 818 assert(_thread_oop_storage != NULL, "not yet initialized"); 819 return _thread_oop_storage; 820 } 821 822 void JavaThread::allocate_threadObj(Handle thread_group, const char* thread_name, 823 bool daemon, TRAPS) { 824 assert(thread_group.not_null(), "thread group should be specified"); 825 assert(threadObj() == NULL, "should only create Java thread object once"); 826 827 InstanceKlass* ik = vmClasses::Thread_klass(); 828 assert(ik->is_initialized(), "must be"); 829 instanceHandle thread_oop = ik->allocate_instance_handle(CHECK); 830 831 // We are called from jni_AttachCurrentThread/jni_AttachCurrentThreadAsDaemon. 832 // We cannot use JavaCalls::construct_new_instance because the java.lang.Thread 833 // constructor calls Thread.current(), which must be set here. 834 java_lang_Thread::set_thread(thread_oop(), this); 835 java_lang_Thread::set_priority(thread_oop(), NormPriority); 836 set_threadObj(thread_oop()); 837 838 JavaValue result(T_VOID); 839 if (thread_name != NULL) { 840 Handle name = java_lang_String::create_from_str(thread_name, CHECK); 841 // Thread gets assigned specified name and null target 842 JavaCalls::call_special(&result, 843 thread_oop, 844 ik, 845 vmSymbols::object_initializer_name(), 846 vmSymbols::threadgroup_string_void_signature(), 847 thread_group, 848 name, 849 THREAD); 850 } else { 851 // Thread gets assigned name "Thread-nnn" and null target 852 // (java.lang.Thread doesn't have a constructor taking only a ThreadGroup argument) 853 JavaCalls::call_special(&result, 854 thread_oop, 855 ik, 856 vmSymbols::object_initializer_name(), 857 vmSymbols::threadgroup_runnable_void_signature(), 858 thread_group, 859 Handle(), 860 THREAD); 861 } 862 863 864 if (daemon) { 865 java_lang_Thread::set_daemon(thread_oop()); 866 } 867 868 if (HAS_PENDING_EXCEPTION) { 869 return; 870 } 871 872 Klass* group = vmClasses::ThreadGroup_klass(); 873 Handle threadObj(THREAD, this->threadObj()); 874 875 JavaCalls::call_special(&result, 876 thread_group, 877 group, 878 vmSymbols::add_method_name(), 879 vmSymbols::thread_void_signature(), 880 threadObj, // Arg 1 881 THREAD); 882 } 883 884 // ======= JavaThread ======== 885 886 #if INCLUDE_JVMCI 887 888 jlong* JavaThread::_jvmci_old_thread_counters; 889 890 bool jvmci_counters_include(JavaThread* thread) { 891 return !JVMCICountersExcludeCompiler || !thread->is_Compiler_thread(); 892 } 893 894 void JavaThread::collect_counters(jlong* array, int length) { 895 assert(length == JVMCICounterSize, "wrong value"); 896 for (int i = 0; i < length; i++) { 897 array[i] = _jvmci_old_thread_counters[i]; 898 } 899 for (JavaThreadIteratorWithHandle jtiwh; JavaThread *tp = jtiwh.next(); ) { 900 if (jvmci_counters_include(tp)) { 901 for (int i = 0; i < length; i++) { 902 array[i] += tp->_jvmci_counters[i]; 903 } 904 } 905 } 906 } 907 908 // Attempt to enlarge the array for per thread counters. 909 jlong* resize_counters_array(jlong* old_counters, int current_size, int new_size) { 910 jlong* new_counters = NEW_C_HEAP_ARRAY_RETURN_NULL(jlong, new_size, mtJVMCI); 911 if (new_counters == NULL) { 912 return NULL; 913 } 914 if (old_counters == NULL) { 915 old_counters = new_counters; 916 memset(old_counters, 0, sizeof(jlong) * new_size); 917 } else { 918 for (int i = 0; i < MIN2((int) current_size, new_size); i++) { 919 new_counters[i] = old_counters[i]; 920 } 921 if (new_size > current_size) { 922 memset(new_counters + current_size, 0, sizeof(jlong) * (new_size - current_size)); 923 } 924 FREE_C_HEAP_ARRAY(jlong, old_counters); 925 } 926 return new_counters; 927 } 928 929 // Attempt to enlarge the array for per thread counters. 930 bool JavaThread::resize_counters(int current_size, int new_size) { 931 jlong* new_counters = resize_counters_array(_jvmci_counters, current_size, new_size); 932 if (new_counters == NULL) { 933 return false; 934 } else { 935 _jvmci_counters = new_counters; 936 return true; 937 } 938 } 939 940 class VM_JVMCIResizeCounters : public VM_Operation { 941 private: 942 int _new_size; 943 bool _failed; 944 945 public: 946 VM_JVMCIResizeCounters(int new_size) : _new_size(new_size), _failed(false) { } 947 VMOp_Type type() const { return VMOp_JVMCIResizeCounters; } 948 bool allow_nested_vm_operations() const { return true; } 949 void doit() { 950 // Resize the old thread counters array 951 jlong* new_counters = resize_counters_array(JavaThread::_jvmci_old_thread_counters, JVMCICounterSize, _new_size); 952 if (new_counters == NULL) { 953 _failed = true; 954 return; 955 } else { 956 JavaThread::_jvmci_old_thread_counters = new_counters; 957 } 958 959 // Now resize each threads array 960 for (JavaThreadIteratorWithHandle jtiwh; JavaThread *tp = jtiwh.next(); ) { 961 if (!tp->resize_counters(JVMCICounterSize, _new_size)) { 962 _failed = true; 963 break; 964 } 965 } 966 if (!_failed) { 967 JVMCICounterSize = _new_size; 968 } 969 } 970 971 bool failed() { return _failed; } 972 }; 973 974 bool JavaThread::resize_all_jvmci_counters(int new_size) { 975 VM_JVMCIResizeCounters op(new_size); 976 VMThread::execute(&op); 977 return !op.failed(); 978 } 979 980 #endif // INCLUDE_JVMCI 981 982 #ifdef ASSERT 983 // Checks safepoint allowed and clears unhandled oops at potential safepoints. 984 void JavaThread::check_possible_safepoint() { 985 if (_no_safepoint_count > 0) { 986 print_owned_locks(); 987 assert(false, "Possible safepoint reached by thread that does not allow it"); 988 } 989 #ifdef CHECK_UNHANDLED_OOPS 990 // Clear unhandled oops in JavaThreads so we get a crash right away. 991 clear_unhandled_oops(); 992 #endif // CHECK_UNHANDLED_OOPS 993 } 994 995 void JavaThread::check_for_valid_safepoint_state() { 996 // Check NoSafepointVerifier, which is implied by locks taken that can be 997 // shared with the VM thread. This makes sure that no locks with allow_vm_block 998 // are held. 999 check_possible_safepoint(); 1000 1001 if (thread_state() != _thread_in_vm) { 1002 fatal("LEAF method calling lock?"); 1003 } 1004 1005 if (GCALotAtAllSafepoints) { 1006 // We could enter a safepoint here and thus have a gc 1007 InterfaceSupport::check_gc_alot(); 1008 } 1009 } 1010 #endif // ASSERT 1011 1012 // A JavaThread is a normal Java thread 1013 1014 JavaThread::JavaThread() : 1015 // Initialize fields 1016 1017 _in_asgct(false), 1018 _on_thread_list(false), 1019 DEBUG_ONLY(_java_call_counter(0) COMMA) 1020 _entry_point(nullptr), 1021 _deopt_mark(nullptr), 1022 _deopt_nmethod(nullptr), 1023 _vframe_array_head(nullptr), 1024 _vframe_array_last(nullptr), 1025 _jvmti_deferred_updates(nullptr), 1026 _callee_target(nullptr), 1027 _vm_result(nullptr), 1028 _vm_result_2(nullptr), 1029 1030 _current_pending_monitor(NULL), 1031 _current_pending_monitor_is_from_java(true), 1032 _current_waiting_monitor(NULL), 1033 _Stalled(0), 1034 1035 _monitor_chunks(nullptr), 1036 1037 _suspend_flags(0), 1038 _async_exception_condition(_no_async_condition), 1039 _pending_async_exception(nullptr), 1040 1041 _thread_state(_thread_new), 1042 _saved_exception_pc(nullptr), 1043 #ifdef ASSERT 1044 _no_safepoint_count(0), 1045 _visited_for_critical_count(false), 1046 #endif 1047 1048 _terminated(_not_terminated), 1049 _in_deopt_handler(0), 1050 _doing_unsafe_access(false), 1051 _do_not_unlock_if_synchronized(false), 1052 _jni_attach_state(_not_attaching_via_jni), 1053 #if INCLUDE_JVMCI 1054 _pending_deoptimization(-1), 1055 _pending_monitorenter(false), 1056 _pending_transfer_to_interpreter(false), 1057 _in_retryable_allocation(false), 1058 _pending_failed_speculation(0), 1059 _jvmci{nullptr}, 1060 _jvmci_counters(nullptr), 1061 _jvmci_reserved0(0), 1062 _jvmci_reserved1(0), 1063 _jvmci_reserved_oop0(nullptr), 1064 #endif // INCLUDE_JVMCI 1065 1066 _exception_oop(oop()), 1067 _exception_pc(0), 1068 _exception_handler_pc(0), 1069 _is_method_handle_return(0), 1070 1071 _jni_active_critical(0), 1072 _pending_jni_exception_check_fn(nullptr), 1073 _depth_first_number(0), 1074 1075 // JVMTI PopFrame support 1076 _popframe_condition(popframe_inactive), 1077 _frames_to_pop_failed_realloc(0), 1078 1079 _handshake(this), 1080 1081 _popframe_preserved_args(nullptr), 1082 _popframe_preserved_args_size(0), 1083 1084 _jvmti_thread_state(nullptr), 1085 _interp_only_mode(0), 1086 _should_post_on_exceptions_flag(JNI_FALSE), 1087 _thread_stat(new ThreadStatistics()), 1088 1089 _parker(), 1090 _cached_monitor_info(nullptr), 1091 1092 _class_to_be_initialized(nullptr), 1093 1094 _SleepEvent(ParkEvent::Allocate(this)) 1095 { 1096 set_jni_functions(jni_functions()); 1097 1098 #if INCLUDE_JVMCI 1099 assert(_jvmci._implicit_exception_pc == nullptr, "must be"); 1100 if (JVMCICounterSize > 0) { 1101 resize_counters(0, (int) JVMCICounterSize); 1102 } 1103 #endif // INCLUDE_JVMCI 1104 1105 // Setup safepoint state info for this thread 1106 ThreadSafepointState::create(this); 1107 1108 SafepointMechanism::initialize_header(this); 1109 1110 set_requires_cross_modify_fence(false); 1111 1112 pd_initialize(); 1113 assert(deferred_card_mark().is_empty(), "Default MemRegion ctor"); 1114 } 1115 1116 JavaThread::JavaThread(bool is_attaching_via_jni) : JavaThread() { 1117 if (is_attaching_via_jni) { 1118 _jni_attach_state = _attaching_via_jni; 1119 } 1120 } 1121 1122 1123 // interrupt support 1124 1125 void JavaThread::interrupt() { 1126 // All callers should have 'this' thread protected by a 1127 // ThreadsListHandle so that it cannot terminate and deallocate 1128 // itself. 1129 debug_only(check_for_dangling_thread_pointer(this);) 1130 1131 // For Windows _interrupt_event 1132 osthread()->set_interrupted(true); 1133 1134 // For Thread.sleep 1135 _SleepEvent->unpark(); 1136 1137 // For JSR166 LockSupport.park 1138 parker()->unpark(); 1139 1140 // For ObjectMonitor and JvmtiRawMonitor 1141 _ParkEvent->unpark(); 1142 } 1143 1144 1145 bool JavaThread::is_interrupted(bool clear_interrupted) { 1146 debug_only(check_for_dangling_thread_pointer(this);) 1147 1148 if (_threadObj.peek() == NULL) { 1149 // If there is no j.l.Thread then it is impossible to have 1150 // been interrupted. We can find NULL during VM initialization 1151 // or when a JNI thread is still in the process of attaching. 1152 // In such cases this must be the current thread. 1153 assert(this == Thread::current(), "invariant"); 1154 return false; 1155 } 1156 1157 bool interrupted = java_lang_Thread::interrupted(threadObj()); 1158 1159 // NOTE that since there is no "lock" around the interrupt and 1160 // is_interrupted operations, there is the possibility that the 1161 // interrupted flag will be "false" but that the 1162 // low-level events will be in the signaled state. This is 1163 // intentional. The effect of this is that Object.wait() and 1164 // LockSupport.park() will appear to have a spurious wakeup, which 1165 // is allowed and not harmful, and the possibility is so rare that 1166 // it is not worth the added complexity to add yet another lock. 1167 // For the sleep event an explicit reset is performed on entry 1168 // to JavaThread::sleep, so there is no early return. It has also been 1169 // recommended not to put the interrupted flag into the "event" 1170 // structure because it hides the issue. 1171 // Also, because there is no lock, we must only clear the interrupt 1172 // state if we are going to report that we were interrupted; otherwise 1173 // an interrupt that happens just after we read the field would be lost. 1174 if (interrupted && clear_interrupted) { 1175 assert(this == Thread::current(), "only the current thread can clear"); 1176 java_lang_Thread::set_interrupted(threadObj(), false); 1177 osthread()->set_interrupted(false); 1178 } 1179 1180 return interrupted; 1181 } 1182 1183 void JavaThread::block_if_vm_exited() { 1184 if (_terminated == _vm_exited) { 1185 // _vm_exited is set at safepoint, and Threads_lock is never released 1186 // we will block here forever. 1187 // Here we can be doing a jump from a safe state to an unsafe state without 1188 // proper transition, but it happens after the final safepoint has begun. 1189 set_thread_state(_thread_in_vm); 1190 Threads_lock->lock(); 1191 ShouldNotReachHere(); 1192 } 1193 } 1194 1195 JavaThread::JavaThread(ThreadFunction entry_point, size_t stack_sz) : JavaThread() { 1196 _jni_attach_state = _not_attaching_via_jni; 1197 set_entry_point(entry_point); 1198 // Create the native thread itself. 1199 // %note runtime_23 1200 os::ThreadType thr_type = os::java_thread; 1201 thr_type = entry_point == &CompilerThread::thread_entry ? os::compiler_thread : 1202 os::java_thread; 1203 os::create_thread(this, thr_type, stack_sz); 1204 // The _osthread may be NULL here because we ran out of memory (too many threads active). 1205 // We need to throw and OutOfMemoryError - however we cannot do this here because the caller 1206 // may hold a lock and all locks must be unlocked before throwing the exception (throwing 1207 // the exception consists of creating the exception object & initializing it, initialization 1208 // will leave the VM via a JavaCall and then all locks must be unlocked). 1209 // 1210 // The thread is still suspended when we reach here. Thread must be explicit started 1211 // by creator! Furthermore, the thread must also explicitly be added to the Threads list 1212 // by calling Threads:add. The reason why this is not done here, is because the thread 1213 // object must be fully initialized (take a look at JVM_Start) 1214 } 1215 1216 JavaThread::~JavaThread() { 1217 1218 // Ask ServiceThread to release the threadObj OopHandle 1219 ServiceThread::add_oop_handle_release(_threadObj); 1220 1221 // Return the sleep event to the free list 1222 ParkEvent::Release(_SleepEvent); 1223 _SleepEvent = NULL; 1224 1225 // Free any remaining previous UnrollBlock 1226 vframeArray* old_array = vframe_array_last(); 1227 1228 if (old_array != NULL) { 1229 Deoptimization::UnrollBlock* old_info = old_array->unroll_block(); 1230 old_array->set_unroll_block(NULL); 1231 delete old_info; 1232 delete old_array; 1233 } 1234 1235 JvmtiDeferredUpdates* updates = deferred_updates(); 1236 if (updates != NULL) { 1237 // This can only happen if thread is destroyed before deoptimization occurs. 1238 assert(updates->count() > 0, "Updates holder not deleted"); 1239 // free deferred updates. 1240 delete updates; 1241 set_deferred_updates(NULL); 1242 } 1243 1244 // All Java related clean up happens in exit 1245 ThreadSafepointState::destroy(this); 1246 if (_thread_stat != NULL) delete _thread_stat; 1247 1248 #if INCLUDE_JVMCI 1249 if (JVMCICounterSize > 0) { 1250 FREE_C_HEAP_ARRAY(jlong, _jvmci_counters); 1251 } 1252 #endif // INCLUDE_JVMCI 1253 } 1254 1255 1256 // First JavaThread specific code executed by a new Java thread. 1257 void JavaThread::pre_run() { 1258 // empty - see comments in run() 1259 } 1260 1261 // The main routine called by a new Java thread. This isn't overridden 1262 // by subclasses, instead different subclasses define a different "entry_point" 1263 // which defines the actual logic for that kind of thread. 1264 void JavaThread::run() { 1265 // initialize thread-local alloc buffer related fields 1266 initialize_tlab(); 1267 1268 _stack_overflow_state.create_stack_guard_pages(); 1269 1270 cache_global_variables(); 1271 1272 // Thread is now sufficiently initialized to be handled by the safepoint code as being 1273 // in the VM. Change thread state from _thread_new to _thread_in_vm 1274 ThreadStateTransition::transition(this, _thread_new, _thread_in_vm); 1275 // Before a thread is on the threads list it is always safe, so after leaving the 1276 // _thread_new we should emit a instruction barrier. The distance to modified code 1277 // from here is probably far enough, but this is consistent and safe. 1278 OrderAccess::cross_modify_fence(); 1279 1280 assert(JavaThread::current() == this, "sanity check"); 1281 assert(!Thread::current()->owns_locks(), "sanity check"); 1282 1283 DTRACE_THREAD_PROBE(start, this); 1284 1285 // This operation might block. We call that after all safepoint checks for a new thread has 1286 // been completed. 1287 set_active_handles(JNIHandleBlock::allocate_block()); 1288 1289 if (JvmtiExport::should_post_thread_life()) { 1290 JvmtiExport::post_thread_start(this); 1291 1292 } 1293 1294 // We call another function to do the rest so we are sure that the stack addresses used 1295 // from there will be lower than the stack base just computed. 1296 thread_main_inner(); 1297 } 1298 1299 void JavaThread::thread_main_inner() { 1300 assert(JavaThread::current() == this, "sanity check"); 1301 assert(_threadObj.peek() != NULL, "just checking"); 1302 1303 // Execute thread entry point unless this thread has a pending exception 1304 // or has been stopped before starting. 1305 // Note: Due to JVM_StopThread we can have pending exceptions already! 1306 if (!this->has_pending_exception() && 1307 !java_lang_Thread::is_stillborn(this->threadObj())) { 1308 { 1309 ResourceMark rm(this); 1310 this->set_native_thread_name(this->get_thread_name()); 1311 } 1312 HandleMark hm(this); 1313 this->entry_point()(this, this); 1314 } 1315 1316 DTRACE_THREAD_PROBE(stop, this); 1317 1318 // Cleanup is handled in post_run() 1319 } 1320 1321 // Shared teardown for all JavaThreads 1322 void JavaThread::post_run() { 1323 this->exit(false); 1324 this->unregister_thread_stack_with_NMT(); 1325 // Defer deletion to here to ensure 'this' is still referenceable in call_run 1326 // for any shared tear-down. 1327 this->smr_delete(); 1328 } 1329 1330 static void ensure_join(JavaThread* thread) { 1331 // We do not need to grab the Threads_lock, since we are operating on ourself. 1332 Handle threadObj(thread, thread->threadObj()); 1333 assert(threadObj.not_null(), "java thread object must exist"); 1334 ObjectLocker lock(threadObj, thread); 1335 // Ignore pending exception (ThreadDeath), since we are exiting anyway 1336 thread->clear_pending_exception(); 1337 // Thread is exiting. So set thread_status field in java.lang.Thread class to TERMINATED. 1338 java_lang_Thread::set_thread_status(threadObj(), JavaThreadStatus::TERMINATED); 1339 // Clear the native thread instance - this makes isAlive return false and allows the join() 1340 // to complete once we've done the notify_all below 1341 java_lang_Thread::set_thread(threadObj(), NULL); 1342 lock.notify_all(thread); 1343 // Ignore pending exception (ThreadDeath), since we are exiting anyway 1344 thread->clear_pending_exception(); 1345 } 1346 1347 static bool is_daemon(oop threadObj) { 1348 return (threadObj != NULL && java_lang_Thread::is_daemon(threadObj)); 1349 } 1350 1351 // For any new cleanup additions, please check to see if they need to be applied to 1352 // cleanup_failed_attach_current_thread as well. 1353 void JavaThread::exit(bool destroy_vm, ExitType exit_type) { 1354 assert(this == JavaThread::current(), "thread consistency check"); 1355 1356 elapsedTimer _timer_exit_phase1; 1357 elapsedTimer _timer_exit_phase2; 1358 elapsedTimer _timer_exit_phase3; 1359 elapsedTimer _timer_exit_phase4; 1360 1361 if (log_is_enabled(Debug, os, thread, timer)) { 1362 _timer_exit_phase1.start(); 1363 } 1364 1365 HandleMark hm(this); 1366 Handle uncaught_exception(this, this->pending_exception()); 1367 this->clear_pending_exception(); 1368 Handle threadObj(this, this->threadObj()); 1369 assert(threadObj.not_null(), "Java thread object should be created"); 1370 1371 if (!destroy_vm) { 1372 if (uncaught_exception.not_null()) { 1373 EXCEPTION_MARK; 1374 // Call method Thread.dispatchUncaughtException(). 1375 Klass* thread_klass = vmClasses::Thread_klass(); 1376 JavaValue result(T_VOID); 1377 JavaCalls::call_virtual(&result, 1378 threadObj, thread_klass, 1379 vmSymbols::dispatchUncaughtException_name(), 1380 vmSymbols::throwable_void_signature(), 1381 uncaught_exception, 1382 THREAD); 1383 if (HAS_PENDING_EXCEPTION) { 1384 ResourceMark rm(this); 1385 jio_fprintf(defaultStream::error_stream(), 1386 "\nException: %s thrown from the UncaughtExceptionHandler" 1387 " in thread \"%s\"\n", 1388 pending_exception()->klass()->external_name(), 1389 get_thread_name()); 1390 CLEAR_PENDING_EXCEPTION; 1391 } 1392 } 1393 1394 // Call Thread.exit(). We try 3 times in case we got another Thread.stop during 1395 // the execution of the method. If that is not enough, then we don't really care. Thread.stop 1396 // is deprecated anyhow. 1397 if (!is_Compiler_thread()) { 1398 int count = 3; 1399 while (java_lang_Thread::threadGroup(threadObj()) != NULL && (count-- > 0)) { 1400 EXCEPTION_MARK; 1401 JavaValue result(T_VOID); 1402 Klass* thread_klass = vmClasses::Thread_klass(); 1403 JavaCalls::call_virtual(&result, 1404 threadObj, thread_klass, 1405 vmSymbols::exit_method_name(), 1406 vmSymbols::void_method_signature(), 1407 THREAD); 1408 CLEAR_PENDING_EXCEPTION; 1409 } 1410 } 1411 // notify JVMTI 1412 if (JvmtiExport::should_post_thread_life()) { 1413 JvmtiExport::post_thread_end(this); 1414 } 1415 1416 // The careful dance between thread suspension and exit is handled here. 1417 // Since we are in thread_in_vm state and suspension is done with handshakes, 1418 // we can just put in the exiting state and it will be correctly handled. 1419 set_terminated(_thread_exiting); 1420 1421 ThreadService::current_thread_exiting(this, is_daemon(threadObj())); 1422 } else { 1423 assert(!is_terminated() && !is_exiting(), "must not be exiting"); 1424 // before_exit() has already posted JVMTI THREAD_END events 1425 } 1426 1427 if (log_is_enabled(Debug, os, thread, timer)) { 1428 _timer_exit_phase1.stop(); 1429 _timer_exit_phase2.start(); 1430 } 1431 1432 // Capture daemon status before the thread is marked as terminated. 1433 bool daemon = is_daemon(threadObj()); 1434 1435 // Notify waiters on thread object. This has to be done after exit() is called 1436 // on the thread (if the thread is the last thread in a daemon ThreadGroup the 1437 // group should have the destroyed bit set before waiters are notified). 1438 ensure_join(this); 1439 assert(!this->has_pending_exception(), "ensure_join should have cleared"); 1440 1441 if (log_is_enabled(Debug, os, thread, timer)) { 1442 _timer_exit_phase2.stop(); 1443 _timer_exit_phase3.start(); 1444 } 1445 // 6282335 JNI DetachCurrentThread spec states that all Java monitors 1446 // held by this thread must be released. The spec does not distinguish 1447 // between JNI-acquired and regular Java monitors. We can only see 1448 // regular Java monitors here if monitor enter-exit matching is broken. 1449 // 1450 // ensure_join() ignores IllegalThreadStateExceptions, and so does 1451 // ObjectSynchronizer::release_monitors_owned_by_thread(). 1452 if (exit_type == jni_detach) { 1453 // Sanity check even though JNI DetachCurrentThread() would have 1454 // returned JNI_ERR if there was a Java frame. JavaThread exit 1455 // should be done executing Java code by the time we get here. 1456 assert(!this->has_last_Java_frame(), 1457 "should not have a Java frame when detaching or exiting"); 1458 ObjectSynchronizer::release_monitors_owned_by_thread(this); 1459 assert(!this->has_pending_exception(), "release_monitors should have cleared"); 1460 } 1461 1462 // These things needs to be done while we are still a Java Thread. Make sure that thread 1463 // is in a consistent state, in case GC happens 1464 JFR_ONLY(Jfr::on_thread_exit(this);) 1465 1466 if (active_handles() != NULL) { 1467 JNIHandleBlock* block = active_handles(); 1468 set_active_handles(NULL); 1469 JNIHandleBlock::release_block(block); 1470 } 1471 1472 if (free_handle_block() != NULL) { 1473 JNIHandleBlock* block = free_handle_block(); 1474 set_free_handle_block(NULL); 1475 JNIHandleBlock::release_block(block); 1476 } 1477 1478 // These have to be removed while this is still a valid thread. 1479 _stack_overflow_state.remove_stack_guard_pages(); 1480 1481 if (UseTLAB) { 1482 tlab().retire(); 1483 } 1484 1485 if (JvmtiEnv::environments_might_exist()) { 1486 JvmtiExport::cleanup_thread(this); 1487 } 1488 1489 // We need to cache the thread name for logging purposes below as once 1490 // we have called on_thread_detach this thread must not access any oops. 1491 char* thread_name = NULL; 1492 if (log_is_enabled(Debug, os, thread, timer)) { 1493 ResourceMark rm(this); 1494 thread_name = os::strdup(get_thread_name()); 1495 } 1496 1497 log_info(os, thread)("JavaThread %s (tid: " UINTX_FORMAT ").", 1498 exit_type == JavaThread::normal_exit ? "exiting" : "detaching", 1499 os::current_thread_id()); 1500 1501 if (log_is_enabled(Debug, os, thread, timer)) { 1502 _timer_exit_phase3.stop(); 1503 _timer_exit_phase4.start(); 1504 } 1505 1506 #if INCLUDE_JVMCI 1507 if (JVMCICounterSize > 0) { 1508 if (jvmci_counters_include(this)) { 1509 for (int i = 0; i < JVMCICounterSize; i++) { 1510 _jvmci_old_thread_counters[i] += _jvmci_counters[i]; 1511 } 1512 } 1513 } 1514 #endif // INCLUDE_JVMCI 1515 1516 // Remove from list of active threads list, and notify VM thread if we are the last non-daemon thread 1517 Threads::remove(this, daemon); 1518 1519 if (log_is_enabled(Debug, os, thread, timer)) { 1520 _timer_exit_phase4.stop(); 1521 log_debug(os, thread, timer)("name='%s'" 1522 ", exit-phase1=" JLONG_FORMAT 1523 ", exit-phase2=" JLONG_FORMAT 1524 ", exit-phase3=" JLONG_FORMAT 1525 ", exit-phase4=" JLONG_FORMAT, 1526 thread_name, 1527 _timer_exit_phase1.milliseconds(), 1528 _timer_exit_phase2.milliseconds(), 1529 _timer_exit_phase3.milliseconds(), 1530 _timer_exit_phase4.milliseconds()); 1531 os::free(thread_name); 1532 } 1533 } 1534 1535 void JavaThread::cleanup_failed_attach_current_thread(bool is_daemon) { 1536 if (active_handles() != NULL) { 1537 JNIHandleBlock* block = active_handles(); 1538 set_active_handles(NULL); 1539 JNIHandleBlock::release_block(block); 1540 } 1541 1542 if (free_handle_block() != NULL) { 1543 JNIHandleBlock* block = free_handle_block(); 1544 set_free_handle_block(NULL); 1545 JNIHandleBlock::release_block(block); 1546 } 1547 1548 // These have to be removed while this is still a valid thread. 1549 _stack_overflow_state.remove_stack_guard_pages(); 1550 1551 if (UseTLAB) { 1552 tlab().retire(); 1553 } 1554 1555 Threads::remove(this, is_daemon); 1556 this->smr_delete(); 1557 } 1558 1559 JavaThread* JavaThread::active() { 1560 Thread* thread = Thread::current(); 1561 if (thread->is_Java_thread()) { 1562 return thread->as_Java_thread(); 1563 } else { 1564 assert(thread->is_VM_thread(), "this must be a vm thread"); 1565 VM_Operation* op = ((VMThread*) thread)->vm_operation(); 1566 JavaThread *ret = op == NULL ? NULL : op->calling_thread()->as_Java_thread(); 1567 return ret; 1568 } 1569 } 1570 1571 bool JavaThread::is_lock_owned(address adr) const { 1572 if (Thread::is_lock_owned(adr)) return true; 1573 1574 for (MonitorChunk* chunk = monitor_chunks(); chunk != NULL; chunk = chunk->next()) { 1575 if (chunk->contains(adr)) return true; 1576 } 1577 1578 return false; 1579 } 1580 1581 oop JavaThread::exception_oop() const { 1582 return Atomic::load(&_exception_oop); 1583 } 1584 1585 void JavaThread::set_exception_oop(oop o) { 1586 Atomic::store(&_exception_oop, o); 1587 } 1588 1589 void JavaThread::add_monitor_chunk(MonitorChunk* chunk) { 1590 chunk->set_next(monitor_chunks()); 1591 set_monitor_chunks(chunk); 1592 } 1593 1594 void JavaThread::remove_monitor_chunk(MonitorChunk* chunk) { 1595 guarantee(monitor_chunks() != NULL, "must be non empty"); 1596 if (monitor_chunks() == chunk) { 1597 set_monitor_chunks(chunk->next()); 1598 } else { 1599 MonitorChunk* prev = monitor_chunks(); 1600 while (prev->next() != chunk) prev = prev->next(); 1601 prev->set_next(chunk->next()); 1602 } 1603 } 1604 1605 1606 // Asynchronous exceptions support 1607 // 1608 // Note: this function shouldn't block if it's called in 1609 // _thread_in_native_trans state (such as from 1610 // check_special_condition_for_native_trans()). 1611 void JavaThread::check_and_handle_async_exceptions() { 1612 if (has_last_Java_frame() && has_async_exception_condition()) { 1613 // If we are at a polling page safepoint (not a poll return) 1614 // then we must defer async exception because live registers 1615 // will be clobbered by the exception path. Poll return is 1616 // ok because the call we a returning from already collides 1617 // with exception handling registers and so there is no issue. 1618 // (The exception handling path kills call result registers but 1619 // this is ok since the exception kills the result anyway). 1620 1621 if (is_at_poll_safepoint()) { 1622 // if the code we are returning to has deoptimized we must defer 1623 // the exception otherwise live registers get clobbered on the 1624 // exception path before deoptimization is able to retrieve them. 1625 // 1626 RegisterMap map(this, false); 1627 frame caller_fr = last_frame().sender(&map); 1628 assert(caller_fr.is_compiled_frame(), "what?"); 1629 if (caller_fr.is_deoptimized_frame()) { 1630 log_info(exceptions)("deferred async exception at compiled safepoint"); 1631 return; 1632 } 1633 } 1634 } 1635 1636 AsyncExceptionCondition condition = clear_async_exception_condition(); 1637 if (condition == _no_async_condition) { 1638 // Conditions have changed since has_special_runtime_exit_condition() 1639 // was called: 1640 // - if we were here only because of an external suspend request, 1641 // then that was taken care of above (or cancelled) so we are done 1642 // - if we were here because of another async request, then it has 1643 // been cleared between the has_special_runtime_exit_condition() 1644 // and now so again we are done 1645 return; 1646 } 1647 1648 // Check for pending async. exception 1649 if (_pending_async_exception != NULL) { 1650 // Only overwrite an already pending exception, if it is not a threadDeath. 1651 if (!has_pending_exception() || !pending_exception()->is_a(vmClasses::ThreadDeath_klass())) { 1652 1653 // We cannot call Exceptions::_throw(...) here because we cannot block 1654 set_pending_exception(_pending_async_exception, __FILE__, __LINE__); 1655 1656 LogTarget(Info, exceptions) lt; 1657 if (lt.is_enabled()) { 1658 ResourceMark rm; 1659 LogStream ls(lt); 1660 ls.print("Async. exception installed at runtime exit (" INTPTR_FORMAT ")", p2i(this)); 1661 if (has_last_Java_frame()) { 1662 frame f = last_frame(); 1663 ls.print(" (pc: " INTPTR_FORMAT " sp: " INTPTR_FORMAT " )", p2i(f.pc()), p2i(f.sp())); 1664 } 1665 ls.print_cr(" of type: %s", _pending_async_exception->klass()->external_name()); 1666 } 1667 _pending_async_exception = NULL; 1668 // Clear condition from _suspend_flags since we have finished processing it. 1669 clear_suspend_flag(_has_async_exception); 1670 } 1671 } 1672 1673 if (condition == _async_unsafe_access_error && !has_pending_exception()) { 1674 // We may be at method entry which requires we save the do-not-unlock flag. 1675 UnlockFlagSaver fs(this); 1676 switch (thread_state()) { 1677 case _thread_in_vm: { 1678 JavaThread* THREAD = this; 1679 Exceptions::throw_unsafe_access_internal_error(THREAD, __FILE__, __LINE__, "a fault occurred in an unsafe memory access operation"); 1680 return; 1681 } 1682 case _thread_in_native: { 1683 ThreadInVMfromNative tiv(this); 1684 JavaThread* THREAD = this; 1685 Exceptions::throw_unsafe_access_internal_error(THREAD, __FILE__, __LINE__, "a fault occurred in an unsafe memory access operation"); 1686 return; 1687 } 1688 case _thread_in_Java: { 1689 ThreadInVMfromJava tiv(this); 1690 JavaThread* THREAD = this; 1691 Exceptions::throw_unsafe_access_internal_error(THREAD, __FILE__, __LINE__, "a fault occurred in a recent unsafe memory access operation in compiled Java code"); 1692 return; 1693 } 1694 default: 1695 ShouldNotReachHere(); 1696 } 1697 } 1698 1699 assert(has_pending_exception(), "must have handled the async condition if no exception"); 1700 } 1701 1702 void JavaThread::handle_special_runtime_exit_condition(bool check_asyncs) { 1703 1704 if (is_obj_deopt_suspend()) { 1705 frame_anchor()->make_walkable(); 1706 wait_for_object_deoptimization(); 1707 } 1708 1709 // We might be here for reasons in addition to the self-suspend request 1710 // so check for other async requests. 1711 if (check_asyncs) { 1712 check_and_handle_async_exceptions(); 1713 } 1714 1715 JFR_ONLY(SUSPEND_THREAD_CONDITIONAL(this);) 1716 } 1717 1718 class InstallAsyncExceptionClosure : public HandshakeClosure { 1719 Handle _throwable; // The Throwable thrown at the target Thread 1720 public: 1721 InstallAsyncExceptionClosure(Handle throwable) : HandshakeClosure("InstallAsyncException"), _throwable(throwable) {} 1722 1723 void do_thread(Thread* thr) { 1724 JavaThread* target = thr->as_Java_thread(); 1725 // Note that this now allows multiple ThreadDeath exceptions to be 1726 // thrown at a thread. 1727 // The target thread has run and has not exited yet. 1728 target->send_thread_stop(_throwable()); 1729 } 1730 }; 1731 1732 void JavaThread::send_async_exception(oop java_thread, oop java_throwable) { 1733 Handle throwable(Thread::current(), java_throwable); 1734 JavaThread* target = java_lang_Thread::thread(java_thread); 1735 InstallAsyncExceptionClosure vm_stop(throwable); 1736 Handshake::execute(&vm_stop, target); 1737 } 1738 1739 void JavaThread::send_thread_stop(oop java_throwable) { 1740 ResourceMark rm; 1741 assert(is_handshake_safe_for(Thread::current()), 1742 "should be self or handshakee"); 1743 1744 // Do not throw asynchronous exceptions against the compiler thread 1745 // (the compiler thread should not be a Java thread -- fix in 1.4.2) 1746 if (!can_call_java()) return; 1747 1748 { 1749 // Actually throw the Throwable against the target Thread - however 1750 // only if there is no thread death exception installed already. 1751 if (_pending_async_exception == NULL || !_pending_async_exception->is_a(vmClasses::ThreadDeath_klass())) { 1752 // If the topmost frame is a runtime stub, then we are calling into 1753 // OptoRuntime from compiled code. Some runtime stubs (new, monitor_exit..) 1754 // must deoptimize the caller before continuing, as the compiled exception handler table 1755 // may not be valid 1756 if (has_last_Java_frame()) { 1757 frame f = last_frame(); 1758 if (f.is_runtime_frame() || f.is_safepoint_blob_frame()) { 1759 RegisterMap reg_map(this, false); 1760 frame compiled_frame = f.sender(®_map); 1761 if (!StressCompiledExceptionHandlers && compiled_frame.can_be_deoptimized()) { 1762 Deoptimization::deoptimize(this, compiled_frame); 1763 } 1764 } 1765 } 1766 1767 // Set async. pending exception in thread. 1768 set_pending_async_exception(java_throwable); 1769 1770 if (log_is_enabled(Info, exceptions)) { 1771 ResourceMark rm; 1772 log_info(exceptions)("Pending Async. exception installed of type: %s", 1773 InstanceKlass::cast(_pending_async_exception->klass())->external_name()); 1774 } 1775 // for AbortVMOnException flag 1776 Exceptions::debug_check_abort(_pending_async_exception->klass()->external_name()); 1777 } 1778 } 1779 1780 1781 // Interrupt thread so it will wake up from a potential wait()/sleep()/park() 1782 java_lang_Thread::set_interrupted(threadObj(), true); 1783 this->interrupt(); 1784 } 1785 1786 1787 // External suspension mechanism. 1788 // 1789 // Guarantees on return (for a valid target thread): 1790 // - Target thread will not execute any new bytecode. 1791 // - Target thread will not enter any new monitors. 1792 // 1793 bool JavaThread::java_suspend() { 1794 ThreadsListHandle tlh; 1795 if (!tlh.includes(this)) { 1796 log_trace(thread, suspend)("JavaThread:" INTPTR_FORMAT " not on ThreadsList, no suspension", p2i(this)); 1797 return false; 1798 } 1799 return this->handshake_state()->suspend(); 1800 } 1801 1802 bool JavaThread::java_resume() { 1803 ThreadsListHandle tlh; 1804 if (!tlh.includes(this)) { 1805 log_trace(thread, suspend)("JavaThread:" INTPTR_FORMAT " not on ThreadsList, nothing to resume", p2i(this)); 1806 return false; 1807 } 1808 return this->handshake_state()->resume(); 1809 } 1810 1811 // Wait for another thread to perform object reallocation and relocking on behalf of 1812 // this thread. 1813 // Raw thread state transition to _thread_blocked and back again to the original 1814 // state before returning are performed. The current thread is required to 1815 // change to _thread_blocked in order to be seen to be safepoint/handshake safe 1816 // whilst suspended and only after becoming handshake safe, the other thread can 1817 // complete the handshake used to synchronize with this thread and then perform 1818 // the reallocation and relocking. We cannot use the thread state transition 1819 // helpers because we arrive here in various states and also because the helpers 1820 // indirectly call this method. After leaving _thread_blocked we have to check 1821 // for safepoint/handshake, except if _thread_in_native. The thread is safe 1822 // without blocking then. Allowed states are enumerated in 1823 // SafepointSynchronize::block(). See also EscapeBarrier::sync_and_suspend_*() 1824 1825 void JavaThread::wait_for_object_deoptimization() { 1826 assert(!has_last_Java_frame() || frame_anchor()->walkable(), "should have walkable stack"); 1827 assert(this == Thread::current(), "invariant"); 1828 JavaThreadState state = thread_state(); 1829 1830 bool spin_wait = os::is_MP(); 1831 do { 1832 set_thread_state(_thread_blocked); 1833 // Wait for object deoptimization if requested. 1834 if (spin_wait) { 1835 // A single deoptimization is typically very short. Microbenchmarks 1836 // showed 5% better performance when spinning. 1837 const uint spin_limit = 10 * SpinYield::default_spin_limit; 1838 SpinYield spin(spin_limit); 1839 for (uint i = 0; is_obj_deopt_suspend() && i < spin_limit; i++) { 1840 spin.wait(); 1841 } 1842 // Spin just once 1843 spin_wait = false; 1844 } else { 1845 MonitorLocker ml(this, EscapeBarrier_lock, Monitor::_no_safepoint_check_flag); 1846 if (is_obj_deopt_suspend()) { 1847 ml.wait(); 1848 } 1849 } 1850 // The current thread could have been suspended again. We have to check for 1851 // suspend after restoring the saved state. Without this the current thread 1852 // might return to _thread_in_Java and execute bytecode. 1853 set_thread_state_fence(state); 1854 1855 if (state != _thread_in_native) { 1856 SafepointMechanism::process_if_requested(this); 1857 } 1858 // A handshake for obj. deoptimization suspend could have been processed so 1859 // we must check after processing. 1860 } while (is_obj_deopt_suspend()); 1861 } 1862 1863 #ifdef ASSERT 1864 // Verify the JavaThread has not yet been published in the Threads::list, and 1865 // hence doesn't need protection from concurrent access at this stage. 1866 void JavaThread::verify_not_published() { 1867 // Cannot create a ThreadsListHandle here and check !tlh.includes(this) 1868 // since an unpublished JavaThread doesn't participate in the 1869 // Thread-SMR protocol for keeping a ThreadsList alive. 1870 assert(!on_thread_list(), "JavaThread shouldn't have been published yet!"); 1871 } 1872 #endif 1873 1874 // Slow path when the native==>Java barriers detect a safepoint/handshake is 1875 // pending, when _suspend_flags is non-zero or when we need to process a stack 1876 // watermark. Also check for pending async exceptions (except unsafe access error). 1877 // Note only the native==>Java barriers can call this function when thread state 1878 // is _thread_in_native_trans. 1879 void JavaThread::check_special_condition_for_native_trans(JavaThread *thread) { 1880 assert(thread->thread_state() == _thread_in_native_trans, "wrong state"); 1881 assert(!thread->has_last_Java_frame() || thread->frame_anchor()->walkable(), "Unwalkable stack in native->Java transition"); 1882 1883 // Enable WXWrite: called directly from interpreter native wrapper. 1884 MACOS_AARCH64_ONLY(ThreadWXEnable wx(WXWrite, thread)); 1885 1886 SafepointMechanism::process_if_requested_with_exit_check(thread, false /* check asyncs */); 1887 1888 // After returning from native, it could be that the stack frames are not 1889 // yet safe to use. We catch such situations in the subsequent stack watermark 1890 // barrier, which will trap unsafe stack frames. 1891 StackWatermarkSet::before_unwind(thread); 1892 1893 if (thread->has_async_exception_condition(false /* check unsafe access error */)) { 1894 // We are in _thread_in_native_trans state, don't handle unsafe 1895 // access error since that may block. 1896 thread->check_and_handle_async_exceptions(); 1897 } 1898 } 1899 1900 #ifndef PRODUCT 1901 // Deoptimization 1902 // Function for testing deoptimization 1903 void JavaThread::deoptimize() { 1904 StackFrameStream fst(this, false /* update */, true /* process_frames */); 1905 bool deopt = false; // Dump stack only if a deopt actually happens. 1906 bool only_at = strlen(DeoptimizeOnlyAt) > 0; 1907 // Iterate over all frames in the thread and deoptimize 1908 for (; !fst.is_done(); fst.next()) { 1909 if (fst.current()->can_be_deoptimized()) { 1910 1911 if (only_at) { 1912 // Deoptimize only at particular bcis. DeoptimizeOnlyAt 1913 // consists of comma or carriage return separated numbers so 1914 // search for the current bci in that string. 1915 address pc = fst.current()->pc(); 1916 nmethod* nm = (nmethod*) fst.current()->cb(); 1917 ScopeDesc* sd = nm->scope_desc_at(pc); 1918 char buffer[8]; 1919 jio_snprintf(buffer, sizeof(buffer), "%d", sd->bci()); 1920 size_t len = strlen(buffer); 1921 const char * found = strstr(DeoptimizeOnlyAt, buffer); 1922 while (found != NULL) { 1923 if ((found[len] == ',' || found[len] == '\n' || found[len] == '\0') && 1924 (found == DeoptimizeOnlyAt || found[-1] == ',' || found[-1] == '\n')) { 1925 // Check that the bci found is bracketed by terminators. 1926 break; 1927 } 1928 found = strstr(found + 1, buffer); 1929 } 1930 if (!found) { 1931 continue; 1932 } 1933 } 1934 1935 if (DebugDeoptimization && !deopt) { 1936 deopt = true; // One-time only print before deopt 1937 tty->print_cr("[BEFORE Deoptimization]"); 1938 trace_frames(); 1939 trace_stack(); 1940 } 1941 Deoptimization::deoptimize(this, *fst.current()); 1942 } 1943 } 1944 1945 if (DebugDeoptimization && deopt) { 1946 tty->print_cr("[AFTER Deoptimization]"); 1947 trace_frames(); 1948 } 1949 } 1950 1951 1952 // Make zombies 1953 void JavaThread::make_zombies() { 1954 for (StackFrameStream fst(this, true /* update */, true /* process_frames */); !fst.is_done(); fst.next()) { 1955 if (fst.current()->can_be_deoptimized()) { 1956 // it is a Java nmethod 1957 nmethod* nm = CodeCache::find_nmethod(fst.current()->pc()); 1958 nm->make_not_entrant(); 1959 } 1960 } 1961 } 1962 #endif // PRODUCT 1963 1964 1965 void JavaThread::deoptimize_marked_methods() { 1966 if (!has_last_Java_frame()) return; 1967 StackFrameStream fst(this, false /* update */, true /* process_frames */); 1968 for (; !fst.is_done(); fst.next()) { 1969 if (fst.current()->should_be_deoptimized()) { 1970 Deoptimization::deoptimize(this, *fst.current()); 1971 } 1972 } 1973 } 1974 1975 #ifdef ASSERT 1976 void JavaThread::verify_frame_info() { 1977 assert((!has_last_Java_frame() && java_call_counter() == 0) || 1978 (has_last_Java_frame() && java_call_counter() > 0), 1979 "unexpected frame info: has_last_frame=%s, java_call_counter=%d", 1980 has_last_Java_frame() ? "true" : "false", java_call_counter()); 1981 } 1982 #endif 1983 1984 void JavaThread::oops_do_no_frames(OopClosure* f, CodeBlobClosure* cf) { 1985 // Verify that the deferred card marks have been flushed. 1986 assert(deferred_card_mark().is_empty(), "Should be empty during GC"); 1987 1988 // Traverse the GCHandles 1989 Thread::oops_do_no_frames(f, cf); 1990 1991 DEBUG_ONLY(verify_frame_info();) 1992 1993 if (has_last_Java_frame()) { 1994 // Traverse the monitor chunks 1995 for (MonitorChunk* chunk = monitor_chunks(); chunk != NULL; chunk = chunk->next()) { 1996 chunk->oops_do(f); 1997 } 1998 } 1999 2000 assert(vframe_array_head() == NULL, "deopt in progress at a safepoint!"); 2001 // If we have deferred set_locals there might be oops waiting to be 2002 // written 2003 GrowableArray<jvmtiDeferredLocalVariableSet*>* list = JvmtiDeferredUpdates::deferred_locals(this); 2004 if (list != NULL) { 2005 for (int i = 0; i < list->length(); i++) { 2006 list->at(i)->oops_do(f); 2007 } 2008 } 2009 2010 // Traverse instance variables at the end since the GC may be moving things 2011 // around using this function 2012 f->do_oop((oop*) &_vm_result); 2013 f->do_oop((oop*) &_exception_oop); 2014 f->do_oop((oop*) &_pending_async_exception); 2015 #if INCLUDE_JVMCI 2016 f->do_oop((oop*) &_jvmci_reserved_oop0); 2017 #endif 2018 2019 if (jvmti_thread_state() != NULL) { 2020 jvmti_thread_state()->oops_do(f, cf); 2021 } 2022 } 2023 2024 void JavaThread::oops_do_frames(OopClosure* f, CodeBlobClosure* cf) { 2025 if (!has_last_Java_frame()) { 2026 return; 2027 } 2028 // Finish any pending lazy GC activity for the frames 2029 StackWatermarkSet::finish_processing(this, NULL /* context */, StackWatermarkKind::gc); 2030 // Traverse the execution stack 2031 for (StackFrameStream fst(this, true /* update */, false /* process_frames */); !fst.is_done(); fst.next()) { 2032 fst.current()->oops_do(f, cf, fst.register_map()); 2033 } 2034 } 2035 2036 #ifdef ASSERT 2037 void JavaThread::verify_states_for_handshake() { 2038 // This checks that the thread has a correct frame state during a handshake. 2039 verify_frame_info(); 2040 } 2041 #endif 2042 2043 void JavaThread::nmethods_do(CodeBlobClosure* cf) { 2044 DEBUG_ONLY(verify_frame_info();) 2045 2046 if (has_last_Java_frame()) { 2047 // Traverse the execution stack 2048 for (StackFrameStream fst(this, true /* update */, true /* process_frames */); !fst.is_done(); fst.next()) { 2049 fst.current()->nmethods_do(cf); 2050 } 2051 } 2052 2053 if (jvmti_thread_state() != NULL) { 2054 jvmti_thread_state()->nmethods_do(cf); 2055 } 2056 } 2057 2058 void JavaThread::metadata_do(MetadataClosure* f) { 2059 if (has_last_Java_frame()) { 2060 // Traverse the execution stack to call f() on the methods in the stack 2061 for (StackFrameStream fst(this, true /* update */, true /* process_frames */); !fst.is_done(); fst.next()) { 2062 fst.current()->metadata_do(f); 2063 } 2064 } else if (is_Compiler_thread()) { 2065 // need to walk ciMetadata in current compile tasks to keep alive. 2066 CompilerThread* ct = (CompilerThread*)this; 2067 if (ct->env() != NULL) { 2068 ct->env()->metadata_do(f); 2069 } 2070 CompileTask* task = ct->task(); 2071 if (task != NULL) { 2072 task->metadata_do(f); 2073 } 2074 } 2075 } 2076 2077 // Printing 2078 const char* _get_thread_state_name(JavaThreadState _thread_state) { 2079 switch (_thread_state) { 2080 case _thread_uninitialized: return "_thread_uninitialized"; 2081 case _thread_new: return "_thread_new"; 2082 case _thread_new_trans: return "_thread_new_trans"; 2083 case _thread_in_native: return "_thread_in_native"; 2084 case _thread_in_native_trans: return "_thread_in_native_trans"; 2085 case _thread_in_vm: return "_thread_in_vm"; 2086 case _thread_in_vm_trans: return "_thread_in_vm_trans"; 2087 case _thread_in_Java: return "_thread_in_Java"; 2088 case _thread_in_Java_trans: return "_thread_in_Java_trans"; 2089 case _thread_blocked: return "_thread_blocked"; 2090 case _thread_blocked_trans: return "_thread_blocked_trans"; 2091 default: return "unknown thread state"; 2092 } 2093 } 2094 2095 #ifndef PRODUCT 2096 void JavaThread::print_thread_state_on(outputStream *st) const { 2097 st->print_cr(" JavaThread state: %s", _get_thread_state_name(_thread_state)); 2098 }; 2099 #endif // PRODUCT 2100 2101 // Called by Threads::print() for VM_PrintThreads operation 2102 void JavaThread::print_on(outputStream *st, bool print_extended_info) const { 2103 st->print_raw("\""); 2104 st->print_raw(get_thread_name()); 2105 st->print_raw("\" "); 2106 oop thread_oop = threadObj(); 2107 if (thread_oop != NULL) { 2108 st->print("#" INT64_FORMAT " ", (int64_t)java_lang_Thread::thread_id(thread_oop)); 2109 if (java_lang_Thread::is_daemon(thread_oop)) st->print("daemon "); 2110 st->print("prio=%d ", java_lang_Thread::priority(thread_oop)); 2111 } 2112 Thread::print_on(st, print_extended_info); 2113 // print guess for valid stack memory region (assume 4K pages); helps lock debugging 2114 st->print_cr("[" INTPTR_FORMAT "]", (intptr_t)last_Java_sp() & ~right_n_bits(12)); 2115 if (thread_oop != NULL) { 2116 st->print_cr(" java.lang.Thread.State: %s", java_lang_Thread::thread_status_name(thread_oop)); 2117 } 2118 #ifndef PRODUCT 2119 _safepoint_state->print_on(st); 2120 #endif // PRODUCT 2121 if (is_Compiler_thread()) { 2122 CompileTask *task = ((CompilerThread*)this)->task(); 2123 if (task != NULL) { 2124 st->print(" Compiling: "); 2125 task->print(st, NULL, true, false); 2126 } else { 2127 st->print(" No compile task"); 2128 } 2129 st->cr(); 2130 } 2131 } 2132 2133 void JavaThread::print() const { print_on(tty); } 2134 2135 void JavaThread::print_name_on_error(outputStream* st, char *buf, int buflen) const { 2136 st->print("%s", get_thread_name_string(buf, buflen)); 2137 } 2138 2139 // Called by fatal error handler. The difference between this and 2140 // JavaThread::print() is that we can't grab lock or allocate memory. 2141 void JavaThread::print_on_error(outputStream* st, char *buf, int buflen) const { 2142 st->print("JavaThread \"%s\"", get_thread_name_string(buf, buflen)); 2143 oop thread_obj = threadObj(); 2144 if (thread_obj != NULL) { 2145 if (java_lang_Thread::is_daemon(thread_obj)) st->print(" daemon"); 2146 } 2147 st->print(" ["); 2148 st->print("%s", _get_thread_state_name(_thread_state)); 2149 if (osthread()) { 2150 st->print(", id=%d", osthread()->thread_id()); 2151 } 2152 st->print(", stack(" PTR_FORMAT "," PTR_FORMAT ")", 2153 p2i(stack_end()), p2i(stack_base())); 2154 st->print("]"); 2155 2156 ThreadsSMRSupport::print_info_on(this, st); 2157 return; 2158 } 2159 2160 2161 // Verification 2162 2163 void JavaThread::frames_do(void f(frame*, const RegisterMap* map)) { 2164 // ignore if there is no stack 2165 if (!has_last_Java_frame()) return; 2166 // traverse the stack frames. Starts from top frame. 2167 for (StackFrameStream fst(this, true /* update */, true /* process_frames */); !fst.is_done(); fst.next()) { 2168 frame* fr = fst.current(); 2169 f(fr, fst.register_map()); 2170 } 2171 } 2172 2173 static void frame_verify(frame* f, const RegisterMap *map) { f->verify(map); } 2174 2175 void JavaThread::verify() { 2176 // Verify oops in the thread. 2177 oops_do(&VerifyOopClosure::verify_oop, NULL); 2178 2179 // Verify the stack frames. 2180 frames_do(frame_verify); 2181 } 2182 2183 // CR 6300358 (sub-CR 2137150) 2184 // Most callers of this method assume that it can't return NULL but a 2185 // thread may not have a name whilst it is in the process of attaching to 2186 // the VM - see CR 6412693, and there are places where a JavaThread can be 2187 // seen prior to having its threadObj set (e.g., JNI attaching threads and 2188 // if vm exit occurs during initialization). These cases can all be accounted 2189 // for such that this method never returns NULL. 2190 const char* JavaThread::get_thread_name() const { 2191 if (Thread::is_JavaThread_protected(this)) { 2192 // The target JavaThread is protected so get_thread_name_string() is safe: 2193 return get_thread_name_string(); 2194 } 2195 2196 // The target JavaThread is not protected so we return the default: 2197 return Thread::name(); 2198 } 2199 2200 // Returns a non-NULL representation of this thread's name, or a suitable 2201 // descriptive string if there is no set name. 2202 const char* JavaThread::get_thread_name_string(char* buf, int buflen) const { 2203 const char* name_str; 2204 oop thread_obj = threadObj(); 2205 if (thread_obj != NULL) { 2206 oop name = java_lang_Thread::name(thread_obj); 2207 if (name != NULL) { 2208 if (buf == NULL) { 2209 name_str = java_lang_String::as_utf8_string(name); 2210 } else { 2211 name_str = java_lang_String::as_utf8_string(name, buf, buflen); 2212 } 2213 } else if (is_attaching_via_jni()) { // workaround for 6412693 - see 6404306 2214 name_str = "<no-name - thread is attaching>"; 2215 } else { 2216 name_str = Thread::name(); 2217 } 2218 } else { 2219 name_str = Thread::name(); 2220 } 2221 assert(name_str != NULL, "unexpected NULL thread name"); 2222 return name_str; 2223 } 2224 2225 // Helper to extract the name from the thread oop for logging. 2226 const char* JavaThread::name_for(oop thread_obj) { 2227 assert(thread_obj != NULL, "precondition"); 2228 oop name = java_lang_Thread::name(thread_obj); 2229 const char* name_str; 2230 if (name != NULL) { 2231 name_str = java_lang_String::as_utf8_string(name); 2232 } else { 2233 name_str = "<un-named>"; 2234 } 2235 return name_str; 2236 } 2237 2238 void JavaThread::prepare(jobject jni_thread, ThreadPriority prio) { 2239 2240 assert(Threads_lock->owner() == Thread::current(), "must have threads lock"); 2241 assert(NoPriority <= prio && prio <= MaxPriority, "sanity check"); 2242 // Link Java Thread object <-> C++ Thread 2243 2244 // Get the C++ thread object (an oop) from the JNI handle (a jthread) 2245 // and put it into a new Handle. The Handle "thread_oop" can then 2246 // be used to pass the C++ thread object to other methods. 2247 2248 // Set the Java level thread object (jthread) field of the 2249 // new thread (a JavaThread *) to C++ thread object using the 2250 // "thread_oop" handle. 2251 2252 // Set the thread field (a JavaThread *) of the 2253 // oop representing the java_lang_Thread to the new thread (a JavaThread *). 2254 2255 Handle thread_oop(Thread::current(), 2256 JNIHandles::resolve_non_null(jni_thread)); 2257 assert(InstanceKlass::cast(thread_oop->klass())->is_linked(), 2258 "must be initialized"); 2259 set_threadObj(thread_oop()); 2260 java_lang_Thread::set_thread(thread_oop(), this); 2261 2262 if (prio == NoPriority) { 2263 prio = java_lang_Thread::priority(thread_oop()); 2264 assert(prio != NoPriority, "A valid priority should be present"); 2265 } 2266 2267 // Push the Java priority down to the native thread; needs Threads_lock 2268 Thread::set_priority(this, prio); 2269 2270 // Add the new thread to the Threads list and set it in motion. 2271 // We must have threads lock in order to call Threads::add. 2272 // It is crucial that we do not block before the thread is 2273 // added to the Threads list for if a GC happens, then the java_thread oop 2274 // will not be visited by GC. 2275 Threads::add(this); 2276 } 2277 2278 oop JavaThread::current_park_blocker() { 2279 // Support for JSR-166 locks 2280 oop thread_oop = threadObj(); 2281 if (thread_oop != NULL) { 2282 return java_lang_Thread::park_blocker(thread_oop); 2283 } 2284 return NULL; 2285 } 2286 2287 2288 void JavaThread::print_stack_on(outputStream* st) { 2289 if (!has_last_Java_frame()) return; 2290 2291 Thread* current_thread = Thread::current(); 2292 ResourceMark rm(current_thread); 2293 HandleMark hm(current_thread); 2294 2295 RegisterMap reg_map(this); 2296 vframe* start_vf = last_java_vframe(®_map); 2297 int count = 0; 2298 for (vframe* f = start_vf; f != NULL; f = f->sender()) { 2299 if (f->is_java_frame()) { 2300 javaVFrame* jvf = javaVFrame::cast(f); 2301 java_lang_Throwable::print_stack_element(st, jvf->method(), jvf->bci()); 2302 2303 // Print out lock information 2304 if (JavaMonitorsInStackTrace) { 2305 jvf->print_lock_info_on(st, count); 2306 } 2307 } else { 2308 // Ignore non-Java frames 2309 } 2310 2311 // Bail-out case for too deep stacks if MaxJavaStackTraceDepth > 0 2312 count++; 2313 if (MaxJavaStackTraceDepth > 0 && MaxJavaStackTraceDepth == count) return; 2314 } 2315 } 2316 2317 2318 // JVMTI PopFrame support 2319 void JavaThread::popframe_preserve_args(ByteSize size_in_bytes, void* start) { 2320 assert(_popframe_preserved_args == NULL, "should not wipe out old PopFrame preserved arguments"); 2321 if (in_bytes(size_in_bytes) != 0) { 2322 _popframe_preserved_args = NEW_C_HEAP_ARRAY(char, in_bytes(size_in_bytes), mtThread); 2323 _popframe_preserved_args_size = in_bytes(size_in_bytes); 2324 Copy::conjoint_jbytes(start, _popframe_preserved_args, _popframe_preserved_args_size); 2325 } 2326 } 2327 2328 void* JavaThread::popframe_preserved_args() { 2329 return _popframe_preserved_args; 2330 } 2331 2332 ByteSize JavaThread::popframe_preserved_args_size() { 2333 return in_ByteSize(_popframe_preserved_args_size); 2334 } 2335 2336 WordSize JavaThread::popframe_preserved_args_size_in_words() { 2337 int sz = in_bytes(popframe_preserved_args_size()); 2338 assert(sz % wordSize == 0, "argument size must be multiple of wordSize"); 2339 return in_WordSize(sz / wordSize); 2340 } 2341 2342 void JavaThread::popframe_free_preserved_args() { 2343 assert(_popframe_preserved_args != NULL, "should not free PopFrame preserved arguments twice"); 2344 FREE_C_HEAP_ARRAY(char, (char*)_popframe_preserved_args); 2345 _popframe_preserved_args = NULL; 2346 _popframe_preserved_args_size = 0; 2347 } 2348 2349 #ifndef PRODUCT 2350 2351 void JavaThread::trace_frames() { 2352 tty->print_cr("[Describe stack]"); 2353 int frame_no = 1; 2354 for (StackFrameStream fst(this, true /* update */, true /* process_frames */); !fst.is_done(); fst.next()) { 2355 tty->print(" %d. ", frame_no++); 2356 fst.current()->print_value_on(tty, this); 2357 tty->cr(); 2358 } 2359 } 2360 2361 class PrintAndVerifyOopClosure: public OopClosure { 2362 protected: 2363 template <class T> inline void do_oop_work(T* p) { 2364 oop obj = RawAccess<>::oop_load(p); 2365 if (obj == NULL) return; 2366 tty->print(INTPTR_FORMAT ": ", p2i(p)); 2367 if (oopDesc::is_oop_or_null(obj)) { 2368 if (obj->is_objArray()) { 2369 tty->print_cr("valid objArray: " INTPTR_FORMAT, p2i(obj)); 2370 } else { 2371 obj->print(); 2372 } 2373 } else { 2374 tty->print_cr("invalid oop: " INTPTR_FORMAT, p2i(obj)); 2375 } 2376 tty->cr(); 2377 } 2378 public: 2379 virtual void do_oop(oop* p) { do_oop_work(p); } 2380 virtual void do_oop(narrowOop* p) { do_oop_work(p); } 2381 }; 2382 2383 #ifdef ASSERT 2384 // Print or validate the layout of stack frames 2385 void JavaThread::print_frame_layout(int depth, bool validate_only) { 2386 ResourceMark rm; 2387 PreserveExceptionMark pm(this); 2388 FrameValues values; 2389 int frame_no = 0; 2390 for (StackFrameStream fst(this, false /* update */, true /* process_frames */); !fst.is_done(); fst.next()) { 2391 fst.current()->describe(values, ++frame_no); 2392 if (depth == frame_no) break; 2393 } 2394 if (validate_only) { 2395 values.validate(); 2396 } else { 2397 tty->print_cr("[Describe stack layout]"); 2398 values.print(this); 2399 } 2400 } 2401 #endif 2402 2403 void JavaThread::trace_stack_from(vframe* start_vf) { 2404 ResourceMark rm; 2405 int vframe_no = 1; 2406 for (vframe* f = start_vf; f; f = f->sender()) { 2407 if (f->is_java_frame()) { 2408 javaVFrame::cast(f)->print_activation(vframe_no++); 2409 } else { 2410 f->print(); 2411 } 2412 if (vframe_no > StackPrintLimit) { 2413 tty->print_cr("...<more frames>..."); 2414 return; 2415 } 2416 } 2417 } 2418 2419 2420 void JavaThread::trace_stack() { 2421 if (!has_last_Java_frame()) return; 2422 Thread* current_thread = Thread::current(); 2423 ResourceMark rm(current_thread); 2424 HandleMark hm(current_thread); 2425 RegisterMap reg_map(this); 2426 trace_stack_from(last_java_vframe(®_map)); 2427 } 2428 2429 2430 #endif // PRODUCT 2431 2432 2433 javaVFrame* JavaThread::last_java_vframe(RegisterMap *reg_map) { 2434 assert(reg_map != NULL, "a map must be given"); 2435 frame f = last_frame(); 2436 for (vframe* vf = vframe::new_vframe(&f, reg_map, this); vf; vf = vf->sender()) { 2437 if (vf->is_java_frame()) return javaVFrame::cast(vf); 2438 } 2439 return NULL; 2440 } 2441 2442 2443 Klass* JavaThread::security_get_caller_class(int depth) { 2444 vframeStream vfst(this); 2445 vfst.security_get_caller_frame(depth); 2446 if (!vfst.at_end()) { 2447 return vfst.method()->method_holder(); 2448 } 2449 return NULL; 2450 } 2451 2452 // java.lang.Thread.sleep support 2453 // Returns true if sleep time elapsed as expected, and false 2454 // if the thread was interrupted. 2455 bool JavaThread::sleep(jlong millis) { 2456 assert(this == Thread::current(), "thread consistency check"); 2457 2458 ParkEvent * const slp = this->_SleepEvent; 2459 // Because there can be races with thread interruption sending an unpark() 2460 // to the event, we explicitly reset it here to avoid an immediate return. 2461 // The actual interrupt state will be checked before we park(). 2462 slp->reset(); 2463 // Thread interruption establishes a happens-before ordering in the 2464 // Java Memory Model, so we need to ensure we synchronize with the 2465 // interrupt state. 2466 OrderAccess::fence(); 2467 2468 jlong prevtime = os::javaTimeNanos(); 2469 2470 for (;;) { 2471 // interruption has precedence over timing out 2472 if (this->is_interrupted(true)) { 2473 return false; 2474 } 2475 2476 if (millis <= 0) { 2477 return true; 2478 } 2479 2480 { 2481 ThreadBlockInVM tbivm(this); 2482 OSThreadWaitState osts(this->osthread(), false /* not Object.wait() */); 2483 slp->park(millis); 2484 } 2485 2486 // Update elapsed time tracking 2487 jlong newtime = os::javaTimeNanos(); 2488 if (newtime - prevtime < 0) { 2489 // time moving backwards, should only happen if no monotonic clock 2490 // not a guarantee() because JVM should not abort on kernel/glibc bugs 2491 assert(false, 2492 "unexpected time moving backwards detected in JavaThread::sleep()"); 2493 } else { 2494 millis -= (newtime - prevtime) / NANOSECS_PER_MILLISEC; 2495 } 2496 prevtime = newtime; 2497 } 2498 } 2499 2500 2501 // ======= Threads ======== 2502 2503 // The Threads class links together all active threads, and provides 2504 // operations over all threads. It is protected by the Threads_lock, 2505 // which is also used in other global contexts like safepointing. 2506 // ThreadsListHandles are used to safely perform operations on one 2507 // or more threads without the risk of the thread exiting during the 2508 // operation. 2509 // 2510 // Note: The Threads_lock is currently more widely used than we 2511 // would like. We are actively migrating Threads_lock uses to other 2512 // mechanisms in order to reduce Threads_lock contention. 2513 2514 int Threads::_number_of_threads = 0; 2515 int Threads::_number_of_non_daemon_threads = 0; 2516 int Threads::_return_code = 0; 2517 uintx Threads::_thread_claim_token = 1; // Never zero. 2518 size_t JavaThread::_stack_size_at_create = 0; 2519 2520 #ifdef ASSERT 2521 bool Threads::_vm_complete = false; 2522 #endif 2523 2524 static inline void *prefetch_and_load_ptr(void **addr, intx prefetch_interval) { 2525 Prefetch::read((void*)addr, prefetch_interval); 2526 return *addr; 2527 } 2528 2529 // Possibly the ugliest for loop the world has seen. C++ does not allow 2530 // multiple types in the declaration section of the for loop. In this case 2531 // we are only dealing with pointers and hence can cast them. It looks ugly 2532 // but macros are ugly and therefore it's fine to make things absurdly ugly. 2533 #define DO_JAVA_THREADS(LIST, X) \ 2534 for (JavaThread *MACRO_scan_interval = (JavaThread*)(uintptr_t)PrefetchScanIntervalInBytes, \ 2535 *MACRO_list = (JavaThread*)(LIST), \ 2536 **MACRO_end = ((JavaThread**)((ThreadsList*)MACRO_list)->threads()) + ((ThreadsList*)MACRO_list)->length(), \ 2537 **MACRO_current_p = (JavaThread**)((ThreadsList*)MACRO_list)->threads(), \ 2538 *X = (JavaThread*)prefetch_and_load_ptr((void**)MACRO_current_p, (intx)MACRO_scan_interval); \ 2539 MACRO_current_p != MACRO_end; \ 2540 MACRO_current_p++, \ 2541 X = (JavaThread*)prefetch_and_load_ptr((void**)MACRO_current_p, (intx)MACRO_scan_interval)) 2542 2543 // All JavaThreads 2544 #define ALL_JAVA_THREADS(X) DO_JAVA_THREADS(ThreadsSMRSupport::get_java_thread_list(), X) 2545 2546 // All NonJavaThreads (i.e., every non-JavaThread in the system). 2547 void Threads::non_java_threads_do(ThreadClosure* tc) { 2548 NoSafepointVerifier nsv; 2549 for (NonJavaThread::Iterator njti; !njti.end(); njti.step()) { 2550 tc->do_thread(njti.current()); 2551 } 2552 } 2553 2554 // All JavaThreads 2555 void Threads::java_threads_do(ThreadClosure* tc) { 2556 assert_locked_or_safepoint(Threads_lock); 2557 // ALL_JAVA_THREADS iterates through all JavaThreads. 2558 ALL_JAVA_THREADS(p) { 2559 tc->do_thread(p); 2560 } 2561 } 2562 2563 void Threads::java_threads_and_vm_thread_do(ThreadClosure* tc) { 2564 assert_locked_or_safepoint(Threads_lock); 2565 java_threads_do(tc); 2566 tc->do_thread(VMThread::vm_thread()); 2567 } 2568 2569 // All JavaThreads + all non-JavaThreads (i.e., every thread in the system). 2570 void Threads::threads_do(ThreadClosure* tc) { 2571 assert_locked_or_safepoint(Threads_lock); 2572 java_threads_do(tc); 2573 non_java_threads_do(tc); 2574 } 2575 2576 void Threads::possibly_parallel_threads_do(bool is_par, ThreadClosure* tc) { 2577 uintx claim_token = Threads::thread_claim_token(); 2578 ALL_JAVA_THREADS(p) { 2579 if (p->claim_threads_do(is_par, claim_token)) { 2580 tc->do_thread(p); 2581 } 2582 } 2583 VMThread* vmt = VMThread::vm_thread(); 2584 if (vmt->claim_threads_do(is_par, claim_token)) { 2585 tc->do_thread(vmt); 2586 } 2587 } 2588 2589 // The system initialization in the library has three phases. 2590 // 2591 // Phase 1: java.lang.System class initialization 2592 // java.lang.System is a primordial class loaded and initialized 2593 // by the VM early during startup. java.lang.System.<clinit> 2594 // only does registerNatives and keeps the rest of the class 2595 // initialization work later until thread initialization completes. 2596 // 2597 // System.initPhase1 initializes the system properties, the static 2598 // fields in, out, and err. Set up java signal handlers, OS-specific 2599 // system settings, and thread group of the main thread. 2600 static void call_initPhase1(TRAPS) { 2601 Klass* klass = vmClasses::System_klass(); 2602 JavaValue result(T_VOID); 2603 JavaCalls::call_static(&result, klass, vmSymbols::initPhase1_name(), 2604 vmSymbols::void_method_signature(), CHECK); 2605 } 2606 2607 // Phase 2. Module system initialization 2608 // This will initialize the module system. Only java.base classes 2609 // can be loaded until phase 2 completes. 2610 // 2611 // Call System.initPhase2 after the compiler initialization and jsr292 2612 // classes get initialized because module initialization runs a lot of java 2613 // code, that for performance reasons, should be compiled. Also, this will 2614 // enable the startup code to use lambda and other language features in this 2615 // phase and onward. 2616 // 2617 // After phase 2, The VM will begin search classes from -Xbootclasspath/a. 2618 static void call_initPhase2(TRAPS) { 2619 TraceTime timer("Initialize module system", TRACETIME_LOG(Info, startuptime)); 2620 2621 Klass* klass = vmClasses::System_klass(); 2622 2623 JavaValue result(T_INT); 2624 JavaCallArguments args; 2625 args.push_int(DisplayVMOutputToStderr); 2626 args.push_int(log_is_enabled(Debug, init)); // print stack trace if exception thrown 2627 JavaCalls::call_static(&result, klass, vmSymbols::initPhase2_name(), 2628 vmSymbols::boolean_boolean_int_signature(), &args, CHECK); 2629 if (result.get_jint() != JNI_OK) { 2630 vm_exit_during_initialization(); // no message or exception 2631 } 2632 2633 universe_post_module_init(); 2634 } 2635 2636 // Phase 3. final setup - set security manager, system class loader and TCCL 2637 // 2638 // This will instantiate and set the security manager, set the system class 2639 // loader as well as the thread context class loader. The security manager 2640 // and system class loader may be a custom class loaded from -Xbootclasspath/a, 2641 // other modules or the application's classpath. 2642 static void call_initPhase3(TRAPS) { 2643 Klass* klass = vmClasses::System_klass(); 2644 JavaValue result(T_VOID); 2645 JavaCalls::call_static(&result, klass, vmSymbols::initPhase3_name(), 2646 vmSymbols::void_method_signature(), CHECK); 2647 } 2648 2649 void Threads::initialize_java_lang_classes(JavaThread* main_thread, TRAPS) { 2650 TraceTime timer("Initialize java.lang classes", TRACETIME_LOG(Info, startuptime)); 2651 2652 if (EagerXrunInit && Arguments::init_libraries_at_startup()) { 2653 create_vm_init_libraries(); 2654 } 2655 2656 initialize_class(vmSymbols::java_lang_String(), CHECK); 2657 2658 // Inject CompactStrings value after the static initializers for String ran. 2659 java_lang_String::set_compact_strings(CompactStrings); 2660 2661 // Initialize java_lang.System (needed before creating the thread) 2662 initialize_class(vmSymbols::java_lang_System(), CHECK); 2663 // The VM creates & returns objects of this class. Make sure it's initialized. 2664 initialize_class(vmSymbols::java_lang_Class(), CHECK); 2665 initialize_class(vmSymbols::java_lang_ThreadGroup(), CHECK); 2666 Handle thread_group = create_initial_thread_group(CHECK); 2667 Universe::set_main_thread_group(thread_group()); 2668 initialize_class(vmSymbols::java_lang_Thread(), CHECK); 2669 create_initial_thread(thread_group, main_thread, CHECK); 2670 2671 // The VM creates objects of this class. 2672 initialize_class(vmSymbols::java_lang_Module(), CHECK); 2673 2674 #ifdef ASSERT 2675 InstanceKlass *k = vmClasses::UnsafeConstants_klass(); 2676 assert(k->is_not_initialized(), "UnsafeConstants should not already be initialized"); 2677 #endif 2678 2679 // initialize the hardware-specific constants needed by Unsafe 2680 initialize_class(vmSymbols::jdk_internal_misc_UnsafeConstants(), CHECK); 2681 jdk_internal_misc_UnsafeConstants::set_unsafe_constants(); 2682 2683 // The VM preresolves methods to these classes. Make sure that they get initialized 2684 initialize_class(vmSymbols::java_lang_reflect_Method(), CHECK); 2685 initialize_class(vmSymbols::java_lang_ref_Finalizer(), CHECK); 2686 2687 // Phase 1 of the system initialization in the library, java.lang.System class initialization 2688 call_initPhase1(CHECK); 2689 2690 // Get the Java runtime name, version, and vendor info after java.lang.System is initialized. 2691 // Some values are actually configure-time constants but some can be set via the jlink tool and 2692 // so must be read dynamically. We treat them all the same. 2693 InstanceKlass* ik = SystemDictionary::find_instance_klass(vmSymbols::java_lang_VersionProps(), 2694 Handle(), Handle()); 2695 { 2696 ResourceMark rm(main_thread); 2697 JDK_Version::set_java_version(get_java_version_info(ik, vmSymbols::java_version_name())); 2698 2699 JDK_Version::set_runtime_name(get_java_version_info(ik, vmSymbols::java_runtime_name_name())); 2700 2701 JDK_Version::set_runtime_version(get_java_version_info(ik, vmSymbols::java_runtime_version_name())); 2702 2703 JDK_Version::set_runtime_vendor_version(get_java_version_info(ik, vmSymbols::java_runtime_vendor_version_name())); 2704 2705 JDK_Version::set_runtime_vendor_vm_bug_url(get_java_version_info(ik, vmSymbols::java_runtime_vendor_vm_bug_url_name())); 2706 } 2707 2708 // an instance of OutOfMemory exception has been allocated earlier 2709 initialize_class(vmSymbols::java_lang_OutOfMemoryError(), CHECK); 2710 initialize_class(vmSymbols::java_lang_NullPointerException(), CHECK); 2711 initialize_class(vmSymbols::java_lang_ClassCastException(), CHECK); 2712 initialize_class(vmSymbols::java_lang_ArrayStoreException(), CHECK); 2713 initialize_class(vmSymbols::java_lang_ArithmeticException(), CHECK); 2714 initialize_class(vmSymbols::java_lang_StackOverflowError(), CHECK); 2715 initialize_class(vmSymbols::java_lang_IllegalMonitorStateException(), CHECK); 2716 initialize_class(vmSymbols::java_lang_IllegalArgumentException(), CHECK); 2717 } 2718 2719 void Threads::initialize_jsr292_core_classes(TRAPS) { 2720 TraceTime timer("Initialize java.lang.invoke classes", TRACETIME_LOG(Info, startuptime)); 2721 2722 initialize_class(vmSymbols::java_lang_invoke_MethodHandle(), CHECK); 2723 initialize_class(vmSymbols::java_lang_invoke_ResolvedMethodName(), CHECK); 2724 initialize_class(vmSymbols::java_lang_invoke_MemberName(), CHECK); 2725 initialize_class(vmSymbols::java_lang_invoke_MethodHandleNatives(), CHECK); 2726 } 2727 2728 jint Threads::create_vm(JavaVMInitArgs* args, bool* canTryAgain) { 2729 extern void JDK_Version_init(); 2730 2731 // Preinitialize version info. 2732 VM_Version::early_initialize(); 2733 2734 // Check version 2735 if (!is_supported_jni_version(args->version)) return JNI_EVERSION; 2736 2737 // Initialize library-based TLS 2738 ThreadLocalStorage::init(); 2739 2740 // Initialize the output stream module 2741 ostream_init(); 2742 2743 // Process java launcher properties. 2744 Arguments::process_sun_java_launcher_properties(args); 2745 2746 // Initialize the os module 2747 os::init(); 2748 2749 MACOS_AARCH64_ONLY(os::current_thread_enable_wx(WXWrite)); 2750 2751 // Record VM creation timing statistics 2752 TraceVmCreationTime create_vm_timer; 2753 create_vm_timer.start(); 2754 2755 // Initialize system properties. 2756 Arguments::init_system_properties(); 2757 2758 // So that JDK version can be used as a discriminator when parsing arguments 2759 JDK_Version_init(); 2760 2761 // Update/Initialize System properties after JDK version number is known 2762 Arguments::init_version_specific_system_properties(); 2763 2764 // Make sure to initialize log configuration *before* parsing arguments 2765 LogConfiguration::initialize(create_vm_timer.begin_time()); 2766 2767 // Parse arguments 2768 // Note: this internally calls os::init_container_support() 2769 jint parse_result = Arguments::parse(args); 2770 if (parse_result != JNI_OK) return parse_result; 2771 2772 #if INCLUDE_NMT 2773 // Initialize NMT right after argument parsing to keep the pre-NMT-init window small. 2774 MemTracker::initialize(); 2775 #endif // INCLUDE_NMT 2776 2777 os::init_before_ergo(); 2778 2779 jint ergo_result = Arguments::apply_ergo(); 2780 if (ergo_result != JNI_OK) return ergo_result; 2781 2782 // Final check of all ranges after ergonomics which may change values. 2783 if (!JVMFlagLimit::check_all_ranges()) { 2784 return JNI_EINVAL; 2785 } 2786 2787 // Final check of all 'AfterErgo' constraints after ergonomics which may change values. 2788 bool constraint_result = JVMFlagLimit::check_all_constraints(JVMFlagConstraintPhase::AfterErgo); 2789 if (!constraint_result) { 2790 return JNI_EINVAL; 2791 } 2792 2793 if (PauseAtStartup) { 2794 os::pause(); 2795 } 2796 2797 HOTSPOT_VM_INIT_BEGIN(); 2798 2799 // Timing (must come after argument parsing) 2800 TraceTime timer("Create VM", TRACETIME_LOG(Info, startuptime)); 2801 2802 // Initialize the os module after parsing the args 2803 jint os_init_2_result = os::init_2(); 2804 if (os_init_2_result != JNI_OK) return os_init_2_result; 2805 2806 #ifdef CAN_SHOW_REGISTERS_ON_ASSERT 2807 // Initialize assert poison page mechanism. 2808 if (ShowRegistersOnAssert) { 2809 initialize_assert_poison(); 2810 } 2811 #endif // CAN_SHOW_REGISTERS_ON_ASSERT 2812 2813 SafepointMechanism::initialize(); 2814 2815 jint adjust_after_os_result = Arguments::adjust_after_os(); 2816 if (adjust_after_os_result != JNI_OK) return adjust_after_os_result; 2817 2818 // Initialize output stream logging 2819 ostream_init_log(); 2820 2821 // Convert -Xrun to -agentlib: if there is no JVM_OnLoad 2822 // Must be before create_vm_init_agents() 2823 if (Arguments::init_libraries_at_startup()) { 2824 convert_vm_init_libraries_to_agents(); 2825 } 2826 2827 // Launch -agentlib/-agentpath and converted -Xrun agents 2828 if (Arguments::init_agents_at_startup()) { 2829 create_vm_init_agents(); 2830 } 2831 2832 // Initialize Threads state 2833 _number_of_threads = 0; 2834 _number_of_non_daemon_threads = 0; 2835 2836 // Initialize global data structures and create system classes in heap 2837 vm_init_globals(); 2838 2839 #if INCLUDE_JVMCI 2840 if (JVMCICounterSize > 0) { 2841 JavaThread::_jvmci_old_thread_counters = NEW_C_HEAP_ARRAY(jlong, JVMCICounterSize, mtJVMCI); 2842 memset(JavaThread::_jvmci_old_thread_counters, 0, sizeof(jlong) * JVMCICounterSize); 2843 } else { 2844 JavaThread::_jvmci_old_thread_counters = NULL; 2845 } 2846 #endif // INCLUDE_JVMCI 2847 2848 // Initialize OopStorage for threadObj 2849 _thread_oop_storage = OopStorageSet::create_strong("Thread OopStorage", mtThread); 2850 2851 // Attach the main thread to this os thread 2852 JavaThread* main_thread = new JavaThread(); 2853 main_thread->set_thread_state(_thread_in_vm); 2854 main_thread->initialize_thread_current(); 2855 // must do this before set_active_handles 2856 main_thread->record_stack_base_and_size(); 2857 main_thread->register_thread_stack_with_NMT(); 2858 main_thread->set_active_handles(JNIHandleBlock::allocate_block()); 2859 MACOS_AARCH64_ONLY(main_thread->init_wx()); 2860 2861 if (!main_thread->set_as_starting_thread()) { 2862 vm_shutdown_during_initialization( 2863 "Failed necessary internal allocation. Out of swap space"); 2864 main_thread->smr_delete(); 2865 *canTryAgain = false; // don't let caller call JNI_CreateJavaVM again 2866 return JNI_ENOMEM; 2867 } 2868 2869 // Enable guard page *after* os::create_main_thread(), otherwise it would 2870 // crash Linux VM, see notes in os_linux.cpp. 2871 main_thread->stack_overflow_state()->create_stack_guard_pages(); 2872 2873 // Initialize Java-Level synchronization subsystem 2874 ObjectMonitor::Initialize(); 2875 ObjectSynchronizer::initialize(); 2876 2877 // Initialize global modules 2878 jint status = init_globals(); 2879 if (status != JNI_OK) { 2880 main_thread->smr_delete(); 2881 *canTryAgain = false; // don't let caller call JNI_CreateJavaVM again 2882 return status; 2883 } 2884 2885 JFR_ONLY(Jfr::on_create_vm_1();) 2886 2887 // Should be done after the heap is fully created 2888 main_thread->cache_global_variables(); 2889 2890 { MutexLocker mu(Threads_lock); 2891 Threads::add(main_thread); 2892 } 2893 2894 // Any JVMTI raw monitors entered in onload will transition into 2895 // real raw monitor. VM is setup enough here for raw monitor enter. 2896 JvmtiExport::transition_pending_onload_raw_monitors(); 2897 2898 // Create the VMThread 2899 { TraceTime timer("Start VMThread", TRACETIME_LOG(Info, startuptime)); 2900 2901 VMThread::create(); 2902 Thread* vmthread = VMThread::vm_thread(); 2903 2904 if (!os::create_thread(vmthread, os::vm_thread)) { 2905 vm_exit_during_initialization("Cannot create VM thread. " 2906 "Out of system resources."); 2907 } 2908 2909 // Wait for the VM thread to become ready, and VMThread::run to initialize 2910 // Monitors can have spurious returns, must always check another state flag 2911 { 2912 MonitorLocker ml(Notify_lock); 2913 os::start_thread(vmthread); 2914 while (vmthread->active_handles() == NULL) { 2915 ml.wait(); 2916 } 2917 } 2918 } 2919 2920 assert(Universe::is_fully_initialized(), "not initialized"); 2921 if (VerifyDuringStartup) { 2922 // Make sure we're starting with a clean slate. 2923 VM_Verify verify_op; 2924 VMThread::execute(&verify_op); 2925 } 2926 2927 // We need this to update the java.vm.info property in case any flags used 2928 // to initially define it have been changed. This is needed for both CDS 2929 // since UseSharedSpaces may be changed after java.vm.info 2930 // is initially computed. See Abstract_VM_Version::vm_info_string(). 2931 // This update must happen before we initialize the java classes, but 2932 // after any initialization logic that might modify the flags. 2933 Arguments::update_vm_info_property(VM_Version::vm_info_string()); 2934 2935 JavaThread* THREAD = JavaThread::current(); // For exception macros. 2936 HandleMark hm(THREAD); 2937 2938 // Always call even when there are not JVMTI environments yet, since environments 2939 // may be attached late and JVMTI must track phases of VM execution 2940 JvmtiExport::enter_early_start_phase(); 2941 2942 // Notify JVMTI agents that VM has started (JNI is up) - nop if no agents. 2943 JvmtiExport::post_early_vm_start(); 2944 2945 initialize_java_lang_classes(main_thread, CHECK_JNI_ERR); 2946 2947 quicken_jni_functions(); 2948 2949 // No more stub generation allowed after that point. 2950 StubCodeDesc::freeze(); 2951 2952 // Set flag that basic initialization has completed. Used by exceptions and various 2953 // debug stuff, that does not work until all basic classes have been initialized. 2954 set_init_completed(); 2955 2956 LogConfiguration::post_initialize(); 2957 Metaspace::post_initialize(); 2958 2959 HOTSPOT_VM_INIT_END(); 2960 2961 // record VM initialization completion time 2962 #if INCLUDE_MANAGEMENT 2963 Management::record_vm_init_completed(); 2964 #endif // INCLUDE_MANAGEMENT 2965 2966 // Signal Dispatcher needs to be started before VMInit event is posted 2967 os::initialize_jdk_signal_support(CHECK_JNI_ERR); 2968 2969 // Start Attach Listener if +StartAttachListener or it can't be started lazily 2970 if (!DisableAttachMechanism) { 2971 AttachListener::vm_start(); 2972 if (StartAttachListener || AttachListener::init_at_startup()) { 2973 AttachListener::init(); 2974 } 2975 } 2976 2977 // Launch -Xrun agents 2978 // Must be done in the JVMTI live phase so that for backward compatibility the JDWP 2979 // back-end can launch with -Xdebug -Xrunjdwp. 2980 if (!EagerXrunInit && Arguments::init_libraries_at_startup()) { 2981 create_vm_init_libraries(); 2982 } 2983 2984 Chunk::start_chunk_pool_cleaner_task(); 2985 2986 // Start the service thread 2987 // The service thread enqueues JVMTI deferred events and does various hashtable 2988 // and other cleanups. Needs to start before the compilers start posting events. 2989 ServiceThread::initialize(); 2990 2991 // Start the monitor deflation thread: 2992 MonitorDeflationThread::initialize(); 2993 2994 // initialize compiler(s) 2995 #if defined(COMPILER1) || COMPILER2_OR_JVMCI 2996 #if INCLUDE_JVMCI 2997 bool force_JVMCI_intialization = false; 2998 if (EnableJVMCI) { 2999 // Initialize JVMCI eagerly when it is explicitly requested. 3000 // Or when JVMCILibDumpJNIConfig or JVMCIPrintProperties is enabled. 3001 force_JVMCI_intialization = EagerJVMCI || JVMCIPrintProperties || JVMCILibDumpJNIConfig; 3002 3003 if (!force_JVMCI_intialization) { 3004 // 8145270: Force initialization of JVMCI runtime otherwise requests for blocking 3005 // compilations via JVMCI will not actually block until JVMCI is initialized. 3006 force_JVMCI_intialization = UseJVMCICompiler && (!UseInterpreter || !BackgroundCompilation); 3007 } 3008 } 3009 #endif 3010 CompileBroker::compilation_init_phase1(CHECK_JNI_ERR); 3011 // Postpone completion of compiler initialization to after JVMCI 3012 // is initialized to avoid timeouts of blocking compilations. 3013 if (JVMCI_ONLY(!force_JVMCI_intialization) NOT_JVMCI(true)) { 3014 CompileBroker::compilation_init_phase2(); 3015 } 3016 #endif 3017 3018 // Pre-initialize some JSR292 core classes to avoid deadlock during class loading. 3019 // It is done after compilers are initialized, because otherwise compilations of 3020 // signature polymorphic MH intrinsics can be missed 3021 // (see SystemDictionary::find_method_handle_intrinsic). 3022 initialize_jsr292_core_classes(CHECK_JNI_ERR); 3023 3024 // This will initialize the module system. Only java.base classes can be 3025 // loaded until phase 2 completes 3026 call_initPhase2(CHECK_JNI_ERR); 3027 3028 JFR_ONLY(Jfr::on_create_vm_2();) 3029 3030 // Always call even when there are not JVMTI environments yet, since environments 3031 // may be attached late and JVMTI must track phases of VM execution 3032 JvmtiExport::enter_start_phase(); 3033 3034 // Notify JVMTI agents that VM has started (JNI is up) - nop if no agents. 3035 JvmtiExport::post_vm_start(); 3036 3037 // Final system initialization including security manager and system class loader 3038 call_initPhase3(CHECK_JNI_ERR); 3039 3040 // cache the system and platform class loaders 3041 SystemDictionary::compute_java_loaders(CHECK_JNI_ERR); 3042 3043 #if INCLUDE_CDS 3044 // capture the module path info from the ModuleEntryTable 3045 ClassLoader::initialize_module_path(THREAD); 3046 if (HAS_PENDING_EXCEPTION) { 3047 java_lang_Throwable::print(PENDING_EXCEPTION, tty); 3048 vm_exit_during_initialization("ClassLoader::initialize_module_path() failed unexpectedly"); 3049 } 3050 #endif 3051 3052 #if INCLUDE_JVMCI 3053 if (force_JVMCI_intialization) { 3054 JVMCI::initialize_compiler(CHECK_JNI_ERR); 3055 CompileBroker::compilation_init_phase2(); 3056 } 3057 #endif 3058 3059 // Always call even when there are not JVMTI environments yet, since environments 3060 // may be attached late and JVMTI must track phases of VM execution 3061 JvmtiExport::enter_live_phase(); 3062 3063 // Make perfmemory accessible 3064 PerfMemory::set_accessible(true); 3065 3066 // Notify JVMTI agents that VM initialization is complete - nop if no agents. 3067 JvmtiExport::post_vm_initialized(); 3068 3069 JFR_ONLY(Jfr::on_create_vm_3();) 3070 3071 #if INCLUDE_MANAGEMENT 3072 Management::initialize(THREAD); 3073 3074 if (HAS_PENDING_EXCEPTION) { 3075 // management agent fails to start possibly due to 3076 // configuration problem and is responsible for printing 3077 // stack trace if appropriate. Simply exit VM. 3078 vm_exit(1); 3079 } 3080 #endif // INCLUDE_MANAGEMENT 3081 3082 StatSampler::engage(); 3083 if (CheckJNICalls) JniPeriodicChecker::engage(); 3084 3085 BiasedLocking::init(); 3086 3087 #if INCLUDE_RTM_OPT 3088 RTMLockingCounters::init(); 3089 #endif 3090 3091 call_postVMInitHook(THREAD); 3092 // The Java side of PostVMInitHook.run must deal with all 3093 // exceptions and provide means of diagnosis. 3094 if (HAS_PENDING_EXCEPTION) { 3095 CLEAR_PENDING_EXCEPTION; 3096 } 3097 3098 { 3099 MutexLocker ml(PeriodicTask_lock); 3100 // Make sure the WatcherThread can be started by WatcherThread::start() 3101 // or by dynamic enrollment. 3102 WatcherThread::make_startable(); 3103 // Start up the WatcherThread if there are any periodic tasks 3104 // NOTE: All PeriodicTasks should be registered by now. If they 3105 // aren't, late joiners might appear to start slowly (we might 3106 // take a while to process their first tick). 3107 if (PeriodicTask::num_tasks() > 0) { 3108 WatcherThread::start(); 3109 } 3110 } 3111 3112 create_vm_timer.end(); 3113 #ifdef ASSERT 3114 _vm_complete = true; 3115 #endif 3116 3117 if (DumpSharedSpaces) { 3118 MetaspaceShared::preload_and_dump(); 3119 ShouldNotReachHere(); 3120 } 3121 3122 return JNI_OK; 3123 } 3124 3125 // type for the Agent_OnLoad and JVM_OnLoad entry points 3126 extern "C" { 3127 typedef jint (JNICALL *OnLoadEntry_t)(JavaVM *, char *, void *); 3128 } 3129 // Find a command line agent library and return its entry point for 3130 // -agentlib: -agentpath: -Xrun 3131 // num_symbol_entries must be passed-in since only the caller knows the number of symbols in the array. 3132 static OnLoadEntry_t lookup_on_load(AgentLibrary* agent, 3133 const char *on_load_symbols[], 3134 size_t num_symbol_entries) { 3135 OnLoadEntry_t on_load_entry = NULL; 3136 void *library = NULL; 3137 3138 if (!agent->valid()) { 3139 char buffer[JVM_MAXPATHLEN]; 3140 char ebuf[1024] = ""; 3141 const char *name = agent->name(); 3142 const char *msg = "Could not find agent library "; 3143 3144 // First check to see if agent is statically linked into executable 3145 if (os::find_builtin_agent(agent, on_load_symbols, num_symbol_entries)) { 3146 library = agent->os_lib(); 3147 } else if (agent->is_absolute_path()) { 3148 library = os::dll_load(name, ebuf, sizeof ebuf); 3149 if (library == NULL) { 3150 const char *sub_msg = " in absolute path, with error: "; 3151 size_t len = strlen(msg) + strlen(name) + strlen(sub_msg) + strlen(ebuf) + 1; 3152 char *buf = NEW_C_HEAP_ARRAY(char, len, mtThread); 3153 jio_snprintf(buf, len, "%s%s%s%s", msg, name, sub_msg, ebuf); 3154 // If we can't find the agent, exit. 3155 vm_exit_during_initialization(buf, NULL); 3156 FREE_C_HEAP_ARRAY(char, buf); 3157 } 3158 } else { 3159 // Try to load the agent from the standard dll directory 3160 if (os::dll_locate_lib(buffer, sizeof(buffer), Arguments::get_dll_dir(), 3161 name)) { 3162 library = os::dll_load(buffer, ebuf, sizeof ebuf); 3163 } 3164 if (library == NULL) { // Try the library path directory. 3165 if (os::dll_build_name(buffer, sizeof(buffer), name)) { 3166 library = os::dll_load(buffer, ebuf, sizeof ebuf); 3167 } 3168 if (library == NULL) { 3169 const char *sub_msg = " on the library path, with error: "; 3170 const char *sub_msg2 = "\nModule java.instrument may be missing from runtime image."; 3171 3172 size_t len = strlen(msg) + strlen(name) + strlen(sub_msg) + 3173 strlen(ebuf) + strlen(sub_msg2) + 1; 3174 char *buf = NEW_C_HEAP_ARRAY(char, len, mtThread); 3175 if (!agent->is_instrument_lib()) { 3176 jio_snprintf(buf, len, "%s%s%s%s", msg, name, sub_msg, ebuf); 3177 } else { 3178 jio_snprintf(buf, len, "%s%s%s%s%s", msg, name, sub_msg, ebuf, sub_msg2); 3179 } 3180 // If we can't find the agent, exit. 3181 vm_exit_during_initialization(buf, NULL); 3182 FREE_C_HEAP_ARRAY(char, buf); 3183 } 3184 } 3185 } 3186 agent->set_os_lib(library); 3187 agent->set_valid(); 3188 } 3189 3190 // Find the OnLoad function. 3191 on_load_entry = 3192 CAST_TO_FN_PTR(OnLoadEntry_t, os::find_agent_function(agent, 3193 false, 3194 on_load_symbols, 3195 num_symbol_entries)); 3196 return on_load_entry; 3197 } 3198 3199 // Find the JVM_OnLoad entry point 3200 static OnLoadEntry_t lookup_jvm_on_load(AgentLibrary* agent) { 3201 const char *on_load_symbols[] = JVM_ONLOAD_SYMBOLS; 3202 return lookup_on_load(agent, on_load_symbols, sizeof(on_load_symbols) / sizeof(char*)); 3203 } 3204 3205 // Find the Agent_OnLoad entry point 3206 static OnLoadEntry_t lookup_agent_on_load(AgentLibrary* agent) { 3207 const char *on_load_symbols[] = AGENT_ONLOAD_SYMBOLS; 3208 return lookup_on_load(agent, on_load_symbols, sizeof(on_load_symbols) / sizeof(char*)); 3209 } 3210 3211 // For backwards compatibility with -Xrun 3212 // Convert libraries with no JVM_OnLoad, but which have Agent_OnLoad to be 3213 // treated like -agentpath: 3214 // Must be called before agent libraries are created 3215 void Threads::convert_vm_init_libraries_to_agents() { 3216 AgentLibrary* agent; 3217 AgentLibrary* next; 3218 3219 for (agent = Arguments::libraries(); agent != NULL; agent = next) { 3220 next = agent->next(); // cache the next agent now as this agent may get moved off this list 3221 OnLoadEntry_t on_load_entry = lookup_jvm_on_load(agent); 3222 3223 // If there is an JVM_OnLoad function it will get called later, 3224 // otherwise see if there is an Agent_OnLoad 3225 if (on_load_entry == NULL) { 3226 on_load_entry = lookup_agent_on_load(agent); 3227 if (on_load_entry != NULL) { 3228 // switch it to the agent list -- so that Agent_OnLoad will be called, 3229 // JVM_OnLoad won't be attempted and Agent_OnUnload will 3230 Arguments::convert_library_to_agent(agent); 3231 } else { 3232 vm_exit_during_initialization("Could not find JVM_OnLoad or Agent_OnLoad function in the library", agent->name()); 3233 } 3234 } 3235 } 3236 } 3237 3238 // Create agents for -agentlib: -agentpath: and converted -Xrun 3239 // Invokes Agent_OnLoad 3240 // Called very early -- before JavaThreads exist 3241 void Threads::create_vm_init_agents() { 3242 extern struct JavaVM_ main_vm; 3243 AgentLibrary* agent; 3244 3245 JvmtiExport::enter_onload_phase(); 3246 3247 for (agent = Arguments::agents(); agent != NULL; agent = agent->next()) { 3248 // CDS dumping does not support native JVMTI agent. 3249 // CDS dumping supports Java agent if the AllowArchivingWithJavaAgent diagnostic option is specified. 3250 if (Arguments::is_dumping_archive()) { 3251 if(!agent->is_instrument_lib()) { 3252 vm_exit_during_cds_dumping("CDS dumping does not support native JVMTI agent, name", agent->name()); 3253 } else if (!AllowArchivingWithJavaAgent) { 3254 vm_exit_during_cds_dumping( 3255 "Must enable AllowArchivingWithJavaAgent in order to run Java agent during CDS dumping"); 3256 } 3257 } 3258 3259 OnLoadEntry_t on_load_entry = lookup_agent_on_load(agent); 3260 3261 if (on_load_entry != NULL) { 3262 // Invoke the Agent_OnLoad function 3263 jint err = (*on_load_entry)(&main_vm, agent->options(), NULL); 3264 if (err != JNI_OK) { 3265 vm_exit_during_initialization("agent library failed to init", agent->name()); 3266 } 3267 } else { 3268 vm_exit_during_initialization("Could not find Agent_OnLoad function in the agent library", agent->name()); 3269 } 3270 } 3271 3272 JvmtiExport::enter_primordial_phase(); 3273 } 3274 3275 extern "C" { 3276 typedef void (JNICALL *Agent_OnUnload_t)(JavaVM *); 3277 } 3278 3279 void Threads::shutdown_vm_agents() { 3280 // Send any Agent_OnUnload notifications 3281 const char *on_unload_symbols[] = AGENT_ONUNLOAD_SYMBOLS; 3282 size_t num_symbol_entries = ARRAY_SIZE(on_unload_symbols); 3283 extern struct JavaVM_ main_vm; 3284 for (AgentLibrary* agent = Arguments::agents(); agent != NULL; agent = agent->next()) { 3285 3286 // Find the Agent_OnUnload function. 3287 Agent_OnUnload_t unload_entry = CAST_TO_FN_PTR(Agent_OnUnload_t, 3288 os::find_agent_function(agent, 3289 false, 3290 on_unload_symbols, 3291 num_symbol_entries)); 3292 3293 // Invoke the Agent_OnUnload function 3294 if (unload_entry != NULL) { 3295 JavaThread* thread = JavaThread::current(); 3296 ThreadToNativeFromVM ttn(thread); 3297 HandleMark hm(thread); 3298 (*unload_entry)(&main_vm); 3299 } 3300 } 3301 } 3302 3303 // Called for after the VM is initialized for -Xrun libraries which have not been converted to agent libraries 3304 // Invokes JVM_OnLoad 3305 void Threads::create_vm_init_libraries() { 3306 extern struct JavaVM_ main_vm; 3307 AgentLibrary* agent; 3308 3309 for (agent = Arguments::libraries(); agent != NULL; agent = agent->next()) { 3310 OnLoadEntry_t on_load_entry = lookup_jvm_on_load(agent); 3311 3312 if (on_load_entry != NULL) { 3313 // Invoke the JVM_OnLoad function 3314 JavaThread* thread = JavaThread::current(); 3315 ThreadToNativeFromVM ttn(thread); 3316 HandleMark hm(thread); 3317 jint err = (*on_load_entry)(&main_vm, agent->options(), NULL); 3318 if (err != JNI_OK) { 3319 vm_exit_during_initialization("-Xrun library failed to init", agent->name()); 3320 } 3321 } else { 3322 vm_exit_during_initialization("Could not find JVM_OnLoad function in -Xrun library", agent->name()); 3323 } 3324 } 3325 } 3326 3327 3328 // Last thread running calls java.lang.Shutdown.shutdown() 3329 void JavaThread::invoke_shutdown_hooks() { 3330 HandleMark hm(this); 3331 3332 // We could get here with a pending exception, if so clear it now or 3333 // it will cause MetaspaceShared::link_and_cleanup_shared_classes to 3334 // fail for dynamic dump. 3335 if (this->has_pending_exception()) { 3336 this->clear_pending_exception(); 3337 } 3338 3339 #if INCLUDE_CDS 3340 // Link all classes for dynamic CDS dumping before vm exit. 3341 // Same operation is being done in JVM_BeforeHalt for handling the 3342 // case where the application calls System.exit(). 3343 if (DynamicDumpSharedSpaces) { 3344 DynamicArchive::prepare_for_dynamic_dumping_at_exit(); 3345 } 3346 #endif 3347 3348 EXCEPTION_MARK; 3349 Klass* shutdown_klass = 3350 SystemDictionary::resolve_or_null(vmSymbols::java_lang_Shutdown(), 3351 THREAD); 3352 if (shutdown_klass != NULL) { 3353 // SystemDictionary::resolve_or_null will return null if there was 3354 // an exception. If we cannot load the Shutdown class, just don't 3355 // call Shutdown.shutdown() at all. This will mean the shutdown hooks 3356 // won't be run. Note that if a shutdown hook was registered, 3357 // the Shutdown class would have already been loaded 3358 // (Runtime.addShutdownHook will load it). 3359 JavaValue result(T_VOID); 3360 JavaCalls::call_static(&result, 3361 shutdown_klass, 3362 vmSymbols::shutdown_name(), 3363 vmSymbols::void_method_signature(), 3364 THREAD); 3365 } 3366 CLEAR_PENDING_EXCEPTION; 3367 } 3368 3369 // Threads::destroy_vm() is normally called from jni_DestroyJavaVM() when 3370 // the program falls off the end of main(). Another VM exit path is through 3371 // vm_exit() when the program calls System.exit() to return a value or when 3372 // there is a serious error in VM. The two shutdown paths are not exactly 3373 // the same, but they share Shutdown.shutdown() at Java level and before_exit() 3374 // and VM_Exit op at VM level. 3375 // 3376 // Shutdown sequence: 3377 // + Shutdown native memory tracking if it is on 3378 // + Wait until we are the last non-daemon thread to execute 3379 // <-- every thing is still working at this moment --> 3380 // + Call java.lang.Shutdown.shutdown(), which will invoke Java level 3381 // shutdown hooks 3382 // + Call before_exit(), prepare for VM exit 3383 // > run VM level shutdown hooks (they are registered through JVM_OnExit(), 3384 // currently the only user of this mechanism is File.deleteOnExit()) 3385 // > stop StatSampler, watcher thread, 3386 // post thread end and vm death events to JVMTI, 3387 // stop signal thread 3388 // + Call JavaThread::exit(), it will: 3389 // > release JNI handle blocks, remove stack guard pages 3390 // > remove this thread from Threads list 3391 // <-- no more Java code from this thread after this point --> 3392 // + Stop VM thread, it will bring the remaining VM to a safepoint and stop 3393 // the compiler threads at safepoint 3394 // <-- do not use anything that could get blocked by Safepoint --> 3395 // + Disable tracing at JNI/JVM barriers 3396 // + Set _vm_exited flag for threads that are still running native code 3397 // + Call exit_globals() 3398 // > deletes tty 3399 // > deletes PerfMemory resources 3400 // + Delete this thread 3401 // + Return to caller 3402 3403 void Threads::destroy_vm() { 3404 JavaThread* thread = JavaThread::current(); 3405 3406 #ifdef ASSERT 3407 _vm_complete = false; 3408 #endif 3409 // Wait until we are the last non-daemon thread to execute 3410 { 3411 MonitorLocker nu(Threads_lock); 3412 while (Threads::number_of_non_daemon_threads() > 1) 3413 // This wait should make safepoint checks, wait without a timeout. 3414 nu.wait(0); 3415 } 3416 3417 EventShutdown e; 3418 if (e.should_commit()) { 3419 e.set_reason("No remaining non-daemon Java threads"); 3420 e.commit(); 3421 } 3422 3423 // Hang forever on exit if we are reporting an error. 3424 if (ShowMessageBoxOnError && VMError::is_error_reported()) { 3425 os::infinite_sleep(); 3426 } 3427 os::wait_for_keypress_at_exit(); 3428 3429 // run Java level shutdown hooks 3430 thread->invoke_shutdown_hooks(); 3431 3432 before_exit(thread); 3433 3434 thread->exit(true); 3435 3436 // We are no longer on the main thread list but could still be in a 3437 // secondary list where another thread may try to interact with us. 3438 // So wait until all such interactions are complete before we bring 3439 // the VM to the termination safepoint. Normally this would be done 3440 // using thread->smr_delete() below where we delete the thread, but 3441 // we can't call that after the termination safepoint is active as 3442 // we will deadlock on the Threads_lock. Once all interactions are 3443 // complete it is safe to directly delete the thread at any time. 3444 ThreadsSMRSupport::wait_until_not_protected(thread); 3445 3446 // Stop VM thread. 3447 { 3448 // 4945125 The vm thread comes to a safepoint during exit. 3449 // GC vm_operations can get caught at the safepoint, and the 3450 // heap is unparseable if they are caught. Grab the Heap_lock 3451 // to prevent this. The GC vm_operations will not be able to 3452 // queue until after the vm thread is dead. After this point, 3453 // we'll never emerge out of the safepoint before the VM exits. 3454 // Assert that the thread is terminated so that acquiring the 3455 // Heap_lock doesn't cause the terminated thread to participate in 3456 // the safepoint protocol. 3457 3458 assert(thread->is_terminated(), "must be terminated here"); 3459 MutexLocker ml(Heap_lock); 3460 3461 VMThread::wait_for_vm_thread_exit(); 3462 assert(SafepointSynchronize::is_at_safepoint(), "VM thread should exit at Safepoint"); 3463 VMThread::destroy(); 3464 } 3465 3466 // Now, all Java threads are gone except daemon threads. Daemon threads 3467 // running Java code or in VM are stopped by the Safepoint. However, 3468 // daemon threads executing native code are still running. But they 3469 // will be stopped at native=>Java/VM barriers. Note that we can't 3470 // simply kill or suspend them, as it is inherently deadlock-prone. 3471 3472 VM_Exit::set_vm_exited(); 3473 3474 // Clean up ideal graph printers after the VMThread has started 3475 // the final safepoint which will block all the Compiler threads. 3476 // Note that this Thread has already logically exited so the 3477 // clean_up() function's use of a JavaThreadIteratorWithHandle 3478 // would be a problem except set_vm_exited() has remembered the 3479 // shutdown thread which is granted a policy exception. 3480 #if defined(COMPILER2) && !defined(PRODUCT) 3481 IdealGraphPrinter::clean_up(); 3482 #endif 3483 3484 notify_vm_shutdown(); 3485 3486 // exit_globals() will delete tty 3487 exit_globals(); 3488 3489 // Deleting the shutdown thread here is safe. See comment on 3490 // wait_until_not_protected() above. 3491 delete thread; 3492 3493 #if INCLUDE_JVMCI 3494 if (JVMCICounterSize > 0) { 3495 FREE_C_HEAP_ARRAY(jlong, JavaThread::_jvmci_old_thread_counters); 3496 } 3497 #endif 3498 3499 LogConfiguration::finalize(); 3500 } 3501 3502 3503 jboolean Threads::is_supported_jni_version_including_1_1(jint version) { 3504 if (version == JNI_VERSION_1_1) return JNI_TRUE; 3505 return is_supported_jni_version(version); 3506 } 3507 3508 3509 jboolean Threads::is_supported_jni_version(jint version) { 3510 if (version == JNI_VERSION_1_2) return JNI_TRUE; 3511 if (version == JNI_VERSION_1_4) return JNI_TRUE; 3512 if (version == JNI_VERSION_1_6) return JNI_TRUE; 3513 if (version == JNI_VERSION_1_8) return JNI_TRUE; 3514 if (version == JNI_VERSION_9) return JNI_TRUE; 3515 if (version == JNI_VERSION_10) return JNI_TRUE; 3516 return JNI_FALSE; 3517 } 3518 3519 3520 void Threads::add(JavaThread* p, bool force_daemon) { 3521 // The threads lock must be owned at this point 3522 assert(Threads_lock->owned_by_self(), "must have threads lock"); 3523 3524 BarrierSet::barrier_set()->on_thread_attach(p); 3525 3526 // Once a JavaThread is added to the Threads list, smr_delete() has 3527 // to be used to delete it. Otherwise we can just delete it directly. 3528 p->set_on_thread_list(); 3529 3530 _number_of_threads++; 3531 oop threadObj = p->threadObj(); 3532 bool daemon = true; 3533 // Bootstrapping problem: threadObj can be null for initial 3534 // JavaThread (or for threads attached via JNI) 3535 if ((!force_daemon) && !is_daemon((threadObj))) { 3536 _number_of_non_daemon_threads++; 3537 daemon = false; 3538 } 3539 3540 ThreadService::add_thread(p, daemon); 3541 3542 // Maintain fast thread list 3543 ThreadsSMRSupport::add_thread(p); 3544 3545 // Increase the ObjectMonitor ceiling for the new thread. 3546 ObjectSynchronizer::inc_in_use_list_ceiling(); 3547 3548 // Possible GC point. 3549 Events::log(p, "Thread added: " INTPTR_FORMAT, p2i(p)); 3550 3551 // Make new thread known to active EscapeBarrier 3552 EscapeBarrier::thread_added(p); 3553 } 3554 3555 void Threads::remove(JavaThread* p, bool is_daemon) { 3556 // Extra scope needed for Thread_lock, so we can check 3557 // that we do not remove thread without safepoint code notice 3558 { MonitorLocker ml(Threads_lock); 3559 3560 // BarrierSet state must be destroyed after the last thread transition 3561 // before the thread terminates. Thread transitions result in calls to 3562 // StackWatermarkSet::on_safepoint(), which performs GC processing, 3563 // requiring the GC state to be alive. 3564 BarrierSet::barrier_set()->on_thread_detach(p); 3565 3566 assert(ThreadsSMRSupport::get_java_thread_list()->includes(p), "p must be present"); 3567 3568 // Maintain fast thread list 3569 ThreadsSMRSupport::remove_thread(p); 3570 3571 _number_of_threads--; 3572 if (!is_daemon) { 3573 _number_of_non_daemon_threads--; 3574 3575 // Only one thread left, do a notify on the Threads_lock so a thread waiting 3576 // on destroy_vm will wake up. 3577 if (number_of_non_daemon_threads() == 1) { 3578 ml.notify_all(); 3579 } 3580 } 3581 ThreadService::remove_thread(p, is_daemon); 3582 3583 // Make sure that safepoint code disregard this thread. This is needed since 3584 // the thread might mess around with locks after this point. This can cause it 3585 // to do callbacks into the safepoint code. However, the safepoint code is not aware 3586 // of this thread since it is removed from the queue. 3587 p->set_terminated(JavaThread::_thread_terminated); 3588 3589 // Notify threads waiting in EscapeBarriers 3590 EscapeBarrier::thread_removed(p); 3591 } // unlock Threads_lock 3592 3593 // Reduce the ObjectMonitor ceiling for the exiting thread. 3594 ObjectSynchronizer::dec_in_use_list_ceiling(); 3595 3596 // Since Events::log uses a lock, we grab it outside the Threads_lock 3597 Events::log(p, "Thread exited: " INTPTR_FORMAT, p2i(p)); 3598 } 3599 3600 // Operations on the Threads list for GC. These are not explicitly locked, 3601 // but the garbage collector must provide a safe context for them to run. 3602 // In particular, these things should never be called when the Threads_lock 3603 // is held by some other thread. (Note: the Safepoint abstraction also 3604 // uses the Threads_lock to guarantee this property. It also makes sure that 3605 // all threads gets blocked when exiting or starting). 3606 3607 void Threads::oops_do(OopClosure* f, CodeBlobClosure* cf) { 3608 ALL_JAVA_THREADS(p) { 3609 p->oops_do(f, cf); 3610 } 3611 VMThread::vm_thread()->oops_do(f, cf); 3612 } 3613 3614 void Threads::change_thread_claim_token() { 3615 if (++_thread_claim_token == 0) { 3616 // On overflow of the token counter, there is a risk of future 3617 // collisions between a new global token value and a stale token 3618 // for a thread, because not all iterations visit all threads. 3619 // (Though it's pretty much a theoretical concern for non-trivial 3620 // token counter sizes.) To deal with the possibility, reset all 3621 // the thread tokens to zero on global token overflow. 3622 struct ResetClaims : public ThreadClosure { 3623 virtual void do_thread(Thread* t) { 3624 t->claim_threads_do(false, 0); 3625 } 3626 } reset_claims; 3627 Threads::threads_do(&reset_claims); 3628 // On overflow, update the global token to non-zero, to 3629 // avoid the special "never claimed" initial thread value. 3630 _thread_claim_token = 1; 3631 } 3632 } 3633 3634 #ifdef ASSERT 3635 void assert_thread_claimed(const char* kind, Thread* t, uintx expected) { 3636 const uintx token = t->threads_do_token(); 3637 assert(token == expected, 3638 "%s " PTR_FORMAT " has incorrect value " UINTX_FORMAT " != " 3639 UINTX_FORMAT, kind, p2i(t), token, expected); 3640 } 3641 3642 void Threads::assert_all_threads_claimed() { 3643 ALL_JAVA_THREADS(p) { 3644 assert_thread_claimed("Thread", p, _thread_claim_token); 3645 } 3646 assert_thread_claimed("VMThread", VMThread::vm_thread(), _thread_claim_token); 3647 } 3648 #endif // ASSERT 3649 3650 class ParallelOopsDoThreadClosure : public ThreadClosure { 3651 private: 3652 OopClosure* _f; 3653 CodeBlobClosure* _cf; 3654 public: 3655 ParallelOopsDoThreadClosure(OopClosure* f, CodeBlobClosure* cf) : _f(f), _cf(cf) {} 3656 void do_thread(Thread* t) { 3657 t->oops_do(_f, _cf); 3658 } 3659 }; 3660 3661 void Threads::possibly_parallel_oops_do(bool is_par, OopClosure* f, CodeBlobClosure* cf) { 3662 ParallelOopsDoThreadClosure tc(f, cf); 3663 possibly_parallel_threads_do(is_par, &tc); 3664 } 3665 3666 void Threads::metadata_do(MetadataClosure* f) { 3667 ALL_JAVA_THREADS(p) { 3668 p->metadata_do(f); 3669 } 3670 } 3671 3672 class ThreadHandlesClosure : public ThreadClosure { 3673 void (*_f)(Metadata*); 3674 public: 3675 ThreadHandlesClosure(void f(Metadata*)) : _f(f) {} 3676 virtual void do_thread(Thread* thread) { 3677 thread->metadata_handles_do(_f); 3678 } 3679 }; 3680 3681 void Threads::metadata_handles_do(void f(Metadata*)) { 3682 // Only walk the Handles in Thread. 3683 ThreadHandlesClosure handles_closure(f); 3684 threads_do(&handles_closure); 3685 } 3686 3687 // Get count Java threads that are waiting to enter the specified monitor. 3688 GrowableArray<JavaThread*>* Threads::get_pending_threads(ThreadsList * t_list, 3689 int count, 3690 address monitor) { 3691 GrowableArray<JavaThread*>* result = new GrowableArray<JavaThread*>(count); 3692 3693 int i = 0; 3694 DO_JAVA_THREADS(t_list, p) { 3695 if (!p->can_call_java()) continue; 3696 3697 // The first stage of async deflation does not affect any field 3698 // used by this comparison so the ObjectMonitor* is usable here. 3699 address pending = (address)p->current_pending_monitor(); 3700 if (pending == monitor) { // found a match 3701 if (i < count) result->append(p); // save the first count matches 3702 i++; 3703 } 3704 } 3705 3706 return result; 3707 } 3708 3709 3710 JavaThread *Threads::owning_thread_from_monitor_owner(ThreadsList * t_list, 3711 address owner) { 3712 // NULL owner means not locked so we can skip the search 3713 if (owner == NULL) return NULL; 3714 3715 DO_JAVA_THREADS(t_list, p) { 3716 // first, see if owner is the address of a Java thread 3717 if (owner == (address)p) return p; 3718 } 3719 3720 // Cannot assert on lack of success here since this function may be 3721 // used by code that is trying to report useful problem information 3722 // like deadlock detection. 3723 if (UseHeavyMonitors) return NULL; 3724 3725 // If we didn't find a matching Java thread and we didn't force use of 3726 // heavyweight monitors, then the owner is the stack address of the 3727 // Lock Word in the owning Java thread's stack. 3728 // 3729 JavaThread* the_owner = NULL; 3730 DO_JAVA_THREADS(t_list, q) { 3731 if (q->is_lock_owned(owner)) { 3732 the_owner = q; 3733 break; 3734 } 3735 } 3736 3737 // cannot assert on lack of success here; see above comment 3738 return the_owner; 3739 } 3740 3741 class PrintOnClosure : public ThreadClosure { 3742 private: 3743 outputStream* _st; 3744 3745 public: 3746 PrintOnClosure(outputStream* st) : 3747 _st(st) {} 3748 3749 virtual void do_thread(Thread* thread) { 3750 if (thread != NULL) { 3751 thread->print_on(_st); 3752 _st->cr(); 3753 } 3754 } 3755 }; 3756 3757 // Threads::print_on() is called at safepoint by VM_PrintThreads operation. 3758 void Threads::print_on(outputStream* st, bool print_stacks, 3759 bool internal_format, bool print_concurrent_locks, 3760 bool print_extended_info) { 3761 char buf[32]; 3762 st->print_raw_cr(os::local_time_string(buf, sizeof(buf))); 3763 3764 st->print_cr("Full thread dump %s (%s %s):", 3765 VM_Version::vm_name(), 3766 VM_Version::vm_release(), 3767 VM_Version::vm_info_string()); 3768 st->cr(); 3769 3770 #if INCLUDE_SERVICES 3771 // Dump concurrent locks 3772 ConcurrentLocksDump concurrent_locks; 3773 if (print_concurrent_locks) { 3774 concurrent_locks.dump_at_safepoint(); 3775 } 3776 #endif // INCLUDE_SERVICES 3777 3778 ThreadsSMRSupport::print_info_on(st); 3779 st->cr(); 3780 3781 ALL_JAVA_THREADS(p) { 3782 ResourceMark rm; 3783 p->print_on(st, print_extended_info); 3784 if (print_stacks) { 3785 if (internal_format) { 3786 p->trace_stack(); 3787 } else { 3788 p->print_stack_on(st); 3789 } 3790 } 3791 st->cr(); 3792 #if INCLUDE_SERVICES 3793 if (print_concurrent_locks) { 3794 concurrent_locks.print_locks_on(p, st); 3795 } 3796 #endif // INCLUDE_SERVICES 3797 } 3798 3799 PrintOnClosure cl(st); 3800 cl.do_thread(VMThread::vm_thread()); 3801 Universe::heap()->gc_threads_do(&cl); 3802 if (StringDedup::is_enabled()) { 3803 StringDedup::threads_do(&cl); 3804 } 3805 cl.do_thread(WatcherThread::watcher_thread()); 3806 cl.do_thread(AsyncLogWriter::instance()); 3807 3808 st->flush(); 3809 } 3810 3811 void Threads::print_on_error(Thread* this_thread, outputStream* st, Thread* current, char* buf, 3812 int buflen, bool* found_current) { 3813 if (this_thread != NULL) { 3814 bool is_current = (current == this_thread); 3815 *found_current = *found_current || is_current; 3816 st->print("%s", is_current ? "=>" : " "); 3817 3818 st->print(PTR_FORMAT, p2i(this_thread)); 3819 st->print(" "); 3820 this_thread->print_on_error(st, buf, buflen); 3821 st->cr(); 3822 } 3823 } 3824 3825 class PrintOnErrorClosure : public ThreadClosure { 3826 outputStream* _st; 3827 Thread* _current; 3828 char* _buf; 3829 int _buflen; 3830 bool* _found_current; 3831 public: 3832 PrintOnErrorClosure(outputStream* st, Thread* current, char* buf, 3833 int buflen, bool* found_current) : 3834 _st(st), _current(current), _buf(buf), _buflen(buflen), _found_current(found_current) {} 3835 3836 virtual void do_thread(Thread* thread) { 3837 Threads::print_on_error(thread, _st, _current, _buf, _buflen, _found_current); 3838 } 3839 }; 3840 3841 // Threads::print_on_error() is called by fatal error handler. It's possible 3842 // that VM is not at safepoint and/or current thread is inside signal handler. 3843 // Don't print stack trace, as the stack may not be walkable. Don't allocate 3844 // memory (even in resource area), it might deadlock the error handler. 3845 void Threads::print_on_error(outputStream* st, Thread* current, char* buf, 3846 int buflen) { 3847 ThreadsSMRSupport::print_info_on(st); 3848 st->cr(); 3849 3850 bool found_current = false; 3851 st->print_cr("Java Threads: ( => current thread )"); 3852 ALL_JAVA_THREADS(thread) { 3853 print_on_error(thread, st, current, buf, buflen, &found_current); 3854 } 3855 st->cr(); 3856 3857 st->print_cr("Other Threads:"); 3858 print_on_error(VMThread::vm_thread(), st, current, buf, buflen, &found_current); 3859 print_on_error(WatcherThread::watcher_thread(), st, current, buf, buflen, &found_current); 3860 print_on_error(AsyncLogWriter::instance(), st, current, buf, buflen, &found_current); 3861 3862 if (Universe::heap() != NULL) { 3863 PrintOnErrorClosure print_closure(st, current, buf, buflen, &found_current); 3864 Universe::heap()->gc_threads_do(&print_closure); 3865 } 3866 3867 if (StringDedup::is_enabled()) { 3868 PrintOnErrorClosure print_closure(st, current, buf, buflen, &found_current); 3869 StringDedup::threads_do(&print_closure); 3870 } 3871 3872 if (!found_current) { 3873 st->cr(); 3874 st->print("=>" PTR_FORMAT " (exited) ", p2i(current)); 3875 current->print_on_error(st, buf, buflen); 3876 st->cr(); 3877 } 3878 st->cr(); 3879 3880 st->print_cr("Threads with active compile tasks:"); 3881 print_threads_compiling(st, buf, buflen); 3882 } 3883 3884 void Threads::print_threads_compiling(outputStream* st, char* buf, int buflen, bool short_form) { 3885 ALL_JAVA_THREADS(thread) { 3886 if (thread->is_Compiler_thread()) { 3887 CompilerThread* ct = (CompilerThread*) thread; 3888 3889 // Keep task in local variable for NULL check. 3890 // ct->_task might be set to NULL by concurring compiler thread 3891 // because it completed the compilation. The task is never freed, 3892 // though, just returned to a free list. 3893 CompileTask* task = ct->task(); 3894 if (task != NULL) { 3895 thread->print_name_on_error(st, buf, buflen); 3896 st->print(" "); 3897 task->print(st, NULL, short_form, true); 3898 } 3899 } 3900 } 3901 } 3902 3903 3904 // Ad-hoc mutual exclusion primitives: SpinLock 3905 // 3906 // We employ SpinLocks _only for low-contention, fixed-length 3907 // short-duration critical sections where we're concerned 3908 // about native mutex_t or HotSpot Mutex:: latency. 3909 // 3910 // TODO-FIXME: ListLock should be of type SpinLock. 3911 // We should make this a 1st-class type, integrated into the lock 3912 // hierarchy as leaf-locks. Critically, the SpinLock structure 3913 // should have sufficient padding to avoid false-sharing and excessive 3914 // cache-coherency traffic. 3915 3916 3917 typedef volatile int SpinLockT; 3918 3919 void Thread::SpinAcquire(volatile int * adr, const char * LockName) { 3920 if (Atomic::cmpxchg(adr, 0, 1) == 0) { 3921 return; // normal fast-path return 3922 } 3923 3924 // Slow-path : We've encountered contention -- Spin/Yield/Block strategy. 3925 int ctr = 0; 3926 int Yields = 0; 3927 for (;;) { 3928 while (*adr != 0) { 3929 ++ctr; 3930 if ((ctr & 0xFFF) == 0 || !os::is_MP()) { 3931 if (Yields > 5) { 3932 os::naked_short_sleep(1); 3933 } else { 3934 os::naked_yield(); 3935 ++Yields; 3936 } 3937 } else { 3938 SpinPause(); 3939 } 3940 } 3941 if (Atomic::cmpxchg(adr, 0, 1) == 0) return; 3942 } 3943 } 3944 3945 void Thread::SpinRelease(volatile int * adr) { 3946 assert(*adr != 0, "invariant"); 3947 OrderAccess::fence(); // guarantee at least release consistency. 3948 // Roach-motel semantics. 3949 // It's safe if subsequent LDs and STs float "up" into the critical section, 3950 // but prior LDs and STs within the critical section can't be allowed 3951 // to reorder or float past the ST that releases the lock. 3952 // Loads and stores in the critical section - which appear in program 3953 // order before the store that releases the lock - must also appear 3954 // before the store that releases the lock in memory visibility order. 3955 // Conceptually we need a #loadstore|#storestore "release" MEMBAR before 3956 // the ST of 0 into the lock-word which releases the lock, so fence 3957 // more than covers this on all platforms. 3958 *adr = 0; 3959 } 3960 3961 3962 void Threads::verify() { 3963 ALL_JAVA_THREADS(p) { 3964 p->verify(); 3965 } 3966 VMThread* thread = VMThread::vm_thread(); 3967 if (thread != NULL) thread->verify(); 3968 } 3969 3970 #ifndef PRODUCT 3971 void JavaThread::verify_cross_modify_fence_failure(JavaThread *thread) { 3972 report_vm_error(__FILE__, __LINE__, "Cross modify fence failure", "%p", thread); 3973 } 3974 #endif