JVM启动过程

配置JVM装载环境

  • JVM.dll文件的查找
1
2
1、通过JRE的路径找到JVM.cfg
2、确定类型找到JVM.dll
  • JVM.dll文件装载
1
2
1、LoadLirbary方法装载JVM.dll动态l连接库
2、装载JVM环境完成
  • JVM参数解析(JavaVMOption)

  • 参数处理

1
2
3
1、-Xmn:设置新生代的大小NewSize和MaxNewSize
2、-Xms:堆内存的初始大小 InitialHeapSize
3、-Xmx:堆内存的最大值MaxHeapSize
  • 参数验证

  • 设置线程栈的大小

    1
    2
    3
    4
    5
    -Xss 线程栈启动参数
    每个线程分配的内存大小,默认JDK1.4中是256K,JDK1.5+中是1M

    如果启动参数未设置-Xss,即threadStackSize为0,则调用InvocationFunctions的GetDefaultJavaVMInitArgs方法获取JavaVM的初始化参数,即调用JVM.dll函数JNI_GetDefaultJavaVMInitArgs,定义在share\vm\prims\jni.cpp
    ThreadStackSize定义在globals.hpp中,根据当前系统类型,加载对应的配置文件,所以在不同的系统中,ThreadStackSize的默认值也不同。
  • 执行main方法

线程栈大小确定后,通过ContinueInNewThread方法创建新线程,并执行JavaMain函数,JavaMain函数的大概流程如下


1、新建JVM实例
2、加载主类的class
1
分jar和class方式加载
3、查找main方法
3、执行main方法