1. 学JVM的目的是什么?

大家学要带着目的去学 而不是说 他让我学我就学

那么 他为什么让你去学呢?

好了不卖关子了

学习JVM 可以让我们清晰在Java的程序执行流程 对方法 属性 类有着更清晰的理解 并且对学习并发也很有好处 如果说实战的话 那肯定就是JVM参数调优了

这时候 你将不会在是初学者 渐渐向着大佬迈进


当你老了,回顾一生,就会发觉:什么时候出国读书、什么时候决定做第一份职业、何时选定了对象而恋爱、什么时候结婚,其实都是命运的巨变。只是当时站在三岔路口,眼见风云千樯,你作出抉择的那一日,在日记上,相当的沉闷和平凡,当时还以为是生命中普通的一天。


对于我们来说 学JVM只是平凡的一天天 但是将会给未来的我们打下基石

2. 简单介绍JVM

跨平台与跨语言

jvm是一个跨语言的平台 现在已支持多种语言在jvm上运行

换句话说 ​​java平台的语言 而jvm是跨语言的平台​

简单来讲 我们的java源文件 经过javac命令 编译成.class文件 并不是立刻去执行的 而是要通过jvm将其翻译成机器语言 最终得以执行 只是这一切我们无法感知罢了

虚拟机

虚拟机简单分为两种 系统虚拟机而程序虚拟机

前者可以装整一个操作系统 如windows和linux 后者则是为单个程序而设计的 典型代表就是jvm

这里有必要上一张图来让大家理解下jvm所在的位置1. JVM入门介绍_操作系统

注意 jvm并不是直接与硬件进行交互的 它的运行在操作系统上的

3. JVM架构

整体架构

整体架构如下所示 还是先建立个印象 后面需要会画1. JVM入门介绍_操作系统_02

架构模型

Java编译器指令流主要分为两种 一种是基于栈的 一种是基于寄存器的

两者有什么区别呢?

基于栈架构 实现起来相对简单 且不需要依赖硬件 也就是说可以跨平台使用

而基于寄存器架构 依赖于硬件 移植性差

而为了不受硬件的限制,为了更大的跨平台性,所以java编译器实现采用的是栈式架构。

4. JVM生命周期

JVM的启动是由引导类加载器创建一个初始类来完成的,根据JVM的不同实现,该类的定义个不同。

当运行一个java程序的时候,一个JVM进程才被真正启动,程序结束,JVM也随之退出了。

共有五种情况会造成JVM退出,如果问到了,简单答个两三种就可以了,全答出来,就有些卷了,面试官可能都没那么清楚。


  • 程序正常结束,JVM退出
  • 出现异常导致程序退出,JVM随之退出
  • 操作系统的错误导致JVM退出
  • 调用Runtime.hale()或System.exit()导致JVM退出
  • 用JNI Invocation API卸载JVM(C语言调用)

5. JVM的历史发展

1.最初的虚拟机sun classic

这是最古老的虚拟机,1996年Sun公司开发的第一款商用Java虚拟机,实现了解释器与编译器结合运行,解释运行速度快,编译运行效率高,结合起来使用更佳。

2.绝对霸主 HotSpot

占有绝对的市场地位,jdk1.3以后,成为openJdk和OracleJdk都默认的JVM,值得一提的是他的热点代码检测技术,通过计数器找到最具价值的代码缓存起来,提高效率。

3.第二霸主 JRocket

BEA公司研发的号称最快的JVM,这可能是在他们自家产品上实现的,专注于服务端,全部代码全部靠编译器编译执行,了解即可。

ps:该公司后期被Oracle收购,在HotSpot上移植JRocket的优秀特性。

4.第三霸主 J9

IBM公司研发的,市场地位与HotSpot接近。

5.未来霸主 Grral VM

真正跨语言的全栈JVM,可在任何平台上使用,未来可期,如果有天要替换HotSpot,那么下一个接班人必定是它了。