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相关的工具提供的本地编程接口集合。
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相关的工具提供的本地编程接口集合。
- jvm 源代码笔记 三 create_vm 主流程
- JVM 源代码笔记 一
- jvm源代码笔记 二
- Nutch主流程代码阅读笔记整理(三)
- jvm 源代码笔记 四 jvm主要功能模块
- 三种主流的JVM(JDK)使用心得
- 三种主流的JVM(JDK)使用心得
- 三款主流静态源代码安全检测工具比较
- 三款主流云笔记软件比较
- jvm学习笔记(三)
- 深入理解JVM笔记三
- 3. Python脚本学习实战笔记三 主流的XML
- JVM深入学习笔记三:JVM 内存模型
- JVM学习笔记三:JVM参数的含义
- JVM学习笔记三:JVM类加载机制
- JVM学习笔记(三):JVM的垃圾回收
- JVM笔记(三)垃圾收集器
- Mono源代码学习笔记:Console类(三)
- managing module dependencies
- 内核定时器使用(example)
- 语音自动化之系统配置
- PHP 自动将图片转换成BASE64
- jvm源代码笔记 二
- jvm 源代码笔记 三 create_vm 主流程
- C++和Python使用同一个枚举的方法
- 内存与I/O操作
- VI打开和编辑多个文件的命令
- poj2586 典型贪心
- jvm 源代码笔记 四 jvm主要功能模块
- JSP 自定义标签
- SharePoint 2010之LINQ与SPMetal
- mysql中使用like模糊查询时如何转义%