jvm 源代码笔记 三 create_vm 主流程

大地图: 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相关的工具提供的本地编程接口集合。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值