Print this page


Split Close
Expand all
Collapse all
          --- old/src/share/vm/runtime/thread.cpp
          +++ new/src/share/vm/runtime/thread.cpp
↓ open down ↓ 988 lines elided ↑ open up ↑
 989  989  
 990  990  static void call_initializeSystemClass(TRAPS) {
 991  991    klassOop k =  SystemDictionary::resolve_or_fail(vmSymbols::java_lang_System(), true, CHECK);
 992  992    instanceKlassHandle klass (THREAD, k);
 993  993  
 994  994    JavaValue result(T_VOID);
 995  995    JavaCalls::call_static(&result, klass, vmSymbols::initializeSystemClass_name(),
 996  996                                           vmSymbols::void_method_signature(), CHECK);
 997  997  }
 998  998  
      999 +char java_runtime_name[128] = "";
     1000 +
     1001 +// extract the JRE name from sun.misc.Version.java_runtime_name
     1002 +static const char* get_java_runtime_name(TRAPS) {
     1003 +  klassOop k = SystemDictionary::find(vmSymbols::sun_misc_Version(),
     1004 +                                      Handle(), Handle(), CHECK_AND_CLEAR_NULL);
     1005 +  fieldDescriptor fd;
     1006 +  bool found = k != NULL &&
     1007 +               instanceKlass::cast(k)->find_local_field(vmSymbols::java_runtime_name_name(),
     1008 +                                                        vmSymbols::string_signature(), &fd);
     1009 +  if (found) {
     1010 +    oop name_oop = k->java_mirror()->obj_field(fd.offset());
     1011 +    if (name_oop == NULL)
     1012 +      return NULL;
     1013 +    const char* name = java_lang_String::as_utf8_string(name_oop,
     1014 +                                                        java_runtime_name,
     1015 +                                                        sizeof(java_runtime_name));
     1016 +    return name;
     1017 +  } else {
     1018 +    return NULL;
     1019 +  }
     1020 +}
     1021 +
 999 1022  // General purpose hook into Java code, run once when the VM is initialized.
1000 1023  // The Java library method itself may be changed independently from the VM.
1001 1024  static void call_postVMInitHook(TRAPS) {
1002 1025    klassOop k = SystemDictionary::PostVMInitHook_klass();
1003 1026    instanceKlassHandle klass (THREAD, k);
1004 1027    if (klass.not_null()) {
1005 1028      JavaValue result(T_VOID);
1006 1029      JavaCalls::call_static(&result, klass, vmSymbols::run_method_name(),
1007 1030                                             vmSymbols::void_method_signature(),
1008 1031                                             CHECK);
↓ open down ↓ 2336 lines elided ↑ open up ↑
3345 3368        // been started and running.
3346 3369        java_lang_Thread::set_thread_status(thread_object,
3347 3370                                            java_lang_Thread::RUNNABLE);
3348 3371  
3349 3372        // The VM preresolve methods to these classes. Make sure that get initialized
3350 3373        initialize_class(vmSymbols::java_lang_reflect_Method(), CHECK_0);
3351 3374        initialize_class(vmSymbols::java_lang_ref_Finalizer(),  CHECK_0);
3352 3375        // The VM creates & returns objects of this class. Make sure it's initialized.
3353 3376        initialize_class(vmSymbols::java_lang_Class(), CHECK_0);
3354 3377        call_initializeSystemClass(CHECK_0);
     3378 +
     3379 +      // get the Java runtime name after java.lang.System is initialized
     3380 +      JDK_Version::set_runtime_name(get_java_runtime_name(THREAD));
3355 3381      } else {
3356 3382        warning("java.lang.System not initialized");
3357 3383      }
3358 3384  
3359 3385      // an instance of OutOfMemory exception has been allocated earlier
3360 3386      if (InitializeJavaLangExceptionsErrors) {
3361 3387        initialize_class(vmSymbols::java_lang_OutOfMemoryError(), CHECK_0);
3362 3388        initialize_class(vmSymbols::java_lang_NullPointerException(), CHECK_0);
3363 3389        initialize_class(vmSymbols::java_lang_ClassCastException(), CHECK_0);
3364 3390        initialize_class(vmSymbols::java_lang_ArrayStoreException(), CHECK_0);
↓ open down ↓ 1124 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX