Jvm15版本源码阅读之宏开始之前的初始化方法


  这里是分析初始化列表的第一部分,也就是宏开始之前的关于系统的初始化部分.

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初始化就在之后进行.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值