jvm 源代码笔记 三 create_vm 主流程

来源:互联网 发布:剑网3正太捏脸数据 编辑:程序博客网 时间:2024/04/19 10:26
大地图: 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相关的工具提供的本地编程接口集合。
原创粉丝点击