1.启动
1.1.启动器
Launcher(启动器)是用来启动JVM和应用程序的工具。HotSpot中提供了两种Launcher类型,分别是通用启动器和调试版启动器。
通用启动器是指我们非常熟悉的JDK命令程序:java(javaw)。HotSpot提供了一个精简调试Launcher,成为gamma。相对于通用Launcher,gamma就安装在JVM库相同的目录下,或者与JVM库静态链接为一个库文件,因此可以把gamma看做是精简了虚拟机选项解析等逻辑的java命令。
1.2.虚拟机生命周期
下图描述了一个完整的虚拟机生命周期,具体过程如下。
(1)Launcher启动后,首先进入Launcher的入口,即main函数。main函数的重点是:创建一个运行环境,为接下来启动一个新的线程创建JVM并跳到Java主方法做好一切准备工作。
(2)环境就绪后,Launcher启动JavaMain线程,将程序参数传递给它。
(3)一般来说,JavaMain线程将伴随应用程序的整个生命周期。首先,它要做的便是在Launcher模块内调用InitializeJVM()函数,初始JVM。