由Launcher负责调用HotSpot的核心代码对JVM执行初始化,以及由它负责维护JVM的整个生命周期。 Launcher是一种用于启动JVM进程的启动器,并且可以根据类型划分为两种不同的Launcher,一种是
由Launcher负责调用HotSpot的核心代码对JVM执行初始化,以及由它负责维护JVM的整个生命周期。
Launcher是一种用于启动JVM进程的启动器,并且可以根据类型划分为两种不同的Launcher,一种是正式版的启动器,也就是大家在windows平台下经常用到的java.exe和javaw.exe程序。前者在运行时会保留控制台,以及显示程序的输出信息。而后者主要是用于执行Java的GUI程序,也就是说,使用javaw.exe执行Java程序时不会显示任何的程序的输出信息。
从严格意义上来说,Launcher只是一个封装了虚拟机的执行外壳,由它负责状态JRE环境和windows平台下的jvm.dll动态封装库,也就是说,当执行多个Java程序时,也就意味着同时启动了多个JVM进程。
JVM的初始化操作其实就是HotSpot执行启动的前提条件,并且在初始化过程中还涉及到HotSpot中的一些核心模块的初始,例如初始化OS模块、初始化全局数据结构、启动线程、初始化全局模块等。
一旦Java程序或者Java main方法执行结束,HotSpot VM就必须检查和清理所有程序或者方法执行过程中生成的未处理异常。此外,方法的退出状态和线程的退出状态也必须返回它们的调用者。调用Java本地接口方法DetachCurrentThread将Java main方法与HotSpot VM脱离(Deteched)。每次HotSpot VM调用DetachCurrentThread时,线程数就会减1,因此Java本地接口知道何时可以安全地关闭HotSpot VM,并能确保当时HotSpot VM中没有正在执行的操作,Java栈中没有激活的Java帧。