src/share/vm/runtime/thread.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File hotspot Sdiff src/share/vm/runtime

src/share/vm/runtime/thread.cpp

Print this page




  82 #include "runtime/vframe_hp.hpp"
  83 #include "runtime/vmThread.hpp"
  84 #include "runtime/vm_operations.hpp"
  85 #include "runtime/vm_version.hpp"
  86 #include "services/attachListener.hpp"
  87 #include "services/management.hpp"
  88 #include "services/memTracker.hpp"
  89 #include "services/threadService.hpp"
  90 #include "trace/traceMacros.hpp"
  91 #include "trace/tracing.hpp"
  92 #include "utilities/defaultStream.hpp"
  93 #include "utilities/dtrace.hpp"
  94 #include "utilities/events.hpp"
  95 #include "utilities/macros.hpp"
  96 #include "utilities/preserveException.hpp"
  97 #if INCLUDE_ALL_GCS
  98 #include "gc/cms/concurrentMarkSweepThread.hpp"
  99 #include "gc/g1/concurrentMarkThread.inline.hpp"
 100 #include "gc/parallel/pcTasks.hpp"
 101 #endif // INCLUDE_ALL_GCS




 102 #ifdef COMPILER1
 103 #include "c1/c1_Compiler.hpp"
 104 #endif
 105 #ifdef COMPILER2
 106 #include "opto/c2compiler.hpp"
 107 #include "opto/idealGraphPrinter.hpp"
 108 #endif
 109 #if INCLUDE_RTM_OPT
 110 #include "runtime/rtmLocking.hpp"
 111 #endif
 112 
 113 PRAGMA_FORMAT_MUTE_WARNINGS_FOR_GCC
 114 
 115 #ifdef DTRACE_ENABLED
 116 
 117 // Only bother with this argument setup if dtrace is available
 118 
 119   #define HOTSPOT_THREAD_PROBE_start HOTSPOT_THREAD_START
 120   #define HOTSPOT_THREAD_PROBE_stop HOTSPOT_THREAD_STOP
 121 


1369     // suspend-equivalent condition solves that timeout problem.
1370     //
1371     Terminator_lock->wait(!Mutex::_no_safepoint_check_flag, 0,
1372                           Mutex::_as_suspend_equivalent_flag);
1373   }
1374 }
1375 
1376 void WatcherThread::unpark() {
1377   assert(PeriodicTask_lock->owned_by_self(), "PeriodicTask_lock required");
1378   PeriodicTask_lock->notify();
1379 }
1380 
1381 void WatcherThread::print_on(outputStream* st) const {
1382   st->print("\"%s\" ", name());
1383   Thread::print_on(st);
1384   st->cr();
1385 }
1386 
1387 // ======= JavaThread ========
1388 



























1389 // A JavaThread is a normal Java thread
1390 
1391 void JavaThread::initialize() {
1392   // Initialize fields
1393 
1394   // Set the claimed par_id to UINT_MAX (ie not claiming any par_ids)
1395   set_claimed_par_id(UINT_MAX);
1396 
1397   set_saved_exception_pc(NULL);
1398   set_threadObj(NULL);
1399   _anchor.clear();
1400   set_entry_point(NULL);
1401   set_jni_functions(jni_functions());
1402   set_callee_target(NULL);
1403   set_vm_result(NULL);
1404   set_vm_result_2(NULL);
1405   set_vframe_array_head(NULL);
1406   set_vframe_array_last(NULL);
1407   set_deferred_locals(NULL);
1408   set_deopt_mark(NULL);
1409   set_deopt_nmethod(NULL);
1410   clear_must_deopt_id();
1411   set_monitor_chunks(NULL);
1412   set_next(NULL);
1413   set_thread_state(_thread_new);
1414   _terminated = _not_terminated;
1415   _privileged_stack_top = NULL;
1416   _array_for_gc = NULL;
1417   _suspend_equivalent = false;
1418   _in_deopt_handler = 0;
1419   _doing_unsafe_access = false;
1420   _stack_guard_state = stack_guard_unused;














1421   (void)const_cast<oop&>(_exception_oop = oop(NULL));
1422   _exception_pc  = 0;
1423   _exception_handler_pc = 0;
1424   _is_method_handle_return = 0;
1425   _jvmti_thread_state= NULL;
1426   _should_post_on_exceptions_flag = JNI_FALSE;
1427   _jvmti_get_loaded_classes_closure = NULL;
1428   _interp_only_mode    = 0;
1429   _special_runtime_exit_condition = _no_async_condition;
1430   _pending_async_exception = NULL;
1431   _thread_stat = NULL;
1432   _thread_stat = new ThreadStatistics();
1433   _blocked_on_compilation = false;
1434   _jni_active_critical = 0;
1435   _pending_jni_exception_check_fn = NULL;
1436   _do_not_unlock_if_synchronized = false;
1437   _cached_monitor_info = NULL;
1438   _parker = Parker::Allocate(this);
1439 
1440 #ifndef PRODUCT


1575     delete old_array;
1576   }
1577 
1578   GrowableArray<jvmtiDeferredLocalVariableSet*>* deferred = deferred_locals();
1579   if (deferred != NULL) {
1580     // This can only happen if thread is destroyed before deoptimization occurs.
1581     assert(deferred->length() != 0, "empty array!");
1582     do {
1583       jvmtiDeferredLocalVariableSet* dlv = deferred->at(0);
1584       deferred->remove_at(0);
1585       // individual jvmtiDeferredLocalVariableSet are CHeapObj's
1586       delete dlv;
1587     } while (deferred->length() != 0);
1588     delete deferred;
1589   }
1590 
1591   // All Java related clean up happens in exit
1592   ThreadSafepointState::destroy(this);
1593   if (_thread_profiler != NULL) delete _thread_profiler;
1594   if (_thread_stat != NULL) delete _thread_stat;











1595 }
1596 
1597 
1598 // The first routine called by a new Java thread
1599 void JavaThread::run() {
1600   // initialize thread-local alloc buffer related fields
1601   this->initialize_tlab();
1602 
1603   // used to test validity of stack trace backs
1604   this->record_base_of_stack_pointer();
1605 
1606   // Record real stack base and size.
1607   this->record_stack_base_and_size();
1608 
1609   // Initialize thread local storage; set before calling MutexLocker
1610   this->initialize_thread_local_storage();
1611 
1612   this->create_stack_guard_pages();
1613 
1614   this->cache_global_variables();


2118 
2119     frame_anchor()->make_walkable(this);
2120     java_suspend_self();
2121 
2122     // We might be here for reasons in addition to the self-suspend request
2123     // so check for other async requests.
2124   }
2125 
2126   if (check_asyncs) {
2127     check_and_handle_async_exceptions();
2128   }
2129 }
2130 
2131 void JavaThread::send_thread_stop(oop java_throwable)  {
2132   assert(Thread::current()->is_VM_thread(), "should be in the vm thread");
2133   assert(Threads_lock->is_locked(), "Threads_lock should be locked by safepoint code");
2134   assert(SafepointSynchronize::is_at_safepoint(), "all threads are stopped");
2135 
2136   // Do not throw asynchronous exceptions against the compiler thread
2137   // (the compiler thread should not be a Java thread -- fix in 1.4.2)
2138   if (is_Compiler_thread()) return;
2139 
2140   {
2141     // Actually throw the Throwable against the target Thread - however
2142     // only if there is no thread death exception installed already.
2143     if (_pending_async_exception == NULL || !_pending_async_exception->is_a(SystemDictionary::ThreadDeath_klass())) {
2144       // If the topmost frame is a runtime stub, then we are calling into
2145       // OptoRuntime from compiled code. Some runtime stubs (new, monitor_exit..)
2146       // must deoptimize the caller before continuing, as the compiled  exception handler table
2147       // may not be valid
2148       if (has_last_Java_frame()) {
2149         frame f = last_frame();
2150         if (f.is_runtime_frame() || f.is_safepoint_blob_frame()) {
2151           // BiasedLocking needs an updated RegisterMap for the revoke monitors pass
2152           RegisterMap reg_map(this, UseBiasedLocking);
2153           frame compiled_frame = f.sender(&reg_map);
2154           if (!StressCompiledExceptionHandlers && compiled_frame.can_be_deoptimized()) {
2155             Deoptimization::deoptimize(this, compiled_frame, &reg_map);
2156           }
2157         }
2158       }


2597 
2598 // Make zombies
2599 void JavaThread::make_zombies() {
2600   for (StackFrameStream fst(this); !fst.is_done(); fst.next()) {
2601     if (fst.current()->can_be_deoptimized()) {
2602       // it is a Java nmethod
2603       nmethod* nm = CodeCache::find_nmethod(fst.current()->pc());
2604       nm->make_not_entrant();
2605     }
2606   }
2607 }
2608 #endif // PRODUCT
2609 
2610 
2611 void JavaThread::deoptimized_wrt_marked_nmethods() {
2612   if (!has_last_Java_frame()) return;
2613   // BiasedLocking needs an updated RegisterMap for the revoke monitors pass
2614   StackFrameStream fst(this, UseBiasedLocking);
2615   for (; !fst.is_done(); fst.next()) {
2616     if (fst.current()->should_be_deoptimized()) {
2617       if (LogCompilation && xtty != NULL) {
2618         nmethod* nm = fst.current()->cb()->as_nmethod_or_null();
2619         xtty->elem("deoptimized thread='" UINTX_FORMAT "' compile_id='%d'",
2620                    this->name(), nm != NULL ? nm->compile_id() : -1);
2621       }
2622 
2623       Deoptimization::deoptimize(this, *fst.current(), fst.register_map());
2624     }
2625   }
2626 }
2627 
2628 
2629 // If the caller is a NamedThread, then remember, in the current scope,
2630 // the given JavaThread in its _processed_thread field.
2631 class RememberProcessedThread: public StackObj {
2632   NamedThread* _cur_thr;
2633  public:
2634   RememberProcessedThread(JavaThread* jthr) {
2635     Thread* thread = Thread::current();
2636     if (thread->is_Named_thread()) {
2637       _cur_thr = (NamedThread *)thread;
2638       _cur_thr->set_processed_thread(jthr);
2639     } else {
2640       _cur_thr = NULL;
2641     }
2642   }
2643 
2644   ~RememberProcessedThread() {
2645     if (_cur_thr) {
2646       _cur_thr->set_processed_thread(NULL);
2647     }
2648   }
2649 };
2650 
2651 void JavaThread::oops_do(OopClosure* f, CLDClosure* cld_f, CodeBlobClosure* cf) {
2652   // Verify that the deferred card marks have been flushed.
2653   assert(deferred_card_mark().is_empty(), "Should be empty during GC");
2654 
2655   // The ThreadProfiler oops_do is done from FlatProfiler::oops_do
2656   // since there may be more than one thread using each ThreadProfiler.
2657 
2658   // Traverse the GCHandles
2659   Thread::oops_do(f, cld_f, cf);
2660 


2661   assert((!has_last_Java_frame() && java_call_counter() == 0) ||
2662          (has_last_Java_frame() && java_call_counter() > 0), "wrong java_sp info!");
2663 
2664   if (has_last_Java_frame()) {
2665     // Record JavaThread to GC thread
2666     RememberProcessedThread rpt(this);
2667 
2668     // Traverse the privileged stack
2669     if (_privileged_stack_top != NULL) {
2670       _privileged_stack_top->oops_do(f);
2671     }
2672 
2673     // traverse the registered growable array
2674     if (_array_for_gc != NULL) {
2675       for (int index = 0; index < _array_for_gc->length(); index++) {
2676         f->do_oop(_array_for_gc->adr_at(index));
2677       }
2678     }
2679 
2680     // Traverse the monitor chunks


3158   NMethodSweeper::sweeper_loop();
3159 }
3160 
3161 // Create a CompilerThread
3162 CompilerThread::CompilerThread(CompileQueue* queue,
3163                                CompilerCounters* counters)
3164                                : JavaThread(&compiler_thread_entry) {
3165   _env   = NULL;
3166   _log   = NULL;
3167   _task  = NULL;
3168   _queue = queue;
3169   _counters = counters;
3170   _buffer_blob = NULL;
3171   _compiler = NULL;
3172 
3173 #ifndef PRODUCT
3174   _ideal_graph_printer = NULL;
3175 #endif
3176 }
3177 




3178 // Create sweeper thread
3179 CodeCacheSweeperThread::CodeCacheSweeperThread()
3180 : JavaThread(&sweeper_thread_entry) {
3181   _scanned_nmethod = NULL;
3182 }
3183 void CodeCacheSweeperThread::oops_do(OopClosure* f, CLDClosure* cld_f, CodeBlobClosure* cf) {
3184   JavaThread::oops_do(f, cld_f, cf);
3185   if (_scanned_nmethod != NULL && cf != NULL) {
3186     // Safepoints can occur when the sweeper is scanning an nmethod so
3187     // process it here to make sure it isn't unloaded in the middle of
3188     // a scan.
3189     cf->do_code_blob(_scanned_nmethod);
3190   }
3191 }
3192 
3193 
3194 // ======= Threads ========
3195 
3196 // The Threads class links together all active threads, and provides
3197 // operations over all threads.  It is protected by its own Mutex


3363 
3364   // Convert -Xrun to -agentlib: if there is no JVM_OnLoad
3365   // Must be before create_vm_init_agents()
3366   if (Arguments::init_libraries_at_startup()) {
3367     convert_vm_init_libraries_to_agents();
3368   }
3369 
3370   // Launch -agentlib/-agentpath and converted -Xrun agents
3371   if (Arguments::init_agents_at_startup()) {
3372     create_vm_init_agents();
3373   }
3374 
3375   // Initialize Threads state
3376   _thread_list = NULL;
3377   _number_of_threads = 0;
3378   _number_of_non_daemon_threads = 0;
3379 
3380   // Initialize global data structures and create system classes in heap
3381   vm_init_globals();
3382 









3383   // Attach the main thread to this os thread
3384   JavaThread* main_thread = new JavaThread();
3385   main_thread->set_thread_state(_thread_in_vm);
3386   // must do this before set_active_handles and initialize_thread_local_storage
3387   // Note: on solaris initialize_thread_local_storage() will (indirectly)
3388   // change the stack size recorded here to one based on the java thread
3389   // stacksize. This adjusted size is what is used to figure the placement
3390   // of the guard pages.
3391   main_thread->record_stack_base_and_size();
3392   main_thread->initialize_thread_local_storage();
3393 
3394   main_thread->set_active_handles(JNIHandleBlock::allocate_block());
3395 
3396   if (!main_thread->set_as_starting_thread()) {
3397     vm_shutdown_during_initialization(
3398                                       "Failed necessary internal allocation. Out of swap space");
3399     delete main_thread;
3400     *canTryAgain = false; // don't let caller call JNI_CreateJavaVM again
3401     return JNI_ENOMEM;
3402   }


3489   }
3490 
3491   // Set flag that basic initialization has completed. Used by exceptions and various
3492   // debug stuff, that does not work until all basic classes have been initialized.
3493   set_init_completed();
3494 
3495   Metaspace::post_initialize();
3496 
3497   HOTSPOT_VM_INIT_END();
3498 
3499   // record VM initialization completion time
3500 #if INCLUDE_MANAGEMENT
3501   Management::record_vm_init_completed();
3502 #endif // INCLUDE_MANAGEMENT
3503 
3504   // Compute system loader. Note that this has to occur after set_init_completed, since
3505   // valid exceptions may be thrown in the process.
3506   // Note that we do not use CHECK_0 here since we are inside an EXCEPTION_MARK and
3507   // set_init_completed has just been called, causing exceptions not to be shortcut
3508   // anymore. We call vm_exit_during_initialization directly instead.
3509   SystemDictionary::compute_java_system_loader(CHECK_JNI_ERR);
3510 
3511 #if INCLUDE_ALL_GCS
3512   // Support for ConcurrentMarkSweep. This should be cleaned up
3513   // and better encapsulated. The ugly nested if test would go away
3514   // once things are properly refactored. XXX YSR
3515   if (UseConcMarkSweepGC || UseG1GC) {
3516     if (UseConcMarkSweepGC) {
3517       ConcurrentMarkSweepThread::makeSurrogateLockerThread(CHECK_JNI_ERR);
3518     } else {
3519       ConcurrentMarkThread::makeSurrogateLockerThread(CHECK_JNI_ERR);
3520     }
3521   }
3522 #endif // INCLUDE_ALL_GCS
3523 
3524   // Always call even when there are not JVMTI environments yet, since environments
3525   // may be attached late and JVMTI must track phases of VM execution
3526   JvmtiExport::enter_live_phase();
3527 
3528   // Signal Dispatcher needs to be started before VMInit event is posted
3529   os::signal_init();


3537   }
3538 
3539   // Launch -Xrun agents
3540   // Must be done in the JVMTI live phase so that for backward compatibility the JDWP
3541   // back-end can launch with -Xdebug -Xrunjdwp.
3542   if (!EagerXrunInit && Arguments::init_libraries_at_startup()) {
3543     create_vm_init_libraries();
3544   }
3545 
3546   // Notify JVMTI agents that VM initialization is complete - nop if no agents.
3547   JvmtiExport::post_vm_initialized();
3548 
3549   if (TRACE_START() != JNI_OK) {
3550     vm_exit_during_initialization("Failed to start tracing backend.");
3551   }
3552 
3553   if (CleanChunkPoolAsync) {
3554     Chunk::start_chunk_pool_cleaner_task();
3555   }
3556 













3557   // initialize compiler(s)
3558 #if defined(COMPILER1) || defined(COMPILER2) || defined(SHARK)
3559   CompileBroker::compilation_init();
3560 #endif
3561 
3562   // Pre-initialize some JSR292 core classes to avoid deadlock during class loading.
3563   // It is done after compilers are initialized, because otherwise compilations of
3564   // signature polymorphic MH intrinsics can be missed
3565   // (see SystemDictionary::find_method_handle_intrinsic).
3566   initialize_jsr292_core_classes(CHECK_JNI_ERR);
3567 
3568 #if INCLUDE_MANAGEMENT
3569   Management::initialize(THREAD);
3570 
3571   if (HAS_PENDING_EXCEPTION) {
3572     // management agent fails to start possibly due to
3573     // configuration problem and is responsible for printing
3574     // stack trace if appropriate. Simply exit VM.
3575     vm_exit(1);
3576   }
3577 #endif // INCLUDE_MANAGEMENT
3578 


3946 
3947   // Now, all Java threads are gone except daemon threads. Daemon threads
3948   // running Java code or in VM are stopped by the Safepoint. However,
3949   // daemon threads executing native code are still running.  But they
3950   // will be stopped at native=>Java/VM barriers. Note that we can't
3951   // simply kill or suspend them, as it is inherently deadlock-prone.
3952 
3953 #ifndef PRODUCT
3954   // disable function tracing at JNI/JVM barriers
3955   TraceJNICalls = false;
3956   TraceJVMCalls = false;
3957   TraceRuntimeCalls = false;
3958 #endif
3959 
3960   VM_Exit::set_vm_exited();
3961 
3962   notify_vm_shutdown();
3963 
3964   delete thread;
3965 






3966   // exit_globals() will delete tty
3967   exit_globals();
3968 
3969   return true;
3970 }
3971 
3972 
3973 jboolean Threads::is_supported_jni_version_including_1_1(jint version) {
3974   if (version == JNI_VERSION_1_1) return JNI_TRUE;
3975   return is_supported_jni_version(version);
3976 }
3977 
3978 
3979 jboolean Threads::is_supported_jni_version(jint version) {
3980   if (version == JNI_VERSION_1_2) return JNI_TRUE;
3981   if (version == JNI_VERSION_1_4) return JNI_TRUE;
3982   if (version == JNI_VERSION_1_6) return JNI_TRUE;
3983   if (version == JNI_VERSION_1_8) return JNI_TRUE;
3984   return JNI_FALSE;
3985 }


4162 
4163 void Threads::deoptimized_wrt_marked_nmethods() {
4164   ALL_JAVA_THREADS(p) {
4165     p->deoptimized_wrt_marked_nmethods();
4166   }
4167 }
4168 
4169 
4170 // Get count Java threads that are waiting to enter the specified monitor.
4171 GrowableArray<JavaThread*>* Threads::get_pending_threads(int count,
4172                                                          address monitor,
4173                                                          bool doLock) {
4174   assert(doLock || SafepointSynchronize::is_at_safepoint(),
4175          "must grab Threads_lock or be at safepoint");
4176   GrowableArray<JavaThread*>* result = new GrowableArray<JavaThread*>(count);
4177 
4178   int i = 0;
4179   {
4180     MutexLockerEx ml(doLock ? Threads_lock : NULL);
4181     ALL_JAVA_THREADS(p) {
4182       if (p->is_Compiler_thread()) continue;
4183 
4184       address pending = (address)p->current_pending_monitor();
4185       if (pending == monitor) {             // found a match
4186         if (i < count) result->append(p);   // save the first count matches
4187         i++;
4188       }
4189     }
4190   }
4191   return result;
4192 }
4193 
4194 
4195 JavaThread *Threads::owning_thread_from_monitor_owner(address owner,
4196                                                       bool doLock) {
4197   assert(doLock ||
4198          Threads_lock->owned_by_self() ||
4199          SafepointSynchronize::is_at_safepoint(),
4200          "must grab Threads_lock or be at safepoint");
4201 
4202   // NULL owner means not locked so we can skip the search


4219   // Lock Word in the owning Java thread's stack.
4220   //
4221   JavaThread* the_owner = NULL;
4222   {
4223     MutexLockerEx ml(doLock ? Threads_lock : NULL);
4224     ALL_JAVA_THREADS(q) {
4225       if (q->is_lock_owned(owner)) {
4226         the_owner = q;
4227         break;
4228       }
4229     }
4230   }
4231   // cannot assert on lack of success here; see above comment
4232   return the_owner;
4233 }
4234 
4235 // Threads::print_on() is called at safepoint by VM_PrintThreads operation.
4236 void Threads::print_on(outputStream* st, bool print_stacks,
4237                        bool internal_format, bool print_concurrent_locks) {
4238   char buf[32];
4239   st->print_cr("%s", os::local_time_string(buf, sizeof(buf)));
4240 
4241   st->print_cr("Full thread dump %s (%s %s):",
4242                Abstract_VM_Version::vm_name(),
4243                Abstract_VM_Version::vm_release(),
4244                Abstract_VM_Version::vm_info_string());
4245   st->cr();
4246 
4247 #if INCLUDE_SERVICES
4248   // Dump concurrent locks
4249   ConcurrentLocksDump concurrent_locks;
4250   if (print_concurrent_locks) {
4251     concurrent_locks.dump_at_safepoint();
4252   }
4253 #endif // INCLUDE_SERVICES
4254 
4255   ALL_JAVA_THREADS(p) {
4256     ResourceMark rm;
4257     p->print_on(st);
4258     if (print_stacks) {
4259       if (internal_format) {




  82 #include "runtime/vframe_hp.hpp"
  83 #include "runtime/vmThread.hpp"
  84 #include "runtime/vm_operations.hpp"
  85 #include "runtime/vm_version.hpp"
  86 #include "services/attachListener.hpp"
  87 #include "services/management.hpp"
  88 #include "services/memTracker.hpp"
  89 #include "services/threadService.hpp"
  90 #include "trace/traceMacros.hpp"
  91 #include "trace/tracing.hpp"
  92 #include "utilities/defaultStream.hpp"
  93 #include "utilities/dtrace.hpp"
  94 #include "utilities/events.hpp"
  95 #include "utilities/macros.hpp"
  96 #include "utilities/preserveException.hpp"
  97 #if INCLUDE_ALL_GCS
  98 #include "gc/cms/concurrentMarkSweepThread.hpp"
  99 #include "gc/g1/concurrentMarkThread.inline.hpp"
 100 #include "gc/parallel/pcTasks.hpp"
 101 #endif // INCLUDE_ALL_GCS
 102 #if INCLUDE_JVMCI
 103 #include "jvmci/jvmciCompiler.hpp"
 104 #include "jvmci/jvmciRuntime.hpp"
 105 #endif
 106 #ifdef COMPILER1
 107 #include "c1/c1_Compiler.hpp"
 108 #endif
 109 #ifdef COMPILER2
 110 #include "opto/c2compiler.hpp"
 111 #include "opto/idealGraphPrinter.hpp"
 112 #endif
 113 #if INCLUDE_RTM_OPT
 114 #include "runtime/rtmLocking.hpp"
 115 #endif
 116 
 117 PRAGMA_FORMAT_MUTE_WARNINGS_FOR_GCC
 118 
 119 #ifdef DTRACE_ENABLED
 120 
 121 // Only bother with this argument setup if dtrace is available
 122 
 123   #define HOTSPOT_THREAD_PROBE_start HOTSPOT_THREAD_START
 124   #define HOTSPOT_THREAD_PROBE_stop HOTSPOT_THREAD_STOP
 125 


1373     // suspend-equivalent condition solves that timeout problem.
1374     //
1375     Terminator_lock->wait(!Mutex::_no_safepoint_check_flag, 0,
1376                           Mutex::_as_suspend_equivalent_flag);
1377   }
1378 }
1379 
1380 void WatcherThread::unpark() {
1381   assert(PeriodicTask_lock->owned_by_self(), "PeriodicTask_lock required");
1382   PeriodicTask_lock->notify();
1383 }
1384 
1385 void WatcherThread::print_on(outputStream* st) const {
1386   st->print("\"%s\" ", name());
1387   Thread::print_on(st);
1388   st->cr();
1389 }
1390 
1391 // ======= JavaThread ========
1392 
1393 #if INCLUDE_JVMCI
1394 
1395 jlong* JavaThread::_jvmci_old_thread_counters;
1396 
1397 bool jvmci_counters_include(JavaThread* thread) {
1398   oop threadObj = thread->threadObj();
1399   return !JVMCICountersExcludeCompiler || !thread->is_Compiler_thread();
1400 }
1401 
1402 void JavaThread::collect_counters(typeArrayOop array) {
1403   if (JVMCICounterSize > 0) {
1404     MutexLocker tl(Threads_lock);
1405     for (int i = 0; i < array->length(); i++) {
1406       array->long_at_put(i, _jvmci_old_thread_counters[i]);
1407     }
1408     for (JavaThread* tp = Threads::first(); tp != NULL; tp = tp->next()) {
1409       if (jvmci_counters_include(tp)) {
1410         for (int i = 0; i < array->length(); i++) {
1411           array->long_at_put(i, array->long_at(i) + tp->_jvmci_counters[i]);
1412         }
1413       }
1414     }
1415   }
1416 }
1417 
1418 #endif
1419 
1420 // A JavaThread is a normal Java thread
1421 
1422 void JavaThread::initialize() {
1423   // Initialize fields
1424 
1425   // Set the claimed par_id to UINT_MAX (ie not claiming any par_ids)
1426   set_claimed_par_id(UINT_MAX);
1427 
1428   set_saved_exception_pc(NULL);
1429   set_threadObj(NULL);
1430   _anchor.clear();
1431   set_entry_point(NULL);
1432   set_jni_functions(jni_functions());
1433   set_callee_target(NULL);
1434   set_vm_result(NULL);
1435   set_vm_result_2(NULL);
1436   set_vframe_array_head(NULL);
1437   set_vframe_array_last(NULL);
1438   set_deferred_locals(NULL);
1439   set_deopt_mark(NULL);
1440   set_deopt_nmethod(NULL);
1441   clear_must_deopt_id();
1442   set_monitor_chunks(NULL);
1443   set_next(NULL);
1444   set_thread_state(_thread_new);
1445   _terminated = _not_terminated;
1446   _privileged_stack_top = NULL;
1447   _array_for_gc = NULL;
1448   _suspend_equivalent = false;
1449   _in_deopt_handler = 0;
1450   _doing_unsafe_access = false;
1451   _stack_guard_state = stack_guard_unused;
1452 #if INCLUDE_JVMCI
1453   _pending_monitorenter = false;
1454   _pending_deoptimization = -1;
1455   _pending_failed_speculation = NULL;
1456   _pending_transfer_to_interpreter = false;
1457   _jvmci._alternate_call_target = NULL;
1458   assert(_jvmci._implicit_exception_pc == NULL, "must be");
1459   if (JVMCICounterSize > 0) {
1460     _jvmci_counters = NEW_C_HEAP_ARRAY(jlong, JVMCICounterSize, mtInternal);
1461     memset(_jvmci_counters, 0, sizeof(jlong) * JVMCICounterSize);
1462   } else {
1463     _jvmci_counters = NULL;
1464   }
1465 #endif
1466   (void)const_cast<oop&>(_exception_oop = oop(NULL));
1467   _exception_pc  = 0;
1468   _exception_handler_pc = 0;
1469   _is_method_handle_return = 0;
1470   _jvmti_thread_state= NULL;
1471   _should_post_on_exceptions_flag = JNI_FALSE;
1472   _jvmti_get_loaded_classes_closure = NULL;
1473   _interp_only_mode    = 0;
1474   _special_runtime_exit_condition = _no_async_condition;
1475   _pending_async_exception = NULL;
1476   _thread_stat = NULL;
1477   _thread_stat = new ThreadStatistics();
1478   _blocked_on_compilation = false;
1479   _jni_active_critical = 0;
1480   _pending_jni_exception_check_fn = NULL;
1481   _do_not_unlock_if_synchronized = false;
1482   _cached_monitor_info = NULL;
1483   _parker = Parker::Allocate(this);
1484 
1485 #ifndef PRODUCT


1620     delete old_array;
1621   }
1622 
1623   GrowableArray<jvmtiDeferredLocalVariableSet*>* deferred = deferred_locals();
1624   if (deferred != NULL) {
1625     // This can only happen if thread is destroyed before deoptimization occurs.
1626     assert(deferred->length() != 0, "empty array!");
1627     do {
1628       jvmtiDeferredLocalVariableSet* dlv = deferred->at(0);
1629       deferred->remove_at(0);
1630       // individual jvmtiDeferredLocalVariableSet are CHeapObj's
1631       delete dlv;
1632     } while (deferred->length() != 0);
1633     delete deferred;
1634   }
1635 
1636   // All Java related clean up happens in exit
1637   ThreadSafepointState::destroy(this);
1638   if (_thread_profiler != NULL) delete _thread_profiler;
1639   if (_thread_stat != NULL) delete _thread_stat;
1640 
1641 #if INCLUDE_JVMCI
1642   if (JVMCICounterSize > 0) {
1643     if (jvmci_counters_include(this)) {
1644       for (int i = 0; i < JVMCICounterSize; i++) {
1645         _jvmci_old_thread_counters[i] += _jvmci_counters[i];
1646       }
1647     }
1648     FREE_C_HEAP_ARRAY(jlong, _jvmci_counters);
1649   }
1650 #endif
1651 }
1652 
1653 
1654 // The first routine called by a new Java thread
1655 void JavaThread::run() {
1656   // initialize thread-local alloc buffer related fields
1657   this->initialize_tlab();
1658 
1659   // used to test validity of stack trace backs
1660   this->record_base_of_stack_pointer();
1661 
1662   // Record real stack base and size.
1663   this->record_stack_base_and_size();
1664 
1665   // Initialize thread local storage; set before calling MutexLocker
1666   this->initialize_thread_local_storage();
1667 
1668   this->create_stack_guard_pages();
1669 
1670   this->cache_global_variables();


2174 
2175     frame_anchor()->make_walkable(this);
2176     java_suspend_self();
2177 
2178     // We might be here for reasons in addition to the self-suspend request
2179     // so check for other async requests.
2180   }
2181 
2182   if (check_asyncs) {
2183     check_and_handle_async_exceptions();
2184   }
2185 }
2186 
2187 void JavaThread::send_thread_stop(oop java_throwable)  {
2188   assert(Thread::current()->is_VM_thread(), "should be in the vm thread");
2189   assert(Threads_lock->is_locked(), "Threads_lock should be locked by safepoint code");
2190   assert(SafepointSynchronize::is_at_safepoint(), "all threads are stopped");
2191 
2192   // Do not throw asynchronous exceptions against the compiler thread
2193   // (the compiler thread should not be a Java thread -- fix in 1.4.2)
2194   if (!can_call_java()) return;
2195 
2196   {
2197     // Actually throw the Throwable against the target Thread - however
2198     // only if there is no thread death exception installed already.
2199     if (_pending_async_exception == NULL || !_pending_async_exception->is_a(SystemDictionary::ThreadDeath_klass())) {
2200       // If the topmost frame is a runtime stub, then we are calling into
2201       // OptoRuntime from compiled code. Some runtime stubs (new, monitor_exit..)
2202       // must deoptimize the caller before continuing, as the compiled  exception handler table
2203       // may not be valid
2204       if (has_last_Java_frame()) {
2205         frame f = last_frame();
2206         if (f.is_runtime_frame() || f.is_safepoint_blob_frame()) {
2207           // BiasedLocking needs an updated RegisterMap for the revoke monitors pass
2208           RegisterMap reg_map(this, UseBiasedLocking);
2209           frame compiled_frame = f.sender(&reg_map);
2210           if (!StressCompiledExceptionHandlers && compiled_frame.can_be_deoptimized()) {
2211             Deoptimization::deoptimize(this, compiled_frame, &reg_map);
2212           }
2213         }
2214       }


2653 
2654 // Make zombies
2655 void JavaThread::make_zombies() {
2656   for (StackFrameStream fst(this); !fst.is_done(); fst.next()) {
2657     if (fst.current()->can_be_deoptimized()) {
2658       // it is a Java nmethod
2659       nmethod* nm = CodeCache::find_nmethod(fst.current()->pc());
2660       nm->make_not_entrant();
2661     }
2662   }
2663 }
2664 #endif // PRODUCT
2665 
2666 
2667 void JavaThread::deoptimized_wrt_marked_nmethods() {
2668   if (!has_last_Java_frame()) return;
2669   // BiasedLocking needs an updated RegisterMap for the revoke monitors pass
2670   StackFrameStream fst(this, UseBiasedLocking);
2671   for (; !fst.is_done(); fst.next()) {
2672     if (fst.current()->should_be_deoptimized()) {






2673       Deoptimization::deoptimize(this, *fst.current(), fst.register_map());
2674     }
2675   }
2676 }
2677 
2678 
2679 // If the caller is a NamedThread, then remember, in the current scope,
2680 // the given JavaThread in its _processed_thread field.
2681 class RememberProcessedThread: public StackObj {
2682   NamedThread* _cur_thr;
2683  public:
2684   RememberProcessedThread(JavaThread* jthr) {
2685     Thread* thread = Thread::current();
2686     if (thread->is_Named_thread()) {
2687       _cur_thr = (NamedThread *)thread;
2688       _cur_thr->set_processed_thread(jthr);
2689     } else {
2690       _cur_thr = NULL;
2691     }
2692   }
2693 
2694   ~RememberProcessedThread() {
2695     if (_cur_thr) {
2696       _cur_thr->set_processed_thread(NULL);
2697     }
2698   }
2699 };
2700 
2701 void JavaThread::oops_do(OopClosure* f, CLDClosure* cld_f, CodeBlobClosure* cf) {
2702   // Verify that the deferred card marks have been flushed.
2703   assert(deferred_card_mark().is_empty(), "Should be empty during GC");
2704 
2705   // The ThreadProfiler oops_do is done from FlatProfiler::oops_do
2706   // since there may be more than one thread using each ThreadProfiler.
2707 
2708   // Traverse the GCHandles
2709   Thread::oops_do(f, cld_f, cf);
2710 
2711   JVMCI_ONLY(f->do_oop((oop*)&_pending_failed_speculation);)
2712 
2713   assert((!has_last_Java_frame() && java_call_counter() == 0) ||
2714          (has_last_Java_frame() && java_call_counter() > 0), "wrong java_sp info!");
2715 
2716   if (has_last_Java_frame()) {
2717     // Record JavaThread to GC thread
2718     RememberProcessedThread rpt(this);
2719 
2720     // Traverse the privileged stack
2721     if (_privileged_stack_top != NULL) {
2722       _privileged_stack_top->oops_do(f);
2723     }
2724 
2725     // traverse the registered growable array
2726     if (_array_for_gc != NULL) {
2727       for (int index = 0; index < _array_for_gc->length(); index++) {
2728         f->do_oop(_array_for_gc->adr_at(index));
2729       }
2730     }
2731 
2732     // Traverse the monitor chunks


3210   NMethodSweeper::sweeper_loop();
3211 }
3212 
3213 // Create a CompilerThread
3214 CompilerThread::CompilerThread(CompileQueue* queue,
3215                                CompilerCounters* counters)
3216                                : JavaThread(&compiler_thread_entry) {
3217   _env   = NULL;
3218   _log   = NULL;
3219   _task  = NULL;
3220   _queue = queue;
3221   _counters = counters;
3222   _buffer_blob = NULL;
3223   _compiler = NULL;
3224 
3225 #ifndef PRODUCT
3226   _ideal_graph_printer = NULL;
3227 #endif
3228 }
3229 
3230 bool CompilerThread::can_call_java() const {
3231   return _compiler != NULL && _compiler->is_jvmci();
3232 }
3233 
3234 // Create sweeper thread
3235 CodeCacheSweeperThread::CodeCacheSweeperThread()
3236 : JavaThread(&sweeper_thread_entry) {
3237   _scanned_nmethod = NULL;
3238 }
3239 void CodeCacheSweeperThread::oops_do(OopClosure* f, CLDClosure* cld_f, CodeBlobClosure* cf) {
3240   JavaThread::oops_do(f, cld_f, cf);
3241   if (_scanned_nmethod != NULL && cf != NULL) {
3242     // Safepoints can occur when the sweeper is scanning an nmethod so
3243     // process it here to make sure it isn't unloaded in the middle of
3244     // a scan.
3245     cf->do_code_blob(_scanned_nmethod);
3246   }
3247 }
3248 
3249 
3250 // ======= Threads ========
3251 
3252 // The Threads class links together all active threads, and provides
3253 // operations over all threads.  It is protected by its own Mutex


3419 
3420   // Convert -Xrun to -agentlib: if there is no JVM_OnLoad
3421   // Must be before create_vm_init_agents()
3422   if (Arguments::init_libraries_at_startup()) {
3423     convert_vm_init_libraries_to_agents();
3424   }
3425 
3426   // Launch -agentlib/-agentpath and converted -Xrun agents
3427   if (Arguments::init_agents_at_startup()) {
3428     create_vm_init_agents();
3429   }
3430 
3431   // Initialize Threads state
3432   _thread_list = NULL;
3433   _number_of_threads = 0;
3434   _number_of_non_daemon_threads = 0;
3435 
3436   // Initialize global data structures and create system classes in heap
3437   vm_init_globals();
3438 
3439 #if INCLUDE_JVMCI
3440   if (JVMCICounterSize > 0) {
3441     JavaThread::_jvmci_old_thread_counters = NEW_C_HEAP_ARRAY(jlong, JVMCICounterSize, mtInternal);
3442     memset(JavaThread::_jvmci_old_thread_counters, 0, sizeof(jlong) * JVMCICounterSize);
3443   } else {
3444     JavaThread::_jvmci_old_thread_counters = NULL;
3445   }
3446 #endif
3447 
3448   // Attach the main thread to this os thread
3449   JavaThread* main_thread = new JavaThread();
3450   main_thread->set_thread_state(_thread_in_vm);
3451   // must do this before set_active_handles and initialize_thread_local_storage
3452   // Note: on solaris initialize_thread_local_storage() will (indirectly)
3453   // change the stack size recorded here to one based on the java thread
3454   // stacksize. This adjusted size is what is used to figure the placement
3455   // of the guard pages.
3456   main_thread->record_stack_base_and_size();
3457   main_thread->initialize_thread_local_storage();
3458 
3459   main_thread->set_active_handles(JNIHandleBlock::allocate_block());
3460 
3461   if (!main_thread->set_as_starting_thread()) {
3462     vm_shutdown_during_initialization(
3463                                       "Failed necessary internal allocation. Out of swap space");
3464     delete main_thread;
3465     *canTryAgain = false; // don't let caller call JNI_CreateJavaVM again
3466     return JNI_ENOMEM;
3467   }


3554   }
3555 
3556   // Set flag that basic initialization has completed. Used by exceptions and various
3557   // debug stuff, that does not work until all basic classes have been initialized.
3558   set_init_completed();
3559 
3560   Metaspace::post_initialize();
3561 
3562   HOTSPOT_VM_INIT_END();
3563 
3564   // record VM initialization completion time
3565 #if INCLUDE_MANAGEMENT
3566   Management::record_vm_init_completed();
3567 #endif // INCLUDE_MANAGEMENT
3568 
3569   // Compute system loader. Note that this has to occur after set_init_completed, since
3570   // valid exceptions may be thrown in the process.
3571   // Note that we do not use CHECK_0 here since we are inside an EXCEPTION_MARK and
3572   // set_init_completed has just been called, causing exceptions not to be shortcut
3573   // anymore. We call vm_exit_during_initialization directly instead.
3574   SystemDictionary::compute_java_system_loader(CHECK_(JNI_ERR));
3575 
3576 #if INCLUDE_ALL_GCS
3577   // Support for ConcurrentMarkSweep. This should be cleaned up
3578   // and better encapsulated. The ugly nested if test would go away
3579   // once things are properly refactored. XXX YSR
3580   if (UseConcMarkSweepGC || UseG1GC) {
3581     if (UseConcMarkSweepGC) {
3582       ConcurrentMarkSweepThread::makeSurrogateLockerThread(CHECK_JNI_ERR);
3583     } else {
3584       ConcurrentMarkThread::makeSurrogateLockerThread(CHECK_JNI_ERR);
3585     }
3586   }
3587 #endif // INCLUDE_ALL_GCS
3588 
3589   // Always call even when there are not JVMTI environments yet, since environments
3590   // may be attached late and JVMTI must track phases of VM execution
3591   JvmtiExport::enter_live_phase();
3592 
3593   // Signal Dispatcher needs to be started before VMInit event is posted
3594   os::signal_init();


3602   }
3603 
3604   // Launch -Xrun agents
3605   // Must be done in the JVMTI live phase so that for backward compatibility the JDWP
3606   // back-end can launch with -Xdebug -Xrunjdwp.
3607   if (!EagerXrunInit && Arguments::init_libraries_at_startup()) {
3608     create_vm_init_libraries();
3609   }
3610 
3611   // Notify JVMTI agents that VM initialization is complete - nop if no agents.
3612   JvmtiExport::post_vm_initialized();
3613 
3614   if (TRACE_START() != JNI_OK) {
3615     vm_exit_during_initialization("Failed to start tracing backend.");
3616   }
3617 
3618   if (CleanChunkPoolAsync) {
3619     Chunk::start_chunk_pool_cleaner_task();
3620   }
3621 
3622 #if INCLUDE_JVMCI
3623   if (EnableJVMCI) {
3624     const char* jvmciCompiler = Arguments::PropertyList_get_value(Arguments::system_properties(), "jvmci.compiler");
3625     if (jvmciCompiler != NULL) {
3626       JVMCIRuntime::save_compiler(jvmciCompiler);
3627     }
3628     const char* jvmciOptions = Arguments::PropertyList_get_value(Arguments::system_properties(), "jvmci.options");
3629     if (jvmciOptions != NULL) {
3630       JVMCIRuntime::save_options(jvmciOptions);
3631     }
3632   }
3633 #endif
3634 
3635   // initialize compiler(s)
3636 #if defined(COMPILER1) || defined(COMPILER2) || defined(SHARK) || INCLUDE_JVMCI
3637   CompileBroker::compilation_init();
3638 #endif
3639 
3640   // Pre-initialize some JSR292 core classes to avoid deadlock during class loading.
3641   // It is done after compilers are initialized, because otherwise compilations of
3642   // signature polymorphic MH intrinsics can be missed
3643   // (see SystemDictionary::find_method_handle_intrinsic).
3644   initialize_jsr292_core_classes(CHECK_JNI_ERR);
3645 
3646 #if INCLUDE_MANAGEMENT
3647   Management::initialize(THREAD);
3648 
3649   if (HAS_PENDING_EXCEPTION) {
3650     // management agent fails to start possibly due to
3651     // configuration problem and is responsible for printing
3652     // stack trace if appropriate. Simply exit VM.
3653     vm_exit(1);
3654   }
3655 #endif // INCLUDE_MANAGEMENT
3656 


4024 
4025   // Now, all Java threads are gone except daemon threads. Daemon threads
4026   // running Java code or in VM are stopped by the Safepoint. However,
4027   // daemon threads executing native code are still running.  But they
4028   // will be stopped at native=>Java/VM barriers. Note that we can't
4029   // simply kill or suspend them, as it is inherently deadlock-prone.
4030 
4031 #ifndef PRODUCT
4032   // disable function tracing at JNI/JVM barriers
4033   TraceJNICalls = false;
4034   TraceJVMCalls = false;
4035   TraceRuntimeCalls = false;
4036 #endif
4037 
4038   VM_Exit::set_vm_exited();
4039 
4040   notify_vm_shutdown();
4041 
4042   delete thread;
4043 
4044 #if INCLUDE_JVMCI
4045   if (JVMCICounterSize > 0) {
4046     FREE_C_HEAP_ARRAY(jlong, JavaThread::_jvmci_old_thread_counters);
4047   }
4048 #endif
4049 
4050   // exit_globals() will delete tty
4051   exit_globals();
4052 
4053   return true;
4054 }
4055 
4056 
4057 jboolean Threads::is_supported_jni_version_including_1_1(jint version) {
4058   if (version == JNI_VERSION_1_1) return JNI_TRUE;
4059   return is_supported_jni_version(version);
4060 }
4061 
4062 
4063 jboolean Threads::is_supported_jni_version(jint version) {
4064   if (version == JNI_VERSION_1_2) return JNI_TRUE;
4065   if (version == JNI_VERSION_1_4) return JNI_TRUE;
4066   if (version == JNI_VERSION_1_6) return JNI_TRUE;
4067   if (version == JNI_VERSION_1_8) return JNI_TRUE;
4068   return JNI_FALSE;
4069 }


4246 
4247 void Threads::deoptimized_wrt_marked_nmethods() {
4248   ALL_JAVA_THREADS(p) {
4249     p->deoptimized_wrt_marked_nmethods();
4250   }
4251 }
4252 
4253 
4254 // Get count Java threads that are waiting to enter the specified monitor.
4255 GrowableArray<JavaThread*>* Threads::get_pending_threads(int count,
4256                                                          address monitor,
4257                                                          bool doLock) {
4258   assert(doLock || SafepointSynchronize::is_at_safepoint(),
4259          "must grab Threads_lock or be at safepoint");
4260   GrowableArray<JavaThread*>* result = new GrowableArray<JavaThread*>(count);
4261 
4262   int i = 0;
4263   {
4264     MutexLockerEx ml(doLock ? Threads_lock : NULL);
4265     ALL_JAVA_THREADS(p) {
4266       if (!p->can_call_java()) continue;
4267 
4268       address pending = (address)p->current_pending_monitor();
4269       if (pending == monitor) {             // found a match
4270         if (i < count) result->append(p);   // save the first count matches
4271         i++;
4272       }
4273     }
4274   }
4275   return result;
4276 }
4277 
4278 
4279 JavaThread *Threads::owning_thread_from_monitor_owner(address owner,
4280                                                       bool doLock) {
4281   assert(doLock ||
4282          Threads_lock->owned_by_self() ||
4283          SafepointSynchronize::is_at_safepoint(),
4284          "must grab Threads_lock or be at safepoint");
4285 
4286   // NULL owner means not locked so we can skip the search


4303   // Lock Word in the owning Java thread's stack.
4304   //
4305   JavaThread* the_owner = NULL;
4306   {
4307     MutexLockerEx ml(doLock ? Threads_lock : NULL);
4308     ALL_JAVA_THREADS(q) {
4309       if (q->is_lock_owned(owner)) {
4310         the_owner = q;
4311         break;
4312       }
4313     }
4314   }
4315   // cannot assert on lack of success here; see above comment
4316   return the_owner;
4317 }
4318 
4319 // Threads::print_on() is called at safepoint by VM_PrintThreads operation.
4320 void Threads::print_on(outputStream* st, bool print_stacks,
4321                        bool internal_format, bool print_concurrent_locks) {
4322   char buf[32];
4323   st->print_raw_cr(os::local_time_string(buf, sizeof(buf)));
4324 
4325   st->print_cr("Full thread dump %s (%s %s):",
4326                Abstract_VM_Version::vm_name(),
4327                Abstract_VM_Version::vm_release(),
4328                Abstract_VM_Version::vm_info_string());
4329   st->cr();
4330 
4331 #if INCLUDE_SERVICES
4332   // Dump concurrent locks
4333   ConcurrentLocksDump concurrent_locks;
4334   if (print_concurrent_locks) {
4335     concurrent_locks.dump_at_safepoint();
4336   }
4337 #endif // INCLUDE_SERVICES
4338 
4339   ALL_JAVA_THREADS(p) {
4340     ResourceMark rm;
4341     p->print_on(st);
4342     if (print_stacks) {
4343       if (internal_format) {


src/share/vm/runtime/thread.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File