本博文中所讨论的JVM只是自己看书和教程的个人理解,不太严谨,严谨需要另找详细的资料,对细节把控很到位。
本博文环境:
System OS: Windows10 1909
JDK-Version: 1.8.0_202
JVM: Java HotSpot™ 64-Bit Server VM (build 25.202-b08, mixed mode)
IDE: IDEA2021.3
文章目录
前言
jvm可以满足你,面试的需要,项目管理、调优的需求。加上如果你有一定的极客精神,大把的时间。想了解垃圾回收算法、JIT、底层原理,就可以学
一, JAVA和JVM简介
1.1 生态圈
Java是目前应用最为广泛的软件开发平台之一。作为一个平台,那么对于java中的虚拟机扮演着十分重要的地位。
换句话说,java可能会die,但是虚拟机可能不会。如果真的有一天java这门语言被淘汰了,有可能被运行在java虚拟机上的其他语言淘汰,但虚拟机不会。
- Groovy, Scala,JRuby,Kotlin等都是java平台的一部分。
- Java几乎成了开源的代名词,Spring,Apache基金会,JDK,JVM也有不少开源的。
1.2 Java跨平台性
1.3 java虚拟机
Java虚拟机是Java平台的基石。它是技术的组成部分,负责硬件和操作系统的独立性,编译代码的小巧大小以及保护用户免受恶意程序侵害的能力。
Java虚拟机是抽象的计算机。像真正的计算机一样,它具有指令集并在运行时操作各种内存区域。使用虚拟机实现编程语言是相当普遍的
1.4 JVM-跨语言的平台
- 随着Java7的正式发布,Java虚拟机通过JSR-292规范实现在Java虚拟机平台运行非Java语言的编写程序
- Java虚拟机根本不关心运行在其内部的程序到底是使用何种语言编写的,它只关心“字节码文件”
JAVA真正牛的,不是他语言本身有多牛,JVM是才是最牛逼的作品。有一天,java语言很可能被运行在虚拟机上的其他语言淘汰
Java虚拟机提供的语言无关性
1.5 字节码文件
对于我们平常所说的字节码文件,一般都是狭义的指的是JAVA语言编译而成的字节码。实际上,字节码文件准确的来说是任何能够在JVM平台上执行的格式一样的文件。不同的编译器,可以编译出相同的字节码文件,字节码文件也可以在不同的JVM上运行。
对于JVM和java语言没有必然联系,他只是与特定的二进制文件(class文件格式所关联),class文件中包含了JAVA虚拟机指令集和符号表等一些东西。
二. JVM的整体架构
在历史的长河中发展出了多种虚拟机,但是我们今天主要的还是使用HotSpot VM虚拟机。是目前市面上高性能虚虚拟机的代表,所以,默认的都是HotSpot虚拟机。HotSpot采用了解释器和即时编译器并存的架构,不吹牛逼的说,现在JAVA程序的运行性能早已经不是早期人们心中的刻板映象,已经达到了C/C++程序一教高下的地步。
JVM中的初步架构如图所示:
2.1 执行流程
架构模型:
Java编译器输入的指令流基本是一种基于栈的指令集架构,另外一种指令集架构则是基于寄存器的指令集架构。
Hotspot VM 寄存器就是PC寄存器
由于跨平台性的设计,Java的指令都是根据栈设计的。不用平台CPU架构不同,所以不能设计为基于寄存器的。有点是跨平台,指令集小,编译器容器实现,缺点是性能降低(比寄存器),实现同样的功能需要更多的指令。
时至今日,尽管嵌入式平台已经不是Java程序的主流运行平台了(准确来说应该是HotSpot VM的宿主机环境已经不局限于平台
三,资料推荐
《深入理解JAVA虚拟机第3/4版》
https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-1.html#jvms-1.2
https://docs.oracle.com/javase/specs/jvms/se8/html/index.html
参考博客:
https://www.cnblogs.com/niugang0920/p/12359016.html
https://www.jianshu.com/p/5947df0f3506