JVM技术简介

  • JVM 简介
  • JVM是什么
  • 市场主流JVM分析
  • 为什么要学习JVM
  • JVM体系结构
  • JVM规范架构
  • Hotspot基本架构
  • Graalvm基本架构分析(了解)
  • 总结(Summary)
  • 面试FAQ分析
  • 常见Bug分析


JVM 简介

JVM是什么

JVM 是 Java Virtual Machine的缩写,顾名思义,它是一个可以执行JAVA字节码的虚拟计算机(有自己的指令集、内存区域、执行引擎等),拥有自己独立的运行机制,是JAVA平台的一部分,如图所示:

java中jvm是什么作用 jvm是java的什么_JVM


其中,图中的:

  • JRE(Java Runtime Environment)Java程序运行时的一些基础类库,同时包含JVM。
  • JDK (Java Development Kit) Java程序开发工具包(包含了jre,jvm,工具)。

JVM是 Java 程序能够实现跨平台的基础(Java的跨平台本质上是通过不同平台的JVM实现的),它的作用是加载Java字节码(bytecode),然后翻译或解释成对应平台的机器码再交由 CPU 执行。如图-2所示:

java中jvm是什么作用 jvm是java的什么_Java_02


程序在执行之前先要把 Java 代码(.java)转换成字节码(.class),JVM 通过类加载器 (ClassLoader)把字节码加载到内存中,但字节码文件是JVM 的一套指令集规范(每一条JAVA指令,Java虚拟机规范中都有详细定义,如怎么取操作数,怎么处理操作数,处理结果放在哪里。),并不能直接交给底 层操作系统去执行,因此需要特定的命令解析器执行引擎(Execution Engine) 将字节码翻译成底层机器码,再交由 CPU 去执行。

市场主流JVM分析

JVM是一种规范,基于这种规范,不同公司就对此规范做了具体实现,例如市场上的一些主流JVM如下:

  1. HotSpot VM (Sun公司研发,后在2010年由Oracle公司收购)。
  2. JRockit VM (BEA公司研发,后在2008年由Oracle公司收购)。
  3. J9 VM (IBM 内部使用)。
  4. TaobaoJVM(AliJVM团队开发,基于OpenJDK开发了AlibabaJDK)
    5)…
    说明:HotSpot目前是应用最官方,最主要的一款JVM虚拟机。

为什么要学习JVM

第一:深入理解JVM可以帮助我们从平台角度提高解决问题的能力,例如:

  • 有效防止内存泄漏(Memory leak)。
  • 优化线程锁的使用 (Thread Lock)。
  • 科学进行垃圾回收 (Garbage collection)。
  • 提高系统吞吐量 (throughput)。
  • 降低延迟(Delay),提高其性能(performance)。

第二:企业面试需要(中高级程序员必备技能),例如:

java中jvm是什么作用 jvm是java的什么_Java_03

其实,我们学习一些java基础代码,可以不懂JVM。但是如果你想写一些比较精巧、效率比较高的代码,就需要懂一些JVM执行层面的知识了,比方说各种资源的分配,然后进行调优和故障排查。

JVM体系结构

JVM规范架构

JVM规范中,JVM主要由如下几部分构成,如图所示:

java中jvm是什么作用 jvm是java的什么_java_04

  1. 类加载系统 (ClassLoader System) :负责加载类到内存。
  2. 运行时数据区 (Runtime Data Area):负责存储数据信息(对象、方法等)。
  3. 执行引擎 (Execution Engine):负责解释执行字节码、执行GC操作等。
  4. 本地库接口(Native Interface) 负责融合不同的编程语言为 Java 所用。

Hotspot基本架构

Java Hotspot 虚拟机是基于JVM规范的一种基本实现,它在JDK8版本中的基本架构(Architecture)如下:

其中,JVM规范中的方法区,在JDK8的HotSpot虚拟机中称之为元空间Metaspace。

java中jvm是什么作用 jvm是java的什么_JVM_05

Graalvm基本架构分析(了解)

GraalVM是Oracle发布的下一代Java虚拟机,2019.05才发布了第一个release 版本,分别有社区版和企业版。例如:

java中jvm是什么作用 jvm是java的什么_JVM_06


GraalVM有 三大特点

  1. 高效能运行 Java(使用 GraalVM 执行 Java 程式可以变得更快)。
  2. 多语言并行(可以在 Java 里面同时使用多种语言,像是 JavaScript、R…)
  3. 快速启动(直接把 Java 应用编译成机器码,执行起来体积更小、启动速度更快)。

总结(Summary)

面试FAQ分析

  • 你用的什么JVM(JAVA虚拟机)?(HotSpot)
  • 你了解市面上有哪些JVM?(HotSpot,JRockit,J9,TaobaoVM,Dalvik)
  • JDK,JRE,JVM之间是什么关系?(JDK>JRE>JVM)
  • 你觉得下一代JVM的发展方向应该是怎样的?(支持更多编程语言)
  • JVM规范JVM由哪及部分构成?(类加载子系统,运行时数据区、执行引擎、本地方法接口)
  • 为什么我们要学习JVM?

常见Bug分析