剖析hotspot的launcher

Launcher是一种用于启动JVM进程的启动器,是一个封装了虚拟机的执行外壳,他负责装载JRE环境和Windows平台下的jvm.dll动态链接库(linux平台下则是libjvm.so。(并不是虚拟机的实现)在一个JVM的进程内部,只能执行一个指定的Java程序,也就是当执行 多个java程序时,就启动了多个JVM进程。Launcher是JVM的启动器 ,那么必然会由他负责调用HotSpot的核心代码对JVM执行初始化,以及由他负责维护JVM的整个生命周期。具体流程如下所示:

  1. 进入Launcher的启动函数main()。(main函数主要负责创建运行环境,以及启动一个全新的线程去执行JVM的初始化和调用java程序的main方法)
  2. 启动一个全新的线程调用JavaMain()函数(负责调用InitializeJVM()函数,但InitializeJVM()函数本身并不具备初始化JVM的能力,而是由他调用本地函数JNI_InitializeJVM()函数去完成真正意义上的JVM初始化)。
  3. JVM初始化完成后,Launcher调用LoadClass()函数和GetStaticMethodId()函数,分别获取Java程序的启动类和启动方法。
  4. Launcher会调用本地函数jni_CallStaticVoidMethod()执行java程序的main()方法。
  5. 最后Launcher调用本地函数jni_DetachCurrentThread()断开与主线程的连接。(断开与主线程的连接之后,Launcher会一直等待程序中所有的非守护线程(non_daemonthread)全部执行结束)
  6. 调用本地函数jni_DestoryJavaVM()对JVM执行销毁。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值