开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第43天,点击查看活动详情
之前在其他平台发表过的文章,今天分享在掘金,跟大家一起学习~
1.JVM的整体结构
在运行时数据区中,方法区和堆区是线程共享的,而其他区域是线程独占的,这一点要注意。接下来,会有堆JVM的各个结构做更加深入的讲解。
2.回顾一下Java代码的执行流程
从宏观上看,Java源程序会被编译成字节码文件,然后字节码文件会在不同操作系统上的JVM上被执行,从而得到我们想要的结果。 从微观上看,会有很多复杂的过程,这篇博客写得非常清楚,推荐给大家:blog.csdn.net/sinat_33087…
3.JVM的生命周期
(1)虚拟机的启动
Java虚拟机的启动时通过引导类加载器(Bootstrap Class Loader)创建一个初始类(Initial Class)来完成的,这个类是由虚拟机的具体实现指定的。
(2)虚拟机的执行
一个运行中的Java虚拟机有一个清晰的任务:执行Java程序 程序开始执行时才运行,程序结束时就停止 执行一个所谓的Java程序时,真正执行的是一个叫做JVM的进程
(3)虚拟机的退出
有如下几种情况:
- 程序正常执行结束
- 程序在执行过程中遇到了异常或错误而终止
- 由于操作系统出现错误而导致JVM进程终止
- 某线程调用Runtime类或System类的exit方法,或Runtime类的halt方法,并且Java安全管理器也允许这次exit或halt操作
- JNI规范描述了用JNI Invocation API来加载或卸载JVM时