首页 > 编程语言 >HotSpot VM启动时JNI_CreateJavaVM方法执行步骤

HotSpot VM启动时JNI_CreateJavaVM方法执行步骤

时间:2023-01-29 17:01:55浏览次数:39  
标签:初始化 java VM HotSpot CreateJavaVM 线程 Java

1、确保只有一个线程调用这个方法并且确保只创建一个HotSpot VM实例。因为HotSpot VM创建的静态数据结构无法再次初始化,所以一旦初始化达到某个确定点后,进程空间里就只能有一个HotSpot VM。HotSpot VM的启动至此已经无法扭转;

2、检查并确保支持当前的JNI版本,初始化垃圾收集日志的输出流;

3、初始化OS模块,如随机数生成器(Random Number Generator)、当前进程id(Current Process id)、高精度计时器(High-Resolution Timer)、内存页尺寸(Memory Page Sizes)、保护页(Guard Pages)。保护页是不可访问的内存页,用作内存访问区域的边界。例如,操作系统常在线程栈顶压入一个保护页以保证引用不会超出栈的边界。

4、解析传入JNI_CreateJavaVM的命令行选项,保存以备将来使用;

5、初始化标准的Java系统属性,例如java.version、java.vendor、os.name等;

6、初始化支持同步、栈、内存和安全点页的模块;

7、加载libzip、libnpi、libjava及libthread等库;

8、初始化并设置信号处理器(Signal Handler);

9、初始化线程库;

10、初始化输出流日志记录器(Logger);

11、如果用到Agent库(hprof、jdi),则初始化并启动;

12、初始化线程状态(Thread State)和线程本地存储(Thread Local Storage),它们存储了线程私有数据;

13、初始化部分HotSpot VM全局数据,例如事件日志(Event Log),OS同步原语、perfMemory(性能统计数据内存),以及chunkPool(内存分配期);

14、至此,HotSpot VM可以创建线程了。创建出来的Java版main线程被关联到当前操作系统的线程,只不过还没有添加到已知线程列表中;

15、初始化并激活Java级别的同步;

16、初始化启动类加载器(Bootclassloader)、代码缓存、解释器、JIT编译器、JNI、系统词典(System Dictionary)及universe(一种必备的全局数据结构集)。universe是HotSpot VM的一种重要的全局数据结构,里面包含了一系列与Java对象存储相关的重要全局数据结构。universe这种叫法源自SmallTalk,所谓“universe of objects”,本质上就是用来存储所有对象的东西的概念。在HotSpot VM里,universe类是一个静态类,里面是GCheap、SystemDictionary等与Java对象存储相关的重要结构的引用;

17、现在,添加Java主线程到已知线程列表中。检查universe是否正常。创建HotSpot VM Thread,它执行HotSpot VM所有的关键功能。同时发出适当的JVMTI事件,报告HotSpot VM的当前状态;

18、加载和初始化以下Java类:java.lang.String、java.lang.System、java.lang.Thread、java.lang.ThreadGroup、java.lang.reflect.Method、java.lang.ref.Finalizer、java.lang.Class以及余下的Java系统类。此时,HotSpot已经初始化完毕并可使用,只是功能还不完备。

19.启动HotSpot VM的信号处理器线程,初始化JIT编译器并启动HotSpot编译代理线程。启动HotSpot VM辅助线程(如监控线程统计抽样器)。至此,HotSpot VM已功能完备;

20.最后,生成JNIEnv对象返回调用者,HotSpot则准备相应新的JNI请求。

标签:初始化,java,VM,HotSpot,CreateJavaVM,线程,Java
From: https://blog.51cto.com/u_11315052/6025874

相关文章

  • jdk、jre、jvm知识
    一、jdk、jre、jvm介绍1、JDK是Java语言的软件开发工具包,JDK是整个Java开发的核心,他包含了Java的运行环境(JVM+Java系统类库)和Java工具。个人理解:如果说JRE是客户需要安装的......
  • 安装VMware Tools,从本地主机上传文件到虚拟机
    一、在虚拟机上安装VMwareTools在虚拟机开机登陆后,我的上面的“安装VMwareTools”是点不了的,只能在开机的时候,可以点,点击重新安装VMwareTools,然后登录虚拟机  ......
  • JVM面试题
    1.JVM运行流程首先通过编译把Java代码转换成字节码文件,然后类加载器(ClassLoader)再把字节码文件加载到内存中,放在运行时数据区的方法区内,然后需要特定的命令解析器执......
  • jvm内存调优
    一、jvm内存调优主要的目的是减小GC的频率和FullGC的次数。1.FullGC会对整个堆进行整理,包括Young、Tenured和Perm。FullGC由于须要对整个堆进行回收,因此比较慢,所以应......
  • 河北稳控科技振弦采集模块配置工具VMTool 扩展功能指令生成器与实时曲线
    河北稳控科技振弦采集模块配置工具VMTool扩展功能指令生成器与实时曲线 指令生成器(1)指令生成指令生成器可根据需要生成符合MODBUS和AABB通讯协议的读取和控制指......
  • 振弦采集模块配置工具VMTool 扩展功能指令生成器与实时曲线
    振弦采集模块配置工具VMTool扩展功能指令生成器与实时曲线指令生成器(1)指令生成指令生成器可根据需要生成符合MODBUS和AABB通讯协议的读取和控制指令。通过点击串......
  • 一文说清楚jvm 内存模型 & 栈上分配& 标量替换
    今天简单讲一下jvm内存模型(JDK1.8版本)jvm内存模型主要可以分为以下几个模块堆内存栈内存本地方法栈方法区程序计数器堆内存​ 其实开发过程中我们多多少少都......
  • JVM-字符串底层实现原理
    1.什么字符串会进入字符串常量池1.直接写的字面量2.字面量的拼接结果(注意:如果字符串拼接中有变量则结果不会进入字符串常量池)3.调用String的intern方法可以将String存入......
  • JVM垃圾回收
    一、如何判断对象可以回收?1.引用计数法:只要一个对象被其他变量所引用,就让计数加一,引用两次就让计数变为2,取消引用就让计数减一,但是这种算法有严重的弊端,如果两个变量......
  • 3-reg model构建篇-uvm_reg_block
    1. uvm_reg_block的特点(1) 一个寄存器模型必须包含一个reg_block; 一般DUT内具有相同的基地址的所有寄存器,会放在一个reg_block中.(2) uvm_reg_block可以包含任意......