Jvm15版本源码阅读之宏开始之前的初始化方法
- 1 宏开始之前的关于系统的初始化方法
- 1.1 VM_Version::early_initialize
- 1.2 ThreadLocalStorage::init
- 1.3 ostream_init
- 1.4 Arguments::process_sun_java_launcher_properties
- 1.5 os::init
- 1.6 create_vm_timer.start
- 1.7 Arguments::init_system_properties
- 1.8 JDK_Version_init
- 1.9 Arguments::init_version_specific_system_properties
- 1.10 LogConfiguration::initialize
- 1.11 os::init_before_ergo
- 1.12 HOTSPOT_VM_INIT_BEGIN
- 2 小结
这里是分析初始化列表的第一部分,也就是宏开始之前的关于系统的初始化部分.
1 宏开始之前的关于系统的初始化方法
1.1 VM_Version::early_initialize
此处vm的版本初始化主要针对cpu指令而言,并不是全部的初始化.如果是X86的cpu指令集,则不需要做任何操作,如果是arm的,则进行设置.
1.2 ThreadLocalStorage::init
ThreadLocalStorage类是公共类,没有对象生成,所有方法都是类方法,在使用时时加锁的,目的就是放入key和value,key是当前线程哈希值,value是当前线程指针.
此时执行放入的是0号线程.
1.3 ostream_init
是输出流模块初始化,重要的是设置了gc信息流的时间从0开始,而不是第一次gc的时间戳.
1.4 Arguments::process_sun_java_launcher_properties
处理jvm加载器的一些信息,主要是针对-Dsun.java.launcher和-Dsun.java.launcher.is_altjvm这两个参数,并把参数值储存起来.
1.5 os::init
进入该方法,如下所示
1 获取系统的内存页大小
2 记录该页大小
3 记录当前线程id,也就是0号线程
4 时间初始化及记录用时时长,最后初始化posix
1.6 create_vm_timer.start
计时开始.
1.7 Arguments::init_system_properties
这个是设置jvm的参数和系统参数,在java中调用的System.getProperty方法的所有参数值都在自此方法中设置.
1.8 JDK_Version_init
对于第一个版本的初始化相比,此处是全部的初始化,包括大版本,小版本,安全,构建以及补丁的版本号,包含全部信息.
1.9 Arguments::init_version_specific_system_properties
这是之前jdk的版本全部信息设置后,再次设置的系统信息,主要添加了java.vm.specification.vendor,java.vm.specification.version和java.vm.vendor的值.
1.10 LogConfiguration::initialize
Jdk9之后的所有日志都统一了,因此这里是对整个日志的初始化.
1.11 os::init_before_ergo
提高jvm和gc性能的一些设置,如下所示
1 获取系统何用cpu数目
2 设置lage page,此处为空方法,因为有些系统默认不开启lage page,需要手动设置
3 设置栈区,并合系统内存页对齐
4 再次更新vm的版本信息
1.12 HOTSPOT_VM_INIT_BEGIN
宏,标志着vm的初始化正式开始.
2 小结
这部分主要是进行宏开始之前的初始化,主要涉及系统的设置等,vm初始化就在之后进行.