Java JVM的基本概念、结构、生命周期

  • Post author:
  • Post category:java

介绍了JVM的基本概念、JVM的生命周期、大概结构。

1 JVM简介

JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。

引入Java语言虚拟机JVM后,Java语言在不同平台上运行时不需要重新编译。JVM在执行字节码时,实际上最终还是把字节码解释成具体平台上的机器指令执行,因此屏蔽了与具体平台(win、mac)相关的信息,使得只需要一份字节码文件,就可以在多种平台上不加修改地运行。

不仅如此,现在的JVM还实现了语言的无关性,Scala、Kotlin、Groovy等语言都可以使用JVM运行。

编译后被Java虚拟机所执行的代码使用了一种平台中立(不依赖于特定硬件及操作系统)的二进制格式来表示, 并且经常(但并非绝对)以文件的形式存储, 因此这种格式称为class 文件格式。 实际上JVM的平台、语言无关性的上层原因也是因为.class文件格式的平台、语言无关性。

2 JVM的生命周期

2.1 启动

JVM实例对应了一个独立运行的java程序,它是进程级别。

启动一个Java程序时,会首先建立一个JVM实例,任何一个拥有public static void main(String[] args)函数的class都可以作为JVM实例运行的起点

2.2 运行

main()作为该程序初始线程的起点,任何其他线程均由该线程启动。

JVM内部有两种线程:守护线程和非守护线程,main()属于非守护线程,守护线程通常由JVM自己使用,java程序也可以标明自己创建的线程是守护线程(Thread的setDaemon(true)方法)。

2.3 消亡

  1. 当程序中的所有非守护线程都终止时,JVM退出;
  2. 若安全管理器允许,程序也可以使用System.exit(0)或 Runtime.getRuntime().exit()来退出。
  3. 程序所在平台强制结束JVM进程

3 JVM的体系结构

3.1 JVM组成

主要分成三块:

  1. 类装载器(ClassLoader)(用来装载.class文件)
  2. 执行引擎(执行字节码,或者执行本地方法)
  3. 运行时数据区(方法区、堆、java栈、PC寄存器、本地方法栈)

注意:java编译器把java源文件(.java文件)编译成字节码文件(.class文件),然后JVM对字节码文件进行加载、解释执行。java的源代码是无法直接在JVM上运行的,Java编译器在JDK中,可以使用javac命令对Java源文件进行编译。

3.1 JVM各模块简介

在这里插入图片描述

我们的后续学习主要学习的内容是JVM的类加载机制、运行时数据区域、GC机制、执行引擎机制、以及一些JVM优化

对于源文件的编译,并不属于JVM的范畴,编译原理的内容比较复杂,但是我们可以了解一下,Java源代码编译大概步骤为:

在这里插入图片描述

生成的字节码文件中包含结构信息、元数据、方法信息等,具体的字节码结构在类文件结构部分。深入了解编译器可以看《自己动手实现jvm》、《编译原理》等书。

JVM对Java字节码进行加载、执行,JVM的类加载是通过ClassLoader及其子类来完成的,执行的过程抽象如下:

在这里插入图片描述

参考资料:

  1. R大博客
  2. Java代码编译和执行的整个过程

如有需要交流,或者文章有误,请直接留言。另外希望点赞、收藏、关注,我将不间断更新各种Java学习博客!


版权声明:本文为weixin_43767015原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。