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 "cds/cds_globals.hpp"
28 #include "cds/cdsConfig.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 "compiler/compileBroker.hpp"
37 #include "compiler/compileTask.hpp"
38 #include "compiler/compilerThread.hpp"
39 #include "gc/shared/barrierSet.hpp"
40 #include "gc/shared/barrierSetNMethod.hpp"
41 #include "gc/shared/gcVMOperations.hpp"
42 #include "gc/shared/oopStorage.hpp"
43 #include "gc/shared/oopStorageSet.hpp"
44 #include "gc/shared/stringdedup/stringDedup.hpp"
45 #include "jfr/jfrEvents.hpp"
46 #include "jvm.h"
47 #include "jvmtifiles/jvmtiEnv.hpp"
48 #include "logging/log.hpp"
49 #include "logging/logAsyncWriter.hpp"
50 #include "logging/logConfiguration.hpp"
51 #include "memory/allocation.inline.hpp"
52 #include "memory/iterator.hpp"
53 #include "memory/oopFactory.hpp"
54 #include "memory/resourceArea.hpp"
55 #include "memory/universe.hpp"
56 #include "nmt/memTracker.hpp"
57 #include "oops/instanceKlass.hpp"
58 #include "oops/klass.inline.hpp"
59 #include "oops/oop.inline.hpp"
60 #include "oops/symbol.hpp"
61 #include "prims/jvm_misc.hpp"
62 #include "prims/jvmtiAgentList.hpp"
63 #include "prims/jvmtiEnvBase.hpp"
64 #include "runtime/arguments.hpp"
89 #include "runtime/thread.inline.hpp"
90 #include "runtime/threadSMR.inline.hpp"
91 #include "runtime/threads.hpp"
92 #include "runtime/timer.hpp"
93 #include "runtime/timerTrace.hpp"
94 #include "runtime/trimNativeHeap.hpp"
95 #include "runtime/vmOperations.hpp"
96 #include "runtime/vm_version.hpp"
97 #include "services/attachListener.hpp"
98 #include "services/management.hpp"
99 #include "services/threadIdTable.hpp"
100 #include "services/threadService.hpp"
101 #include "utilities/dtrace.hpp"
102 #include "utilities/events.hpp"
103 #include "utilities/macros.hpp"
104 #include "utilities/vmError.hpp"
105 #if INCLUDE_JVMCI
106 #include "jvmci/jvmci.hpp"
107 #include "jvmci/jvmciEnv.hpp"
108 #endif
109 #ifdef COMPILER2
110 #include "opto/idealGraphPrinter.hpp"
111 #endif
112 #if INCLUDE_JFR
113 #include "jfr/jfr.hpp"
114 #endif
115
116 // Initialization after module runtime initialization
117 void universe_post_module_init(); // must happen after call_initPhase2
118
119
120 static void initialize_class(Symbol* class_name, TRAPS) {
121 Klass* klass = SystemDictionary::resolve_or_fail(class_name, true, CHECK);
122 InstanceKlass::cast(klass)->initialize(CHECK);
123 }
124
125
126 // Creates the initial ThreadGroup
127 static Handle create_initial_thread_group(TRAPS) {
128 Handle system_instance = JavaCalls::construct_new_instance(
129 vmClasses::ThreadGroup_klass(),
130 vmSymbols::void_method_signature(),
300 // enable the startup code to use lambda and other language features in this
301 // phase and onward.
302 //
303 // After phase 2, The VM will begin search classes from -Xbootclasspath/a.
304 static void call_initPhase2(TRAPS) {
305 TraceTime timer("Initialize module system", TRACETIME_LOG(Info, startuptime));
306
307 Klass* klass = vmClasses::System_klass();
308
309 JavaValue result(T_INT);
310 JavaCallArguments args;
311 args.push_int(DisplayVMOutputToStderr);
312 args.push_int(log_is_enabled(Debug, init)); // print stack trace if exception thrown
313 JavaCalls::call_static(&result, klass, vmSymbols::initPhase2_name(),
314 vmSymbols::boolean_boolean_int_signature(), &args, CHECK);
315 if (result.get_jint() != JNI_OK) {
316 vm_exit_during_initialization(); // no message or exception
317 }
318
319 universe_post_module_init();
320 }
321
322 // Phase 3. final setup - set security manager, system class loader and TCCL
323 //
324 // This will instantiate and set the security manager, set the system class
325 // loader as well as the thread context class loader. The security manager
326 // and system class loader may be a custom class loaded from -Xbootclasspath/a,
327 // other modules or the application's classpath.
328 static void call_initPhase3(TRAPS) {
329 Klass* klass = vmClasses::System_klass();
330 JavaValue result(T_VOID);
331 JavaCalls::call_static(&result, klass, vmSymbols::initPhase3_name(),
332 vmSymbols::void_method_signature(), CHECK);
333 }
334
335 void Threads::initialize_java_lang_classes(JavaThread* main_thread, TRAPS) {
336 TraceTime timer("Initialize java.lang classes", TRACETIME_LOG(Info, startuptime));
337
338 initialize_class(vmSymbols::java_lang_String(), CHECK);
339
340 // Inject CompactStrings value after the static initializers for String ran.
341 java_lang_String::set_compact_strings(CompactStrings);
342
343 // Initialize java_lang.System (needed before creating the thread)
344 initialize_class(vmSymbols::java_lang_System(), CHECK);
345 // The VM creates & returns objects of this class. Make sure it's initialized.
346 initialize_class(vmSymbols::java_lang_Class(), CHECK);
347 initialize_class(vmSymbols::java_lang_ThreadGroup(), CHECK);
348 Handle thread_group = create_initial_thread_group(CHECK);
349 Universe::set_main_thread_group(thread_group());
350 initialize_class(vmSymbols::java_lang_Thread(), CHECK);
351 create_initial_thread(thread_group, main_thread, CHECK);
352
353 // The VM creates objects of this class.
354 initialize_class(vmSymbols::java_lang_Module(), CHECK);
355
356 #ifdef ASSERT
357 InstanceKlass *k = vmClasses::UnsafeConstants_klass();
358 assert(k->is_not_initialized(), "UnsafeConstants should not already be initialized");
359 #endif
360
361 // initialize the hardware-specific constants needed by Unsafe
362 initialize_class(vmSymbols::jdk_internal_misc_UnsafeConstants(), CHECK);
363 jdk_internal_misc_UnsafeConstants::set_unsafe_constants();
364
365 // The VM preresolves methods to these classes. Make sure that they get initialized
366 initialize_class(vmSymbols::java_lang_reflect_Method(), CHECK);
367 initialize_class(vmSymbols::java_lang_ref_Finalizer(), CHECK);
368
369 // Phase 1 of the system initialization in the library, java.lang.System class initialization
370 call_initPhase1(CHECK);
371
372 // Get the Java runtime name, version, and vendor info after java.lang.System is initialized.
382
383 JDK_Version::set_runtime_version(get_java_version_info(ik, vmSymbols::java_runtime_version_name()));
384
385 JDK_Version::set_runtime_vendor_version(get_java_version_info(ik, vmSymbols::java_runtime_vendor_version_name()));
386
387 JDK_Version::set_runtime_vendor_vm_bug_url(get_java_version_info(ik, vmSymbols::java_runtime_vendor_vm_bug_url_name()));
388 }
389
390 // an instance of OutOfMemory exception has been allocated earlier
391 initialize_class(vmSymbols::java_lang_OutOfMemoryError(), CHECK);
392 initialize_class(vmSymbols::java_lang_NullPointerException(), CHECK);
393 initialize_class(vmSymbols::java_lang_ClassCastException(), CHECK);
394 initialize_class(vmSymbols::java_lang_ArrayStoreException(), CHECK);
395 initialize_class(vmSymbols::java_lang_ArithmeticException(), CHECK);
396 initialize_class(vmSymbols::java_lang_ArrayIndexOutOfBoundsException(), CHECK);
397 initialize_class(vmSymbols::java_lang_StackOverflowError(), CHECK);
398 initialize_class(vmSymbols::java_lang_IllegalMonitorStateException(), CHECK);
399 initialize_class(vmSymbols::java_lang_IllegalArgumentException(), CHECK);
400 }
401
402 void Threads::initialize_jsr292_core_classes(TRAPS) {
403 TraceTime timer("Initialize java.lang.invoke classes", TRACETIME_LOG(Info, startuptime));
404
405 initialize_class(vmSymbols::java_lang_invoke_MethodHandle(), CHECK);
406 initialize_class(vmSymbols::java_lang_invoke_ResolvedMethodName(), CHECK);
407 initialize_class(vmSymbols::java_lang_invoke_MemberName(), CHECK);
408 initialize_class(vmSymbols::java_lang_invoke_MethodHandleNatives(), CHECK);
409 }
410
411 jint Threads::create_vm(JavaVMInitArgs* args, bool* canTryAgain) {
412 extern void JDK_Version_init();
413
414 // Preinitialize version info.
415 VM_Version::early_initialize();
416
417 // Check version
418 if (!is_supported_jni_version(args->version)) return JNI_EVERSION;
419
420 // Initialize library-based TLS
421 ThreadLocalStorage::init();
422
423 // Initialize the output stream module
424 ostream_init();
425
426 // Process java launcher properties.
427 Arguments::process_sun_java_launcher_properties(args);
428
514 JavaThread::_jvmci_old_thread_counters = NEW_C_HEAP_ARRAY(jlong, JVMCICounterSize, mtJVMCI);
515 memset(JavaThread::_jvmci_old_thread_counters, 0, sizeof(jlong) * JVMCICounterSize);
516 } else {
517 JavaThread::_jvmci_old_thread_counters = nullptr;
518 }
519 #endif // INCLUDE_JVMCI
520
521 // Initialize OopStorage for threadObj
522 JavaThread::_thread_oop_storage = OopStorageSet::create_strong("Thread OopStorage", mtThread);
523
524 // Attach the main thread to this os thread
525 JavaThread* main_thread = new JavaThread();
526 main_thread->set_thread_state(_thread_in_vm);
527 main_thread->initialize_thread_current();
528 // must do this before set_active_handles
529 main_thread->record_stack_base_and_size();
530 main_thread->register_thread_stack_with_NMT();
531 main_thread->set_active_handles(JNIHandleBlock::allocate_block());
532 MACOS_AARCH64_ONLY(main_thread->init_wx());
533
534 if (!main_thread->set_as_starting_thread()) {
535 vm_shutdown_during_initialization(
536 "Failed necessary internal allocation. Out of swap space");
537 main_thread->smr_delete();
538 *canTryAgain = false; // don't let caller call JNI_CreateJavaVM again
539 return JNI_ENOMEM;
540 }
541
542 // Enable guard page *after* os::create_main_thread(), otherwise it would
543 // crash Linux VM, see notes in os_linux.cpp.
544 main_thread->stack_overflow_state()->create_stack_guard_pages();
545
546 // Initialize Java-Level synchronization subsystem
547 ObjectMonitor::Initialize();
548 ObjectSynchronizer::initialize();
549
550 // Initialize global modules
551 jint status = init_globals();
552 if (status != JNI_OK) {
553 main_thread->smr_delete();
554 *canTryAgain = false; // don't let caller call JNI_CreateJavaVM again
555 return status;
556 }
557
558 // Create WatcherThread as soon as we can since we need it in case
559 // of hangs during error reporting.
560 WatcherThread::start();
561
562 // Add main_thread to threads list to finish barrier setup with
563 // on_thread_attach. Should be before starting to build Java objects in
564 // init_globals2, which invokes barriers.
565 {
566 MutexLocker mu(Threads_lock);
567 Threads::add(main_thread);
568 }
569
570 status = init_globals2();
571 if (status != JNI_OK) {
572 Threads::remove(main_thread, false);
573 // It is possible that we managed to fully initialize Universe but have then
574 // failed by throwing an exception. In that case our caller JNI_CreateJavaVM
575 // will want to report it, so we can't delete the main thread.
576 if (!main_thread->has_pending_exception()) {
674 if (StartAttachListener || AttachListener::init_at_startup()) {
675 AttachListener::init();
676 }
677 }
678
679 // Launch -Xrun agents if EagerXrunInit is not set.
680 if (!EagerXrunInit) {
681 JvmtiAgentList::load_xrun_agents();
682 }
683
684 Arena::start_chunk_pool_cleaner_task();
685
686 // Start the service thread
687 // The service thread enqueues JVMTI deferred events and does various hashtable
688 // and other cleanups. Needs to start before the compilers start posting events.
689 ServiceThread::initialize();
690
691 // Start the monitor deflation thread:
692 MonitorDeflationThread::initialize();
693
694 // initialize compiler(s)
695 #if defined(COMPILER1) || COMPILER2_OR_JVMCI
696 bool init_compilation = true;
697 #if INCLUDE_JVMCI
698 bool force_JVMCI_initialization = false;
699 if (EnableJVMCI) {
700 // Initialize JVMCI eagerly when it is explicitly requested.
701 // Or when JVMCILibDumpJNIConfig or JVMCIPrintProperties is enabled.
702 force_JVMCI_initialization = EagerJVMCI || JVMCIPrintProperties || JVMCILibDumpJNIConfig;
703 if (!force_JVMCI_initialization && UseJVMCICompiler && !UseJVMCINativeLibrary && (!UseInterpreter || !BackgroundCompilation)) {
704 // Force initialization of jarjvmci otherwise requests for blocking
705 // compilations will not actually block until jarjvmci is initialized.
706 force_JVMCI_initialization = true;
707 }
708 if (JVMCIPrintProperties || JVMCILibDumpJNIConfig) {
709 // Both JVMCILibDumpJNIConfig and JVMCIPrintProperties exit the VM
710 // so compilation should be disabled. This prevents dumping or
711 // printing from happening more than once.
712 init_compilation = false;
713 }
714 }
715 #endif
716 if (init_compilation) {
717 CompileBroker::compilation_init(CHECK_JNI_ERR);
718 }
719 #endif
720
721 // Start string deduplication thread if requested.
722 if (StringDedup::is_enabled()) {
723 StringDedup::start();
724 }
725
726 // Pre-initialize some JSR292 core classes to avoid deadlock during class loading.
727 // It is done after compilers are initialized, because otherwise compilations of
728 // signature polymorphic MH intrinsics can be missed
729 // (see SystemDictionary::find_method_handle_intrinsic).
730 initialize_jsr292_core_classes(CHECK_JNI_ERR);
731
732 // This will initialize the module system. Only java.base classes can be
733 // loaded until phase 2 completes
734 call_initPhase2(CHECK_JNI_ERR);
735
736 JFR_ONLY(Jfr::on_create_vm_2();)
737
738 // Always call even when there are not JVMTI environments yet, since environments
739 // may be attached late and JVMTI must track phases of VM execution
740 JvmtiExport::enter_start_phase();
741
742 // Notify JVMTI agents that VM has started (JNI is up) - nop if no agents.
743 JvmtiExport::post_vm_start();
744
745 // Final system initialization including security manager and system class loader
746 call_initPhase3(CHECK_JNI_ERR);
747
748 // cache the system and platform class loaders
749 SystemDictionary::compute_java_loaders(CHECK_JNI_ERR);
750
751 if (Continuations::enabled()) {
752 // Initialize Continuation class now so that failure to create enterSpecial/doYield
753 // special nmethods due to limited CodeCache size can be treated as a fatal error at
754 // startup with the proper message that CodeCache size is too small.
755 initialize_class(vmSymbols::jdk_internal_vm_Continuation(), CHECK_JNI_ERR);
756 }
757
758 #if INCLUDE_CDS
759 // capture the module path info from the ModuleEntryTable
760 ClassLoader::initialize_module_path(THREAD);
761 if (HAS_PENDING_EXCEPTION) {
762 java_lang_Throwable::print(PENDING_EXCEPTION, tty);
763 vm_exit_during_initialization("ClassLoader::initialize_module_path() failed unexpectedly");
764 }
765 #endif
766
767 #if INCLUDE_JVMCI
768 if (force_JVMCI_initialization) {
769 JVMCI::initialize_compiler(CHECK_JNI_ERR);
770 }
771 #endif
772
773 if (NativeHeapTrimmer::enabled()) {
774 NativeHeapTrimmer::initialize();
775 }
776
777 // Always call even when there are not JVMTI environments yet, since environments
778 // may be attached late and JVMTI must track phases of VM execution
779 JvmtiExport::enter_live_phase();
780
781 // Make perfmemory accessible
782 PerfMemory::set_accessible(true);
783
784 // Notify JVMTI agents that VM initialization is complete - nop if no agents.
785 JvmtiExport::post_vm_initialized();
786
787 JFR_ONLY(Jfr::on_create_vm_3();)
788
789 #if INCLUDE_MANAGEMENT
790 Management::initialize(THREAD);
791
792 if (HAS_PENDING_EXCEPTION) {
801 if (CheckJNICalls) JniPeriodicChecker::engage();
802
803 call_postVMInitHook(THREAD);
804 // The Java side of PostVMInitHook.run must deal with all
805 // exceptions and provide means of diagnosis.
806 if (HAS_PENDING_EXCEPTION) {
807 CLEAR_PENDING_EXCEPTION;
808 }
809
810 // Let WatcherThread run all registered periodic tasks now.
811 // NOTE: All PeriodicTasks should be registered by now. If they
812 // aren't, late joiners might appear to start slowly (we might
813 // take a while to process their first tick).
814 WatcherThread::run_all_tasks();
815
816 create_vm_timer.end();
817 #ifdef ASSERT
818 _vm_complete = true;
819 #endif
820
821 if (CDSConfig::is_dumping_static_archive()) {
822 MetaspaceShared::preload_and_dump(CHECK_JNI_ERR);
823 }
824
825 if (log_is_enabled(Info, perf, class, link)) {
826 LogStreamHandle(Info, perf, class, link) log;
827 log.print_cr("At VM initialization completion:");
828 ClassLoader::print_counters(&log);
829 }
830
831 return JNI_OK;
832 }
833
834 // Threads::destroy_vm() is normally called from jni_DestroyJavaVM() when
835 // the program falls off the end of main(). Another VM exit path is through
836 // vm_exit(), when the program calls System.exit() to return a value, or when
837 // there is a serious error in VM.
838 // These two separate shutdown paths are not exactly the same, but they share
839 // Shutdown.shutdown() at Java level and before_exit() and VM_Exit op at VM level.
840 //
841 // Shutdown sequence:
842 // + Shutdown native memory tracking if it is on
843 // + Wait until we are the last non-daemon thread to execute
844 // <-- every thing is still working at this moment -->
845 // + Call java.lang.Shutdown.shutdown(), which will invoke Java level
846 // shutdown hooks
847 // + Call before_exit(), prepare for VM exit
848 // > run VM level shutdown hooks (they are registered through JVM_OnExit(),
|
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 "cds/aotLinkedClassBulkLoader.hpp"
28 #include "cds/cds_globals.hpp"
29 #include "cds/cdsConfig.hpp"
30 #include "cds/heapShared.hpp"
31 #include "cds/metaspaceShared.hpp"
32 #include "cds/methodProfiler.hpp"
33 #include "classfile/classLoader.hpp"
34 #include "classfile/javaClasses.hpp"
35 #include "classfile/javaThreadStatus.hpp"
36 #include "classfile/systemDictionary.hpp"
37 #include "classfile/systemDictionaryShared.hpp"
38 #include "classfile/vmClasses.hpp"
39 #include "classfile/vmSymbols.hpp"
40 #include "code/SCCache.hpp"
41 #include "compiler/compilationPolicy.hpp"
42 #include "compiler/compileBroker.hpp"
43 #include "compiler/compileTask.hpp"
44 #include "compiler/compilerThread.hpp"
45 #include "compiler/precompiler.hpp"
46 #include "gc/shared/barrierSet.hpp"
47 #include "gc/shared/barrierSetNMethod.hpp"
48 #include "gc/shared/gcVMOperations.hpp"
49 #include "gc/shared/oopStorage.hpp"
50 #include "gc/shared/oopStorageSet.hpp"
51 #include "gc/shared/stringdedup/stringDedup.hpp"
52 #include "interpreter/interpreterRuntime.hpp"
53 #include "jfr/jfrEvents.hpp"
54 #include "jvm.h"
55 #include "jvmtifiles/jvmtiEnv.hpp"
56 #include "logging/log.hpp"
57 #include "logging/logAsyncWriter.hpp"
58 #include "logging/logConfiguration.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 "nmt/memTracker.hpp"
65 #include "oops/instanceKlass.hpp"
66 #include "oops/klass.inline.hpp"
67 #include "oops/oop.inline.hpp"
68 #include "oops/symbol.hpp"
69 #include "prims/jvm_misc.hpp"
70 #include "prims/jvmtiAgentList.hpp"
71 #include "prims/jvmtiEnvBase.hpp"
72 #include "runtime/arguments.hpp"
97 #include "runtime/thread.inline.hpp"
98 #include "runtime/threadSMR.inline.hpp"
99 #include "runtime/threads.hpp"
100 #include "runtime/timer.hpp"
101 #include "runtime/timerTrace.hpp"
102 #include "runtime/trimNativeHeap.hpp"
103 #include "runtime/vmOperations.hpp"
104 #include "runtime/vm_version.hpp"
105 #include "services/attachListener.hpp"
106 #include "services/management.hpp"
107 #include "services/threadIdTable.hpp"
108 #include "services/threadService.hpp"
109 #include "utilities/dtrace.hpp"
110 #include "utilities/events.hpp"
111 #include "utilities/macros.hpp"
112 #include "utilities/vmError.hpp"
113 #if INCLUDE_JVMCI
114 #include "jvmci/jvmci.hpp"
115 #include "jvmci/jvmciEnv.hpp"
116 #endif
117 #ifdef COMPILER1
118 #include "c1/c1_Runtime1.hpp"
119 #endif
120 #ifdef COMPILER2
121 #include "opto/idealGraphPrinter.hpp"
122 #include "opto/runtime.hpp"
123 #endif
124 #if INCLUDE_JFR
125 #include "jfr/jfr.hpp"
126 #endif
127
128 // Initialization after module runtime initialization
129 void universe_post_module_init(); // must happen after call_initPhase2
130
131
132 static void initialize_class(Symbol* class_name, TRAPS) {
133 Klass* klass = SystemDictionary::resolve_or_fail(class_name, true, CHECK);
134 InstanceKlass::cast(klass)->initialize(CHECK);
135 }
136
137
138 // Creates the initial ThreadGroup
139 static Handle create_initial_thread_group(TRAPS) {
140 Handle system_instance = JavaCalls::construct_new_instance(
141 vmClasses::ThreadGroup_klass(),
142 vmSymbols::void_method_signature(),
312 // enable the startup code to use lambda and other language features in this
313 // phase and onward.
314 //
315 // After phase 2, The VM will begin search classes from -Xbootclasspath/a.
316 static void call_initPhase2(TRAPS) {
317 TraceTime timer("Initialize module system", TRACETIME_LOG(Info, startuptime));
318
319 Klass* klass = vmClasses::System_klass();
320
321 JavaValue result(T_INT);
322 JavaCallArguments args;
323 args.push_int(DisplayVMOutputToStderr);
324 args.push_int(log_is_enabled(Debug, init)); // print stack trace if exception thrown
325 JavaCalls::call_static(&result, klass, vmSymbols::initPhase2_name(),
326 vmSymbols::boolean_boolean_int_signature(), &args, CHECK);
327 if (result.get_jint() != JNI_OK) {
328 vm_exit_during_initialization(); // no message or exception
329 }
330
331 universe_post_module_init();
332
333 if (CDSConfig::is_using_aot_linked_classes()) {
334 AOTLinkedClassBulkLoader::load_non_javabase_boot_classes(THREAD);
335 if (CDSConfig::is_using_full_module_graph()) {
336 assert(SystemDictionary::java_platform_loader() != nullptr, "must be");
337 assert(SystemDictionary::java_system_loader() != nullptr, "must be");
338 AOTLinkedClassBulkLoader::load_platform_classes(THREAD);
339 AOTLinkedClassBulkLoader::load_app_classes(THREAD);
340 } else {
341 // Special case -- we assume that the final archive has the same module graph
342 // as the training run.
343 // AOTLinkedClassBulkLoader will be called for the platform/system loaders
344 // inside SystemDictionary::compute_java_loaders().
345 assert(CDSConfig::is_dumping_final_static_archive(), "must be");
346 assert(SystemDictionary::java_platform_loader() == nullptr, "must be");
347 assert(SystemDictionary::java_system_loader() == nullptr, "must be");
348 }
349 }
350
351 #ifndef PRODUCT
352 HeapShared::initialize_test_class_from_archive(THREAD);
353 #endif
354 }
355
356 // Phase 3. final setup - set security manager, system class loader and TCCL
357 //
358 // This will instantiate and set the security manager, set the system class
359 // loader as well as the thread context class loader. The security manager
360 // and system class loader may be a custom class loaded from -Xbootclasspath/a,
361 // other modules or the application's classpath.
362 static void call_initPhase3(TRAPS) {
363 Klass* klass = vmClasses::System_klass();
364 JavaValue result(T_VOID);
365 JavaCalls::call_static(&result, klass, vmSymbols::initPhase3_name(),
366 vmSymbols::void_method_signature(), CHECK);
367 }
368
369 void Threads::initialize_java_lang_classes(JavaThread* main_thread, TRAPS) {
370 TraceTime timer("Initialize java.lang classes", TRACETIME_LOG(Info, startuptime));
371
372 initialize_class(vmSymbols::java_lang_String(), CHECK);
373
374 // Inject CompactStrings value after the static initializers for String ran.
375 java_lang_String::set_compact_strings(CompactStrings);
376
377 // Initialize java_lang.System (needed before creating the thread)
378 initialize_class(vmSymbols::java_lang_System(), CHECK);
379 // The VM creates & returns objects of this class. Make sure it's initialized.
380 initialize_class(vmSymbols::java_lang_Class(), CHECK);
381 initialize_class(vmSymbols::java_lang_ThreadGroup(), CHECK);
382 Handle thread_group = create_initial_thread_group(CHECK);
383 Universe::set_main_thread_group(thread_group());
384 initialize_class(vmSymbols::java_lang_Thread(), CHECK);
385 create_initial_thread(thread_group, main_thread, CHECK);
386
387 HeapShared::init_box_classes(CHECK);
388
389 // The VM creates objects of this class.
390 initialize_class(vmSymbols::java_lang_Module(), CHECK);
391
392 #ifdef ASSERT
393 InstanceKlass *k = vmClasses::UnsafeConstants_klass();
394 assert(k->is_not_initialized(), "UnsafeConstants should not already be initialized");
395 #endif
396
397 // initialize the hardware-specific constants needed by Unsafe
398 initialize_class(vmSymbols::jdk_internal_misc_UnsafeConstants(), CHECK);
399 jdk_internal_misc_UnsafeConstants::set_unsafe_constants();
400
401 // The VM preresolves methods to these classes. Make sure that they get initialized
402 initialize_class(vmSymbols::java_lang_reflect_Method(), CHECK);
403 initialize_class(vmSymbols::java_lang_ref_Finalizer(), CHECK);
404
405 // Phase 1 of the system initialization in the library, java.lang.System class initialization
406 call_initPhase1(CHECK);
407
408 // Get the Java runtime name, version, and vendor info after java.lang.System is initialized.
418
419 JDK_Version::set_runtime_version(get_java_version_info(ik, vmSymbols::java_runtime_version_name()));
420
421 JDK_Version::set_runtime_vendor_version(get_java_version_info(ik, vmSymbols::java_runtime_vendor_version_name()));
422
423 JDK_Version::set_runtime_vendor_vm_bug_url(get_java_version_info(ik, vmSymbols::java_runtime_vendor_vm_bug_url_name()));
424 }
425
426 // an instance of OutOfMemory exception has been allocated earlier
427 initialize_class(vmSymbols::java_lang_OutOfMemoryError(), CHECK);
428 initialize_class(vmSymbols::java_lang_NullPointerException(), CHECK);
429 initialize_class(vmSymbols::java_lang_ClassCastException(), CHECK);
430 initialize_class(vmSymbols::java_lang_ArrayStoreException(), CHECK);
431 initialize_class(vmSymbols::java_lang_ArithmeticException(), CHECK);
432 initialize_class(vmSymbols::java_lang_ArrayIndexOutOfBoundsException(), CHECK);
433 initialize_class(vmSymbols::java_lang_StackOverflowError(), CHECK);
434 initialize_class(vmSymbols::java_lang_IllegalMonitorStateException(), CHECK);
435 initialize_class(vmSymbols::java_lang_IllegalArgumentException(), CHECK);
436 }
437
438 bool Threads::initialize_compilation(TRAPS) {
439 // initialize compiler(s)
440 bool force_JVMCI_initialization = false;
441
442 #if defined(COMPILER1) || COMPILER2_OR_JVMCI
443 bool init_compilation = true;
444 #if INCLUDE_JVMCI
445 if (EnableJVMCI) {
446 // Initialize JVMCI eagerly when it is explicitly requested.
447 // Or when JVMCILibDumpJNIConfig or JVMCIPrintProperties is enabled.
448 force_JVMCI_initialization = EagerJVMCI || JVMCIPrintProperties || JVMCILibDumpJNIConfig;
449 if (!force_JVMCI_initialization && UseJVMCICompiler && !UseJVMCINativeLibrary && (!UseInterpreter || !BackgroundCompilation)) {
450 // Force initialization of jarjvmci otherwise requests for blocking
451 // compilations will not actually block until jarjvmci is initialized.
452 force_JVMCI_initialization = true;
453 }
454 if (JVMCIPrintProperties || JVMCILibDumpJNIConfig) {
455 // Both JVMCILibDumpJNIConfig and JVMCIPrintProperties exit the VM
456 // so compilation should be disabled. This prevents dumping or
457 // printing from happening more than once.
458 init_compilation = false;
459 }
460 }
461 #endif
462 if (init_compilation) {
463 CompileBroker::compilation_init(CHECK_false);
464 }
465 #endif
466
467 return force_JVMCI_initialization;
468 }
469
470 void Threads::initialize_jsr292_core_classes(TRAPS) {
471 TraceTime timer("Initialize java.lang.invoke classes", TRACETIME_LOG(Info, startuptime));
472
473 initialize_class(vmSymbols::java_lang_invoke_MethodHandle(), CHECK);
474 initialize_class(vmSymbols::java_lang_invoke_ResolvedMethodName(), CHECK);
475 initialize_class(vmSymbols::java_lang_invoke_MemberName(), CHECK);
476 initialize_class(vmSymbols::java_lang_invoke_MethodHandleNatives(), CHECK);
477
478 if (UseSharedSpaces) {
479 HeapShared::initialize_java_lang_invoke(CHECK);
480 }
481 }
482
483 jint Threads::create_vm(JavaVMInitArgs* args, bool* canTryAgain) {
484 extern void JDK_Version_init();
485
486 // Preinitialize version info.
487 VM_Version::early_initialize();
488
489 // Check version
490 if (!is_supported_jni_version(args->version)) return JNI_EVERSION;
491
492 // Initialize library-based TLS
493 ThreadLocalStorage::init();
494
495 // Initialize the output stream module
496 ostream_init();
497
498 // Process java launcher properties.
499 Arguments::process_sun_java_launcher_properties(args);
500
586 JavaThread::_jvmci_old_thread_counters = NEW_C_HEAP_ARRAY(jlong, JVMCICounterSize, mtJVMCI);
587 memset(JavaThread::_jvmci_old_thread_counters, 0, sizeof(jlong) * JVMCICounterSize);
588 } else {
589 JavaThread::_jvmci_old_thread_counters = nullptr;
590 }
591 #endif // INCLUDE_JVMCI
592
593 // Initialize OopStorage for threadObj
594 JavaThread::_thread_oop_storage = OopStorageSet::create_strong("Thread OopStorage", mtThread);
595
596 // Attach the main thread to this os thread
597 JavaThread* main_thread = new JavaThread();
598 main_thread->set_thread_state(_thread_in_vm);
599 main_thread->initialize_thread_current();
600 // must do this before set_active_handles
601 main_thread->record_stack_base_and_size();
602 main_thread->register_thread_stack_with_NMT();
603 main_thread->set_active_handles(JNIHandleBlock::allocate_block());
604 MACOS_AARCH64_ONLY(main_thread->init_wx());
605
606 MutexLockerImpl::init_counters(); // depends on mutex_init(), perfMemory_init(), and Thread::initialize_thread_current().
607
608 if (!main_thread->set_as_starting_thread()) {
609 vm_shutdown_during_initialization(
610 "Failed necessary internal allocation. Out of swap space");
611 main_thread->smr_delete();
612 *canTryAgain = false; // don't let caller call JNI_CreateJavaVM again
613 return JNI_ENOMEM;
614 }
615
616 // Enable guard page *after* os::create_main_thread(), otherwise it would
617 // crash Linux VM, see notes in os_linux.cpp.
618 main_thread->stack_overflow_state()->create_stack_guard_pages();
619
620 // Initialize Java-Level synchronization subsystem
621 ObjectMonitor::Initialize();
622 ObjectSynchronizer::initialize();
623
624 Deoptimization::init_counters();
625 VMThread::init_counters();
626
627 // Initialize global modules
628 jint status = init_globals();
629 if (status != JNI_OK) {
630 main_thread->smr_delete();
631 *canTryAgain = false; // don't let caller call JNI_CreateJavaVM again
632 return status;
633 }
634 if (xtty != nullptr)
635 xtty->elem("vm_main_thread thread='" UINTX_FORMAT "'",
636 (uintx) main_thread->osthread()->thread_id());
637
638 // Create WatcherThread as soon as we can since we need it in case
639 // of hangs during error reporting.
640 WatcherThread::start();
641
642 // Add main_thread to threads list to finish barrier setup with
643 // on_thread_attach. Should be before starting to build Java objects in
644 // init_globals2, which invokes barriers.
645 {
646 MutexLocker mu(Threads_lock);
647 Threads::add(main_thread);
648 }
649
650 status = init_globals2();
651 if (status != JNI_OK) {
652 Threads::remove(main_thread, false);
653 // It is possible that we managed to fully initialize Universe but have then
654 // failed by throwing an exception. In that case our caller JNI_CreateJavaVM
655 // will want to report it, so we can't delete the main thread.
656 if (!main_thread->has_pending_exception()) {
754 if (StartAttachListener || AttachListener::init_at_startup()) {
755 AttachListener::init();
756 }
757 }
758
759 // Launch -Xrun agents if EagerXrunInit is not set.
760 if (!EagerXrunInit) {
761 JvmtiAgentList::load_xrun_agents();
762 }
763
764 Arena::start_chunk_pool_cleaner_task();
765
766 // Start the service thread
767 // The service thread enqueues JVMTI deferred events and does various hashtable
768 // and other cleanups. Needs to start before the compilers start posting events.
769 ServiceThread::initialize();
770
771 // Start the monitor deflation thread:
772 MonitorDeflationThread::initialize();
773
774 #if INCLUDE_CDS
775 // Start the method sampler
776 MethodProfiler::initialize();
777 #endif
778
779 bool force_JVMCI_initialization = initialize_compilation(CHECK_JNI_ERR);
780
781 AOTLinkedClassBulkLoader::init_javabase_preloaded_classes(CHECK_JNI_ERR);
782
783 // Start string deduplication thread if requested.
784 if (StringDedup::is_enabled()) {
785 StringDedup::start();
786 }
787
788 // Pre-initialize some JSR292 core classes to avoid deadlock during class loading.
789 // It is done after compilers are initialized, because otherwise compilations of
790 // signature polymorphic MH intrinsics can be missed
791 // (see SystemDictionary::find_method_handle_intrinsic).
792 initialize_jsr292_core_classes(CHECK_JNI_ERR);
793
794 // This will initialize the module system. Only java.base classes can be
795 // loaded until phase 2 completes
796 call_initPhase2(CHECK_JNI_ERR);
797
798 JFR_ONLY(Jfr::on_create_vm_2();)
799
800 // Always call even when there are not JVMTI environments yet, since environments
801 // may be attached late and JVMTI must track phases of VM execution
802 JvmtiExport::enter_start_phase();
803
804 // Notify JVMTI agents that VM has started (JNI is up) - nop if no agents.
805 JvmtiExport::post_vm_start();
806
807 // Final system initialization including security manager and system class loader
808 call_initPhase3(CHECK_JNI_ERR);
809
810 // cache the system and platform class loaders
811 SystemDictionary::compute_java_loaders(CHECK_JNI_ERR);
812
813 // Initiate replay training processing once preloading is over.
814 CompileBroker::init_training_replay();
815
816 AOTLinkedClassBulkLoader::replay_training_at_init_for_preloaded_classes(CHECK_JNI_ERR);
817
818 if (Continuations::enabled()) {
819 // Initialize Continuation class now so that failure to create enterSpecial/doYield
820 // special nmethods due to limited CodeCache size can be treated as a fatal error at
821 // startup with the proper message that CodeCache size is too small.
822 initialize_class(vmSymbols::jdk_internal_vm_Continuation(), CHECK_JNI_ERR);
823 }
824
825 #if INCLUDE_CDS
826 // capture the module path info from the ModuleEntryTable
827 ClassLoader::initialize_module_path(THREAD);
828 if (HAS_PENDING_EXCEPTION) {
829 java_lang_Throwable::print(PENDING_EXCEPTION, tty);
830 vm_exit_during_initialization("ClassLoader::initialize_module_path() failed unexpectedly");
831 }
832 #endif
833
834 #if INCLUDE_JVMCI
835 if (force_JVMCI_initialization) {
836 JVMCI::initialize_compiler(CHECK_JNI_ERR);
837 }
838 #endif
839
840 if (PrecompileCode) {
841 Precompiler::compile_cached_code(CHECK_JNI_ERR);
842 if (PrecompileOnlyAndExit) {
843 SCCache::close();
844 log_vm_init_stats();
845 vm_direct_exit(0, "Code precompiation is over");
846 }
847 }
848
849 #if defined(COMPILER2)
850 // Pre-load cached compiled methods
851 SCCache::preload_code(CHECK_JNI_ERR);
852 #endif
853
854 if (NativeHeapTrimmer::enabled()) {
855 NativeHeapTrimmer::initialize();
856 }
857
858 // Always call even when there are not JVMTI environments yet, since environments
859 // may be attached late and JVMTI must track phases of VM execution
860 JvmtiExport::enter_live_phase();
861
862 // Make perfmemory accessible
863 PerfMemory::set_accessible(true);
864
865 // Notify JVMTI agents that VM initialization is complete - nop if no agents.
866 JvmtiExport::post_vm_initialized();
867
868 JFR_ONLY(Jfr::on_create_vm_3();)
869
870 #if INCLUDE_MANAGEMENT
871 Management::initialize(THREAD);
872
873 if (HAS_PENDING_EXCEPTION) {
882 if (CheckJNICalls) JniPeriodicChecker::engage();
883
884 call_postVMInitHook(THREAD);
885 // The Java side of PostVMInitHook.run must deal with all
886 // exceptions and provide means of diagnosis.
887 if (HAS_PENDING_EXCEPTION) {
888 CLEAR_PENDING_EXCEPTION;
889 }
890
891 // Let WatcherThread run all registered periodic tasks now.
892 // NOTE: All PeriodicTasks should be registered by now. If they
893 // aren't, late joiners might appear to start slowly (we might
894 // take a while to process their first tick).
895 WatcherThread::run_all_tasks();
896
897 create_vm_timer.end();
898 #ifdef ASSERT
899 _vm_complete = true;
900 #endif
901
902 if (CDSConfig::is_dumping_classic_static_archive()) {
903 // Classic -Xshare:dump, aka "old workflow"
904 MetaspaceShared::preload_and_dump(CHECK_JNI_ERR);
905 } else if (CDSConfig::is_dumping_final_static_archive()) {
906 // TODO: copy the verification and loader constraints from preimage to final image
907 // TODO: load archived classes for custom loaders as well.
908 log_info(cds)("Dumping final image of CacheDataStore %s", CacheDataStore);
909 MetaspaceShared::preload_and_dump(CHECK_JNI_ERR);
910 vm_direct_exit(0, "CacheDataStore dumping is complete");
911 }
912
913 log_info(init)("At VM initialization completion:");
914 log_vm_init_stats();
915
916 if (UsePerfData) {
917 if (ProfileVMLocks) {
918 main_thread->set_profile_vm_locks(true);
919 }
920 if (ProfileVMCalls) {
921 main_thread->set_profile_vm_calls(true);
922 }
923 if (ProfileRuntimeCalls) {
924 main_thread->set_profile_rt_calls(true);
925 }
926 if (ProfileVMOps) {
927 main_thread->set_profile_vm_ops(true);
928 }
929 }
930
931 return JNI_OK;
932 }
933
934 // Threads::destroy_vm() is normally called from jni_DestroyJavaVM() when
935 // the program falls off the end of main(). Another VM exit path is through
936 // vm_exit(), when the program calls System.exit() to return a value, or when
937 // there is a serious error in VM.
938 // These two separate shutdown paths are not exactly the same, but they share
939 // Shutdown.shutdown() at Java level and before_exit() and VM_Exit op at VM level.
940 //
941 // Shutdown sequence:
942 // + Shutdown native memory tracking if it is on
943 // + Wait until we are the last non-daemon thread to execute
944 // <-- every thing is still working at this moment -->
945 // + Call java.lang.Shutdown.shutdown(), which will invoke Java level
946 // shutdown hooks
947 // + Call before_exit(), prepare for VM exit
948 // > run VM level shutdown hooks (they are registered through JVM_OnExit(),
|