java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > Java JVM基本概念、结构、生命周期

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

作者:刘Java

这篇文章主要介绍了Java 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组成

主要分成三块:

注意:

java编译器把java源文件(.java文件)编译成字节码文件(.class文件),然后JVM对字节码文件进行加载、解释执行。

java的源代码是无法直接在JVM上运行的,Java编译器在JDK中,可以使用javac命令对Java源文件进行编译。

3.1 JVM各模块简介

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

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

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

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

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文