1、解析命令行选项。启动器会直接处理一些命令行选项,例如-client或-server,它们决定加载哪个JIT编译器,其他参数则传给HotSpot VM; 2、设置堆的大小和JIT编译器。如果命令行没有明确设
1、解析命令行选项。启动器会直接处理一些命令行选项,例如-client或-server,它们决定加载哪个JIT编译器,其他参数则传给HotSpot VM;
2、设置堆的大小和JIT编译器。如果命令行没有明确设置堆的大小和JIT编译器(client或server),启动器则通过自动化有进行设置。自动优化的默认设定因系统配置和操作系统而有所不同;
3、设定环境变量,例如LD_LIBRARY_PATH和CLASSPATH;
4、如果命令行有-jar选项,启动器则从指定JAR的manifest中查找Main-Class,否则从命令行读取Main-Class;
5、使用标准Java本地接口(Java Native Interface,JNI)方法JNI_CreateJavaVM在新创建的线程中创建HotSpot VM。与后创建的线程相比,初始线程是启动新进程时操作系统内核分配的第一个线程,而新建HotSpot VM进程中运行的初始线程也是同样道理。不在初始线程中创建HotSpot VM,是为了可以对它进行定制,例如Windows上更改栈的大小;
6、一旦创建并初始化好HotSpot VM,就会加载Java Main-Class,启动器也会从Java Main-Class中得到Java main方法的参数。
7、HotSpot VM通过JNI方法CallStaticVoidMethod调用Java main方法,并将命令行选项传给它。