hotspot/src/share/vm/runtime/thread.cpp
changeset 13728 882756847a04
parent 13196 6b399731153b
child 13744 631fe815def5
equal deleted inserted replaced
13727:caf5eb7dd4a7 13728:882756847a04
    32 #include "interpreter/interpreter.hpp"
    32 #include "interpreter/interpreter.hpp"
    33 #include "interpreter/linkResolver.hpp"
    33 #include "interpreter/linkResolver.hpp"
    34 #include "interpreter/oopMapCache.hpp"
    34 #include "interpreter/oopMapCache.hpp"
    35 #include "jvmtifiles/jvmtiEnv.hpp"
    35 #include "jvmtifiles/jvmtiEnv.hpp"
    36 #include "memory/gcLocker.inline.hpp"
    36 #include "memory/gcLocker.inline.hpp"
       
    37 #include "memory/metaspaceShared.hpp"
    37 #include "memory/oopFactory.hpp"
    38 #include "memory/oopFactory.hpp"
    38 #include "memory/universe.inline.hpp"
    39 #include "memory/universe.inline.hpp"
    39 #include "oops/instanceKlass.hpp"
    40 #include "oops/instanceKlass.hpp"
    40 #include "oops/objArrayOop.hpp"
    41 #include "oops/objArrayOop.hpp"
    41 #include "oops/oop.inline.hpp"
    42 #include "oops/oop.inline.hpp"
   217 
   218 
   218   // allocated data structures
   219   // allocated data structures
   219   set_osthread(NULL);
   220   set_osthread(NULL);
   220   set_resource_area(new (mtThread)ResourceArea());
   221   set_resource_area(new (mtThread)ResourceArea());
   221   set_handle_area(new (mtThread) HandleArea(NULL));
   222   set_handle_area(new (mtThread) HandleArea(NULL));
       
   223   set_metadata_handles(new (ResourceObj::C_HEAP, mtClass) GrowableArray<Metadata*>(300, true));
   222   set_active_handles(NULL);
   224   set_active_handles(NULL);
   223   set_free_handle_block(NULL);
   225   set_free_handle_block(NULL);
   224   set_last_handle_mark(NULL);
   226   set_last_handle_mark(NULL);
   225 
   227 
   226   // This initial value ==> never claimed.
   228   // This initial value ==> never claimed.
   344   ParkEvent::Release (_SleepEvent)  ; _SleepEvent  = NULL ;
   346   ParkEvent::Release (_SleepEvent)  ; _SleepEvent  = NULL ;
   345   ParkEvent::Release (_MutexEvent)  ; _MutexEvent  = NULL ;
   347   ParkEvent::Release (_MutexEvent)  ; _MutexEvent  = NULL ;
   346   ParkEvent::Release (_MuxEvent)    ; _MuxEvent    = NULL ;
   348   ParkEvent::Release (_MuxEvent)    ; _MuxEvent    = NULL ;
   347 
   349 
   348   delete handle_area();
   350   delete handle_area();
       
   351   delete metadata_handles();
   349 
   352 
   350   // osthread() can be NULL, if creation of thread failed.
   353   // osthread() can be NULL, if creation of thread failed.
   351   if (osthread() != NULL) os::free_thread(osthread());
   354   if (osthread() != NULL) os::free_thread(osthread());
   352 
   355 
   353   delete _SR_lock;
   356   delete _SR_lock;
   815 
   818 
   816 void Thread::nmethods_do(CodeBlobClosure* cf) {
   819 void Thread::nmethods_do(CodeBlobClosure* cf) {
   817   // no nmethods in a generic thread...
   820   // no nmethods in a generic thread...
   818 }
   821 }
   819 
   822 
       
   823 void Thread::metadata_do(void f(Metadata*)) {
       
   824   if (metadata_handles() != NULL) {
       
   825     for (int i = 0; i< metadata_handles()->length(); i++) {
       
   826       f(metadata_handles()->at(i));
       
   827     }
       
   828   }
       
   829 }
       
   830 
   820 void Thread::print_on(outputStream* st) const {
   831 void Thread::print_on(outputStream* st) const {
   821   // get_priority assumes osthread initialized
   832   // get_priority assumes osthread initialized
   822   if (osthread() != NULL) {
   833   if (osthread() != NULL) {
   823     st->print("prio=%d tid=" INTPTR_FORMAT " ", get_priority(this), this);
   834     st->print("prio=%d tid=" INTPTR_FORMAT " ", get_priority(this), this);
   824     osthread()->print_on(st);
   835     osthread()->print_on(st);
   914 #endif
   925 #endif
   915 
   926 
   916 bool Thread::is_in_stack(address adr) const {
   927 bool Thread::is_in_stack(address adr) const {
   917   assert(Thread::current() == this, "is_in_stack can only be called from current thread");
   928   assert(Thread::current() == this, "is_in_stack can only be called from current thread");
   918   address end = os::current_stack_pointer();
   929   address end = os::current_stack_pointer();
       
   930   // Allow non Java threads to call this without stack_base
       
   931   if (_stack_base == NULL) return true;
   919   if (stack_base() >= adr && adr >= end) return true;
   932   if (stack_base() >= adr && adr >= end) return true;
   920 
   933 
   921   return false;
   934   return false;
   922 }
   935 }
   923 
   936 
   935  // NOTE: this must be called inside the main thread.
   948  // NOTE: this must be called inside the main thread.
   936   return os::create_main_thread((JavaThread*)this);
   949   return os::create_main_thread((JavaThread*)this);
   937 }
   950 }
   938 
   951 
   939 static void initialize_class(Symbol* class_name, TRAPS) {
   952 static void initialize_class(Symbol* class_name, TRAPS) {
   940   klassOop klass = SystemDictionary::resolve_or_fail(class_name, true, CHECK);
   953   Klass* klass = SystemDictionary::resolve_or_fail(class_name, true, CHECK);
   941   instanceKlass::cast(klass)->initialize(CHECK);
   954   InstanceKlass::cast(klass)->initialize(CHECK);
   942 }
   955 }
   943 
   956 
   944 
   957 
   945 // Creates the initial ThreadGroup
   958 // Creates the initial ThreadGroup
   946 static Handle create_initial_thread_group(TRAPS) {
   959 static Handle create_initial_thread_group(TRAPS) {
   947   klassOop k = SystemDictionary::resolve_or_fail(vmSymbols::java_lang_ThreadGroup(), true, CHECK_NH);
   960   Klass* k = SystemDictionary::resolve_or_fail(vmSymbols::java_lang_ThreadGroup(), true, CHECK_NH);
   948   instanceKlassHandle klass (THREAD, k);
   961   instanceKlassHandle klass (THREAD, k);
   949 
   962 
   950   Handle system_instance = klass->allocate_instance_handle(CHECK_NH);
   963   Handle system_instance = klass->allocate_instance_handle(CHECK_NH);
   951   {
   964   {
   952     JavaValue result(T_VOID);
   965     JavaValue result(T_VOID);
   975   return main_instance;
   988   return main_instance;
   976 }
   989 }
   977 
   990 
   978 // Creates the initial Thread
   991 // Creates the initial Thread
   979 static oop create_initial_thread(Handle thread_group, JavaThread* thread, TRAPS) {
   992 static oop create_initial_thread(Handle thread_group, JavaThread* thread, TRAPS) {
   980   klassOop k = SystemDictionary::resolve_or_fail(vmSymbols::java_lang_Thread(), true, CHECK_NULL);
   993   Klass* k = SystemDictionary::resolve_or_fail(vmSymbols::java_lang_Thread(), true, CHECK_NULL);
   981   instanceKlassHandle klass (THREAD, k);
   994   instanceKlassHandle klass (THREAD, k);
   982   instanceHandle thread_oop = klass->allocate_instance_handle(CHECK_NULL);
   995   instanceHandle thread_oop = klass->allocate_instance_handle(CHECK_NULL);
   983 
   996 
   984   java_lang_Thread::set_thread(thread_oop(), thread);
   997   java_lang_Thread::set_thread(thread_oop(), thread);
   985   java_lang_Thread::set_priority(thread_oop(), NormPriority);
   998   java_lang_Thread::set_priority(thread_oop(), NormPriority);
   997                                    CHECK_NULL);
  1010                                    CHECK_NULL);
   998   return thread_oop();
  1011   return thread_oop();
   999 }
  1012 }
  1000 
  1013 
  1001 static void call_initializeSystemClass(TRAPS) {
  1014 static void call_initializeSystemClass(TRAPS) {
  1002   klassOop k =  SystemDictionary::resolve_or_fail(vmSymbols::java_lang_System(), true, CHECK);
  1015   Klass* k =  SystemDictionary::resolve_or_fail(vmSymbols::java_lang_System(), true, CHECK);
  1003   instanceKlassHandle klass (THREAD, k);
  1016   instanceKlassHandle klass (THREAD, k);
  1004 
  1017 
  1005   JavaValue result(T_VOID);
  1018   JavaValue result(T_VOID);
  1006   JavaCalls::call_static(&result, klass, vmSymbols::initializeSystemClass_name(),
  1019   JavaCalls::call_static(&result, klass, vmSymbols::initializeSystemClass_name(),
  1007                                          vmSymbols::void_method_signature(), CHECK);
  1020                                          vmSymbols::void_method_signature(), CHECK);
  1009 
  1022 
  1010 char java_runtime_name[128] = "";
  1023 char java_runtime_name[128] = "";
  1011 
  1024 
  1012 // extract the JRE name from sun.misc.Version.java_runtime_name
  1025 // extract the JRE name from sun.misc.Version.java_runtime_name
  1013 static const char* get_java_runtime_name(TRAPS) {
  1026 static const char* get_java_runtime_name(TRAPS) {
  1014   klassOop k = SystemDictionary::find(vmSymbols::sun_misc_Version(),
  1027   Klass* k = SystemDictionary::find(vmSymbols::sun_misc_Version(),
  1015                                       Handle(), Handle(), CHECK_AND_CLEAR_NULL);
  1028                                       Handle(), Handle(), CHECK_AND_CLEAR_NULL);
  1016   fieldDescriptor fd;
  1029   fieldDescriptor fd;
  1017   bool found = k != NULL &&
  1030   bool found = k != NULL &&
  1018                instanceKlass::cast(k)->find_local_field(vmSymbols::java_runtime_name_name(),
  1031                InstanceKlass::cast(k)->find_local_field(vmSymbols::java_runtime_name_name(),
  1019                                                         vmSymbols::string_signature(), &fd);
  1032                                                         vmSymbols::string_signature(), &fd);
  1020   if (found) {
  1033   if (found) {
  1021     oop name_oop = k->java_mirror()->obj_field(fd.offset());
  1034     oop name_oop = k->java_mirror()->obj_field(fd.offset());
  1022     if (name_oop == NULL)
  1035     if (name_oop == NULL)
  1023       return NULL;
  1036       return NULL;
  1031 }
  1044 }
  1032 
  1045 
  1033 // General purpose hook into Java code, run once when the VM is initialized.
  1046 // General purpose hook into Java code, run once when the VM is initialized.
  1034 // The Java library method itself may be changed independently from the VM.
  1047 // The Java library method itself may be changed independently from the VM.
  1035 static void call_postVMInitHook(TRAPS) {
  1048 static void call_postVMInitHook(TRAPS) {
  1036   klassOop k = SystemDictionary::PostVMInitHook_klass();
  1049   Klass* k = SystemDictionary::PostVMInitHook_klass();
  1037   instanceKlassHandle klass (THREAD, k);
  1050   instanceKlassHandle klass (THREAD, k);
  1038   if (klass.not_null()) {
  1051   if (klass.not_null()) {
  1039     JavaValue result(T_VOID);
  1052     JavaValue result(T_VOID);
  1040     JavaCalls::call_static(&result, klass, vmSymbols::run_method_name(),
  1053     JavaCalls::call_static(&result, klass, vmSymbols::run_method_name(),
  1041                                            vmSymbols::void_method_signature(),
  1054                                            vmSymbols::void_method_signature(),
  1047   // the vm info string
  1060   // the vm info string
  1048   ResourceMark rm(THREAD);
  1061   ResourceMark rm(THREAD);
  1049   const char *vm_info = VM_Version::vm_info_string();
  1062   const char *vm_info = VM_Version::vm_info_string();
  1050 
  1063 
  1051   // java.lang.System class
  1064   // java.lang.System class
  1052   klassOop k =  SystemDictionary::resolve_or_fail(vmSymbols::java_lang_System(), true, CHECK);
  1065   Klass* k =  SystemDictionary::resolve_or_fail(vmSymbols::java_lang_System(), true, CHECK);
  1053   instanceKlassHandle klass (THREAD, k);
  1066   instanceKlassHandle klass (THREAD, k);
  1054 
  1067 
  1055   // setProperty arguments
  1068   // setProperty arguments
  1056   Handle key_str    = java_lang_String::create_from_str("java.vm.info", CHECK);
  1069   Handle key_str    = java_lang_String::create_from_str("java.vm.info", CHECK);
  1057   Handle value_str  = java_lang_String::create_from_str(vm_info, CHECK);
  1070   Handle value_str  = java_lang_String::create_from_str(vm_info, CHECK);
  1072 
  1085 
  1073 void JavaThread::allocate_threadObj(Handle thread_group, char* thread_name, bool daemon, TRAPS) {
  1086 void JavaThread::allocate_threadObj(Handle thread_group, char* thread_name, bool daemon, TRAPS) {
  1074   assert(thread_group.not_null(), "thread group should be specified");
  1087   assert(thread_group.not_null(), "thread group should be specified");
  1075   assert(threadObj() == NULL, "should only create Java thread object once");
  1088   assert(threadObj() == NULL, "should only create Java thread object once");
  1076 
  1089 
  1077   klassOop k = SystemDictionary::resolve_or_fail(vmSymbols::java_lang_Thread(), true, CHECK);
  1090   Klass* k = SystemDictionary::resolve_or_fail(vmSymbols::java_lang_Thread(), true, CHECK);
  1078   instanceKlassHandle klass (THREAD, k);
  1091   instanceKlassHandle klass (THREAD, k);
  1079   instanceHandle thread_oop = klass->allocate_instance_handle(CHECK);
  1092   instanceHandle thread_oop = klass->allocate_instance_handle(CHECK);
  1080 
  1093 
  1081   java_lang_Thread::set_thread(thread_oop(), this);
  1094   java_lang_Thread::set_thread(thread_oop(), this);
  1082   java_lang_Thread::set_priority(thread_oop(), NormPriority);
  1095   java_lang_Thread::set_priority(thread_oop(), NormPriority);
  1980         tty->print("Async. exception installed at runtime exit (" INTPTR_FORMAT ")", this);
  1993         tty->print("Async. exception installed at runtime exit (" INTPTR_FORMAT ")", this);
  1981         if (has_last_Java_frame() ) {
  1994         if (has_last_Java_frame() ) {
  1982           frame f = last_frame();
  1995           frame f = last_frame();
  1983           tty->print(" (pc: " INTPTR_FORMAT " sp: " INTPTR_FORMAT " )", f.pc(), f.sp());
  1996           tty->print(" (pc: " INTPTR_FORMAT " sp: " INTPTR_FORMAT " )", f.pc(), f.sp());
  1984         }
  1997         }
  1985         tty->print_cr(" of type: %s", instanceKlass::cast(_pending_async_exception->klass())->external_name());
  1998         tty->print_cr(" of type: %s", InstanceKlass::cast(_pending_async_exception->klass())->external_name());
  1986       }
  1999       }
  1987       _pending_async_exception = NULL;
  2000       _pending_async_exception = NULL;
  1988       clear_has_async_exception();
  2001       clear_has_async_exception();
  1989     }
  2002     }
  1990   }
  2003   }
  2101       // Set async. pending exception in thread.
  2114       // Set async. pending exception in thread.
  2102       set_pending_async_exception(java_throwable);
  2115       set_pending_async_exception(java_throwable);
  2103 
  2116 
  2104       if (TraceExceptions) {
  2117       if (TraceExceptions) {
  2105        ResourceMark rm;
  2118        ResourceMark rm;
  2106        tty->print_cr("Pending Async. exception installed of type: %s", instanceKlass::cast(_pending_async_exception->klass())->external_name());
  2119        tty->print_cr("Pending Async. exception installed of type: %s", InstanceKlass::cast(_pending_async_exception->klass())->external_name());
  2107       }
  2120       }
  2108       // for AbortVMOnException flag
  2121       // for AbortVMOnException flag
  2109       NOT_PRODUCT(Exceptions::debug_check_abort(instanceKlass::cast(_pending_async_exception->klass())->external_name()));
  2122       NOT_PRODUCT(Exceptions::debug_check_abort(InstanceKlass::cast(_pending_async_exception->klass())->external_name()));
  2110     }
  2123     }
  2111   }
  2124   }
  2112 
  2125 
  2113 
  2126 
  2114   // Interrupt thread so it will wake up from a potential wait()
  2127   // Interrupt thread so it will wake up from a potential wait()
  2654 
  2667 
  2655   // Traverse instance variables at the end since the GC may be moving things
  2668   // Traverse instance variables at the end since the GC may be moving things
  2656   // around using this function
  2669   // around using this function
  2657   f->do_oop((oop*) &_threadObj);
  2670   f->do_oop((oop*) &_threadObj);
  2658   f->do_oop((oop*) &_vm_result);
  2671   f->do_oop((oop*) &_vm_result);
  2659   f->do_oop((oop*) &_vm_result_2);
       
  2660   f->do_oop((oop*) &_exception_oop);
  2672   f->do_oop((oop*) &_exception_oop);
  2661   f->do_oop((oop*) &_pending_async_exception);
  2673   f->do_oop((oop*) &_pending_async_exception);
  2662 
  2674 
  2663   if (jvmti_thread_state() != NULL) {
  2675   if (jvmti_thread_state() != NULL) {
  2664     jvmti_thread_state()->oops_do(f);
  2676     jvmti_thread_state()->oops_do(f);
  2673 
  2685 
  2674   if (has_last_Java_frame()) {
  2686   if (has_last_Java_frame()) {
  2675     // Traverse the execution stack
  2687     // Traverse the execution stack
  2676     for(StackFrameStream fst(this); !fst.is_done(); fst.next()) {
  2688     for(StackFrameStream fst(this); !fst.is_done(); fst.next()) {
  2677       fst.current()->nmethods_do(cf);
  2689       fst.current()->nmethods_do(cf);
       
  2690     }
       
  2691   }
       
  2692 }
       
  2693 
       
  2694 void JavaThread::metadata_do(void f(Metadata*)) {
       
  2695   Thread::metadata_do(f);
       
  2696   if (has_last_Java_frame()) {
       
  2697     // Traverse the execution stack to call f() on the methods in the stack
       
  2698     for(StackFrameStream fst(this); !fst.is_done(); fst.next()) {
       
  2699       fst.current()->metadata_do(f);
       
  2700     }
       
  2701   } else if (is_Compiler_thread()) {
       
  2702     // need to walk ciMetadata in current compile tasks to keep alive.
       
  2703     CompilerThread* ct = (CompilerThread*)this;
       
  2704     if (ct->env() != NULL) {
       
  2705       ct->env()->metadata_do(f);
  2678     }
  2706     }
  2679   }
  2707   }
  2680 }
  2708 }
  2681 
  2709 
  2682 // Printing
  2710 // Printing
  2867   // Set the thread field (a JavaThread *) of the
  2895   // Set the thread field (a JavaThread *) of the
  2868   // oop representing the java_lang_Thread to the new thread (a JavaThread *).
  2896   // oop representing the java_lang_Thread to the new thread (a JavaThread *).
  2869 
  2897 
  2870   Handle thread_oop(Thread::current(),
  2898   Handle thread_oop(Thread::current(),
  2871                     JNIHandles::resolve_non_null(jni_thread));
  2899                     JNIHandles::resolve_non_null(jni_thread));
  2872   assert(instanceKlass::cast(thread_oop->klass())->is_linked(),
  2900   assert(InstanceKlass::cast(thread_oop->klass())->is_linked(),
  2873     "must be initialized");
  2901     "must be initialized");
  2874   set_threadObj(thread_oop());
  2902   set_threadObj(thread_oop());
  2875   java_lang_Thread::set_thread(thread_oop(), this);
  2903   java_lang_Thread::set_thread(thread_oop(), this);
  2876 
  2904 
  2877   if (prio == NoPriority) {
  2905   if (prio == NoPriority) {
  3068   }
  3096   }
  3069   return NULL;
  3097   return NULL;
  3070 }
  3098 }
  3071 
  3099 
  3072 
  3100 
  3073 klassOop JavaThread::security_get_caller_class(int depth) {
  3101 Klass* JavaThread::security_get_caller_class(int depth) {
  3074   vframeStream vfst(this);
  3102   vframeStream vfst(this);
  3075   vfst.security_get_caller_frame(depth);
  3103   vfst.security_get_caller_frame(depth);
  3076   if (!vfst.at_end()) {
  3104   if (!vfst.at_end()) {
  3077     return vfst.method()->method_holder();
  3105     return vfst.method()->method_holder();
  3078   }
  3106   }
  3121 JavaThread* Threads::_thread_list = NULL;
  3149 JavaThread* Threads::_thread_list = NULL;
  3122 int         Threads::_number_of_threads = 0;
  3150 int         Threads::_number_of_threads = 0;
  3123 int         Threads::_number_of_non_daemon_threads = 0;
  3151 int         Threads::_number_of_non_daemon_threads = 0;
  3124 int         Threads::_return_code = 0;
  3152 int         Threads::_return_code = 0;
  3125 size_t      JavaThread::_stack_size_at_create = 0;
  3153 size_t      JavaThread::_stack_size_at_create = 0;
       
  3154 #ifdef ASSERT
       
  3155 bool        Threads::_vm_complete = false;
       
  3156 #endif
  3126 
  3157 
  3127 // All JavaThreads
  3158 // All JavaThreads
  3128 #define ALL_JAVA_THREADS(X) for (JavaThread* X = _thread_list; X; X = X->next())
  3159 #define ALL_JAVA_THREADS(X) for (JavaThread* X = _thread_list; X; X = X->next())
  3129 
  3160 
  3130 void os_stream();
  3161 void os_stream();
  3318   EXCEPTION_MARK;
  3349   EXCEPTION_MARK;
  3319 
  3350 
  3320   // At this point, the Universe is initialized, but we have not executed
  3351   // At this point, the Universe is initialized, but we have not executed
  3321   // any byte code.  Now is a good time (the only time) to dump out the
  3352   // any byte code.  Now is a good time (the only time) to dump out the
  3322   // internal state of the JVM for sharing.
  3353   // internal state of the JVM for sharing.
  3323 
       
  3324   if (DumpSharedSpaces) {
  3354   if (DumpSharedSpaces) {
  3325     Universe::heap()->preload_and_dump(CHECK_0);
  3355     MetaspaceShared::preload_and_dump(CHECK_0);
  3326     ShouldNotReachHere();
  3356     ShouldNotReachHere();
  3327   }
  3357   }
  3328 
  3358 
  3329   // Always call even when there are not JVMTI environments yet, since environments
  3359   // Always call even when there are not JVMTI environments yet, since environments
  3330   // may be attached late and JVMTI must track phases of VM execution
  3360   // may be attached late and JVMTI must track phases of VM execution
  3349     if (AggressiveOpts) {
  3379     if (AggressiveOpts) {
  3350       {
  3380       {
  3351         // Forcibly initialize java/util/HashMap and mutate the private
  3381         // Forcibly initialize java/util/HashMap and mutate the private
  3352         // static final "frontCacheEnabled" field before we start creating instances
  3382         // static final "frontCacheEnabled" field before we start creating instances
  3353 #ifdef ASSERT
  3383 #ifdef ASSERT
  3354         klassOop tmp_k = SystemDictionary::find(vmSymbols::java_util_HashMap(), Handle(), Handle(), CHECK_0);
  3384         Klass* tmp_k = SystemDictionary::find(vmSymbols::java_util_HashMap(), Handle(), Handle(), CHECK_0);
  3355         assert(tmp_k == NULL, "java/util/HashMap should not be loaded yet");
  3385         assert(tmp_k == NULL, "java/util/HashMap should not be loaded yet");
  3356 #endif
  3386 #endif
  3357         klassOop k_o = SystemDictionary::resolve_or_null(vmSymbols::java_util_HashMap(), Handle(), Handle(), CHECK_0);
  3387         Klass* k_o = SystemDictionary::resolve_or_null(vmSymbols::java_util_HashMap(), Handle(), Handle(), CHECK_0);
  3358         KlassHandle k = KlassHandle(THREAD, k_o);
  3388         KlassHandle k = KlassHandle(THREAD, k_o);
  3359         guarantee(k.not_null(), "Must find java/util/HashMap");
  3389         guarantee(k.not_null(), "Must find java/util/HashMap");
  3360         instanceKlassHandle ik = instanceKlassHandle(THREAD, k());
  3390         instanceKlassHandle ik = instanceKlassHandle(THREAD, k());
  3361         ik->initialize(CHECK_0);
  3391         ik->initialize(CHECK_0);
  3362         fieldDescriptor fd;
  3392         fieldDescriptor fd;
  3367       }
  3397       }
  3368 
  3398 
  3369       if (UseStringCache) {
  3399       if (UseStringCache) {
  3370         // Forcibly initialize java/lang/StringValue and mutate the private
  3400         // Forcibly initialize java/lang/StringValue and mutate the private
  3371         // static final "stringCacheEnabled" field before we start creating instances
  3401         // static final "stringCacheEnabled" field before we start creating instances
  3372         klassOop k_o = SystemDictionary::resolve_or_null(vmSymbols::java_lang_StringValue(), Handle(), Handle(), CHECK_0);
  3402         Klass* k_o = SystemDictionary::resolve_or_null(vmSymbols::java_lang_StringValue(), Handle(), Handle(), CHECK_0);
  3373         // Possible that StringValue isn't present: if so, silently don't break
  3403         // Possible that StringValue isn't present: if so, silently don't break
  3374         if (k_o != NULL) {
  3404         if (k_o != NULL) {
  3375           KlassHandle k = KlassHandle(THREAD, k_o);
  3405           KlassHandle k = KlassHandle(THREAD, k_o);
  3376           instanceKlassHandle ik = instanceKlassHandle(THREAD, k());
  3406           instanceKlassHandle ik = instanceKlassHandle(THREAD, k());
  3377           ik->initialize(CHECK_0);
  3407           ik->initialize(CHECK_0);
  3572 
  3602 
  3573   // Give os specific code one last chance to start
  3603   // Give os specific code one last chance to start
  3574   os::init_3();
  3604   os::init_3();
  3575 
  3605 
  3576   create_vm_timer.end();
  3606   create_vm_timer.end();
       
  3607 #ifdef ASSERT
       
  3608   _vm_complete = true;
       
  3609 #endif
  3577   return JNI_OK;
  3610   return JNI_OK;
  3578 }
  3611 }
  3579 
  3612 
  3580 // type for the Agent_OnLoad and JVM_OnLoad entry points
  3613 // type for the Agent_OnLoad and JVM_OnLoad entry points
  3581 extern "C" {
  3614 extern "C" {
  3779   if (this->has_pending_exception()) {
  3812   if (this->has_pending_exception()) {
  3780     this->clear_pending_exception();
  3813     this->clear_pending_exception();
  3781   }
  3814   }
  3782 
  3815 
  3783   EXCEPTION_MARK;
  3816   EXCEPTION_MARK;
  3784   klassOop k =
  3817   Klass* k =
  3785     SystemDictionary::resolve_or_null(vmSymbols::java_lang_Shutdown(),
  3818     SystemDictionary::resolve_or_null(vmSymbols::java_lang_Shutdown(),
  3786                                       THREAD);
  3819                                       THREAD);
  3787   if (k != NULL) {
  3820   if (k != NULL) {
  3788     // SystemDictionary::resolve_or_null will return null if there was
  3821     // SystemDictionary::resolve_or_null will return null if there was
  3789     // an exception.  If we cannot load the Shutdown class, just don't
  3822     // an exception.  If we cannot load the Shutdown class, just don't
  3838 //   + Return to caller
  3871 //   + Return to caller
  3839 
  3872 
  3840 bool Threads::destroy_vm() {
  3873 bool Threads::destroy_vm() {
  3841   JavaThread* thread = JavaThread::current();
  3874   JavaThread* thread = JavaThread::current();
  3842 
  3875 
       
  3876 #ifdef ASSERT
       
  3877   _vm_complete = false;
       
  3878 #endif
  3843   // Wait until we are the last non-daemon thread to execute
  3879   // Wait until we are the last non-daemon thread to execute
  3844   { MutexLocker nu(Threads_lock);
  3880   { MutexLocker nu(Threads_lock);
  3845     while (Threads::number_of_non_daemon_threads() > 1 )
  3881     while (Threads::number_of_non_daemon_threads() > 1 )
  3846       // This wait should make safepoint checks, wait without a timeout,
  3882       // This wait should make safepoint checks, wait without a timeout,
  3847       // and wait as a suspend-equivalent condition.
  3883       // and wait as a suspend-equivalent condition.
  4096 void Threads::nmethods_do(CodeBlobClosure* cf) {
  4132 void Threads::nmethods_do(CodeBlobClosure* cf) {
  4097   ALL_JAVA_THREADS(p) {
  4133   ALL_JAVA_THREADS(p) {
  4098     p->nmethods_do(cf);
  4134     p->nmethods_do(cf);
  4099   }
  4135   }
  4100   VMThread::vm_thread()->nmethods_do(cf);
  4136   VMThread::vm_thread()->nmethods_do(cf);
       
  4137 }
       
  4138 
       
  4139 void Threads::metadata_do(void f(Metadata*)) {
       
  4140   ALL_JAVA_THREADS(p) {
       
  4141     p->metadata_do(f);
       
  4142   }
  4101 }
  4143 }
  4102 
  4144 
  4103 void Threads::gc_epilogue() {
  4145 void Threads::gc_epilogue() {
  4104   ALL_JAVA_THREADS(p) {
  4146   ALL_JAVA_THREADS(p) {
  4105     p->gc_epilogue();
  4147     p->gc_epilogue();