大地图: main ---JavaMain()---InitializeJVM----InvocationFunctions---LoadJavaVM----JNI_CreateJavaVM---Threads::create_vm
hotspot/src/share/vm/runtime/thread.cpp line:2996
Threads::create_vm(JavaVMInitArgs* args, bool* canTryAgain)
1、hotspot/src/os/windows/vm/os_windows.cpp line:3498 os::init()
win32::initialize_system_info(); 从系统中返回相关信息 主要数据结构 SYSTEM_INFO
win32::setmode_streams(); 改变标准文件的打开方式,如stdin、stdout 从文本模式转到二进制模式
init_page_sizes((size_t) win32::vm_page_size()); 虚拟页的大小
GetCurrentProcess() 获得进程
GetCurrentThreadId() 获得线程id
2、hotspot/src/share/vm/runtime/arguments.cpp Arguments::init_system_properties()
设置java和OS相关的系统属性
3、hotspot/src/share/vm/runtime/arguments.cpp line:2891 Arguments::parse(args);
jvm启动时设置的参数更新到了系统中
4、hotspot/src/os/windows/vm/os_windows.cpp line:3534 os::init_2()
主要是内存、栈、线程等OS密切的部分的初始化
set_polling_page
mem_serialize_page
large_page_init()
初始化OS保证的栈大小
最大地址空间
prio_init initialize thread priority policy(java中的10级的thread优先级)
5、 代理程序扩展 相关功能
agent java.lang.instrument 便于创建更改和监控class文件的工具或监控程序,这些程序以agentlib的形式来提供
6、main_thread 进行初始化
7、 ObjectMonitor::Initialize() java语言的同步系统
8、 hotspot/src/share/vm/runtime/init.cpp line:90
init_globals()非常的复杂,此部分是vm内部的主要的模块
9、Threads::add(main_thread);
10、创建VMThread VMThread::vm_thread()
11、加载进来 用到的库、string、hashmap ,java.lang包 等基础的类支持
12、initialize_class(vmSymbols::java_lang_Compiler(), CHECK_0); 初始化编译器
13、quicken_jni_functions() 使jni本地的函数指针更有效
14、SystemDictionary::compute_java_system_loader(THREAD); 指定类加载器
15、os::signal_init(); 初始化OS的信号系统,这样JVM才可以向OS发送相应的信号信息
16、AttachListener::init_at_startup() 初始化 jvm本身的监听器
17、初始化编译器 CompileBroker::compilation_init()
18、call_postVMInitHook(THREAD);
19、WatcherThread::start(); 支持定时器等周期性的任务
20、 os::init_3() 额外的OS初始化的机会
其中穿插的 trace、jniti、管理相关模块、都忽略不计
概述:OS、线程初始化;参数解析;启动回调;加载核心的功能模块;编译器相关
概念补充 :JVMTI(Java Virtual Machine Tool Interface)是一套由 Java 虚拟机提供的,为 JVM相关的工具提供的本地编程接口集合。
hotspot/src/share/vm/runtime/thread.cpp line:2996
Threads::create_vm(JavaVMInitArgs* args, bool* canTryAgain)
1、hotspot/src/os/windows/vm/os_windows.cpp line:3498 os::init()
win32::initialize_system_info(); 从系统中返回相关信息 主要数据结构 SYSTEM_INFO
win32::setmode_streams(); 改变标准文件的打开方式,如stdin、stdout 从文本模式转到二进制模式
init_page_sizes((size_t) win32::vm_page_size()); 虚拟页的大小
GetCurrentProcess() 获得进程
GetCurrentThreadId() 获得线程id
2、hotspot/src/share/vm/runtime/arguments.cpp Arguments::init_system_properties()
设置java和OS相关的系统属性
3、hotspot/src/share/vm/runtime/arguments.cpp line:2891 Arguments::parse(args);
jvm启动时设置的参数更新到了系统中
4、hotspot/src/os/windows/vm/os_windows.cpp line:3534 os::init_2()
主要是内存、栈、线程等OS密切的部分的初始化
set_polling_page
mem_serialize_page
large_page_init()
初始化OS保证的栈大小
最大地址空间
prio_init initialize thread priority policy(java中的10级的thread优先级)
5、 代理程序扩展 相关功能
agent java.lang.instrument 便于创建更改和监控class文件的工具或监控程序,这些程序以agentlib的形式来提供
6、main_thread 进行初始化
7、 ObjectMonitor::Initialize() java语言的同步系统
8、 hotspot/src/share/vm/runtime/init.cpp line:90
init_globals()非常的复杂,此部分是vm内部的主要的模块
9、Threads::add(main_thread);
10、创建VMThread VMThread::vm_thread()
11、加载进来 用到的库、string、hashmap ,java.lang包 等基础的类支持
12、initialize_class(vmSymbols::java_lang_Compiler(), CHECK_0); 初始化编译器
13、quicken_jni_functions() 使jni本地的函数指针更有效
14、SystemDictionary::compute_java_system_loader(THREAD); 指定类加载器
15、os::signal_init(); 初始化OS的信号系统,这样JVM才可以向OS发送相应的信号信息
16、AttachListener::init_at_startup() 初始化 jvm本身的监听器
17、初始化编译器 CompileBroker::compilation_init()
18、call_postVMInitHook(THREAD);
19、WatcherThread::start(); 支持定时器等周期性的任务
20、 os::init_3() 额外的OS初始化的机会
其中穿插的 trace、jniti、管理相关模块、都忽略不计
概述:OS、线程初始化;参数解析;启动回调;加载核心的功能模块;编译器相关
概念补充 :JVMTI(Java Virtual Machine Tool Interface)是一套由 Java 虚拟机提供的,为 JVM相关的工具提供的本地编程接口集合。