jni_CreateJavaVm详解
1.确保只有一个线程调用这个方法并且确保只创建一个hotspot vm 实例。因为hotspot vm
创建的静态数据结构无法再次初始化,所以一旦初始化到某个确定点后,进程空里只能有一
个hotspot vm。
2.检查并确保支持当前的jni版本,初始化垃圾收集日志的输出流。
3.初始化os模块,如当前进程id、内存页尺寸,
4.解析传入jni——createJavavm的命令选项,保存以备将来使用
5.初始化标准的java系统属性。
6.支持同步栈、内存和安全点页的模块
7.加载libzip、libhpi、及libthread等库
8.初始化并设置信号管理器
9.初始化线程库
10.初始化输出流日志记录器
11.如果使用agent库,则初始化并启动
12初始化线程状态和线程本地存储,他们储存线程私有数据
13初始化部分hotspot全局数据,如事件日志,os同步语言
14至此,vm可以创建线程可。创建出来的java版main线程被关联到当前操作系统的线程,只不
过还没添加到已有的线程列表上
15初始化并激活java级别的同步
16初始化启动类加载器、代码缓存、解释器、jit编译器、系统字典、
17.现在添加java主线程到以知线程列表中。检查universe(一种必备的全局数据结构)是否正
常。创建vmthread,执行vm所有关键的功能。同时发出jvmti事件,报告Hotspotvm的当前
状态。
18.加载和初始化以下java类:java.lang.String等系统类。
19.启动hotspotvm的信号处理器线程,初始化jit编译器并启动编译代理线程。启动vm辅助线程
1.确保只有一个线程调用这个方法并且确保只创建一个hotspot vm 实例。因为hotspot vm
创建的静态数据结构无法再次初始化,所以一旦初始化到某个确定点后,进程空里只能有一
个hotspot vm。
2.检查并确保支持当前的jni版本,初始化垃圾收集日志的输出流。
3.初始化os模块,如当前进程id、内存页尺寸,
4.解析传入jni——createJavavm的命令选项,保存以备将来使用
5.初始化标准的java系统属性。
6.支持同步栈、内存和安全点页的模块
7.加载libzip、libhpi、及libthread等库
8.初始化并设置信号管理器
9.初始化线程库
10.初始化输出流日志记录器
11.如果使用agent库,则初始化并启动
12初始化线程状态和线程本地存储,他们储存线程私有数据
13初始化部分hotspot全局数据,如事件日志,os同步语言
14至此,vm可以创建线程可。创建出来的java版main线程被关联到当前操作系统的线程,只不
过还没添加到已有的线程列表上
15初始化并激活java级别的同步
16初始化启动类加载器、代码缓存、解释器、jit编译器、系统字典、
17.现在添加java主线程到以知线程列表中。检查universe(一种必备的全局数据结构)是否正
常。创建vmthread,执行vm所有关键的功能。同时发出jvmti事件,报告Hotspotvm的当前
状态。
18.加载和初始化以下java类:java.lang.String等系统类。
19.启动hotspotvm的信号处理器线程,初始化jit编译器并启动编译代理线程。启动vm辅助线程