java 进程自动退出_【JAVA虚拟机(JVM)精髓】07-JVM的生命周期

持续更新JVM相关知识,敬请关注:

Java虚拟机精髓专栏​zhuanlan.zhihu.com
020a43991551a44c936d79088681a7fa.png

总的来说,JVM的生命周期可简单分为启动、运行、退出三个部分。

启动

JVM通过引导类加载器,创建一个初始类来完成启动。

程序执行某个方法,首先需要将所在类加载到内容中,这是一个自定义类,这个类通过系统类加载器加载。父类是Object,Object需要被引导类加载器加载。除了Object类,程序运行还需要很多类的加载来实现,所有依赖的类都加载后,JVM才完成了启动。最早加载的类称为初始类。

public class Test07 {
    public static void main(String[] args) {
        System.out.println("123");
    }
}

示例代码中,main方法运行,需要Test07类加载,Test07就属于自定义类,通过系统类加载器加载,Test07没有指定父类,默认就是Object类,被引导类加载器加载。这里需要说明,Object并不是初始类,除了Object类外,还有很多需要加载的类库。

6a9fe1ea6c2f140c5fdd16afb6b4e6fc.png

运行

Java程序的运行,实际上是一个JVM进程在运行。这个大家可以写一个简单程序,休眠几秒,看一下运行中的进程。

public class Test07 {
    public static void main(String[] args) throws InterruptedException {
        Thread.sleep(10000);
        System.out.println( "done");
    }
}

运行程序,在命令行窗口执行jps指令,可以看到运行中的进程:

511004fefa61179e51daceaa4d8c2342.png

当程序运行结束后,进程也就自然消失,所以说,java程序的运行,是JVM的进程在运行,如果进程终止,java程序也就随之停止。

退出


JVM的退出有很多中情况,这里简单说明下:

  1. 程序正常结束运行,比如上面的示例中,main方法全部执行完毕后,程序退出。
  2. 程序中调用了Runtime或System的exit方法,或者Runtime的halt方法,并且Java安全管理也允许操作是,也会退出JVM
  3. 程序运行过程中,遇到异常错误终止了
  4. 操作系统、硬件原因,导致JVM进程被结束,导致JVM退出

跟踪System.exit方法可知,最终调用Shutdown.halt方法,继而调用halt的本地方法实现了退出。

95fb7b177ad4ed7f2d3563bc07a80298.png

85ea2b41c11de553b2d08bc0d69fafd1.png

826b500f583b7503265a8b246f0d6075.png

这里再提一点,之前说JVM结构时,说到JVM的运行时数据区,对应的其实就是Runtime类。所以Runtime是一个单例模式,对应一个进程。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值