0x01.什么是JVM?

JVM(Java Virtual Machine):Java虚拟机
虚拟机(Virtual Machine):
  • 虚拟机是一款软件,用来执行一系列虚拟的计算机指令。

  • 虚拟机分为系统虚拟机程序虚拟机

    • 系统虚拟机是对物理计算机的仿真,提供一个可运行完整操作系统的平台。
    • 软件虚拟机是专门为执行单个计算机程序而设计的。
  • 在虚拟机上运行的软件所拥有的资源都被限制于虚拟机提供的资源。

Java虚拟机:
  • Java虚拟机是一台执行Java字节码的虚拟计算机。【就是二进制字节码的运行环境】
  • 它拥有独立的运行机制,其运行的Java字节码不一定是Java编译的。
  • 所有Java程序都运行在Java虚拟机的内部。
  • JVM运行于操作系统之上,并没有与硬件有直接的交互。

0x02.JVM特性

JVM是一个跨语言的平台
  • 对于字节码,是【一次编译,到处运行】。
  • 对于JVM,只关心字节码, 并不关心是何种语言编译而成的字节码,任何语言,只要按照JVM字节码的规范去编译,都可以被JVM识别,并解释运行。
    在这里插入图片描述
JVM强大之处:
  • JVM的自动内存管理。
  • JVM的自动垃圾回收机制。

0x03.JVM发展历史

  • 2000年,JDK 1.3 发布,Java HotSpot Virtual Machine 正式发布,成为Java的默认虚拟机。
  • 2002年,JDK 1.4 发布,Classic虚拟机退出历史舞台。
  • 2006年,JDK 6 发布,Java开源并建立了 OpenJDK。HotSpot 虚拟机成为OpenJDK中默认的虚拟机。
  • 2008年,Oracle 收购 BEA,得到 JRockit虚拟机。
  • 2010年,Oracle 收购了Sun,获得了Java和HotSpot。
  • 2011年,JDK 7 发布,正式启用了新的垃圾回收机制G1。
  • 2014年,JDK 8 发布,整合了JRockit和HotSpot。
  • 2017年,JDK 9 发布,将G1设置为默认的GC,替代了CMS。
  • 2018年,JDK 11 发布,发布了革命性的ZGC。
  • 2019年,JDK 12 发布,加入RedHat领导开发的 Shenandoah GC。

0x04.JVM的整体结构

在这里插入图片描述

0x05.JVM架构模型

  • Java编译器输入的指令流基本上是一种基于栈的指令集结构。(由其跨平台性决定的)

  • 基于栈式架构的特点:

    • 设计和实现更加简单,适用于资源受限的系统。
    • 使用零地址指令方式分配,指令集更小。(指令更多)
    • 不需要硬件支持,可移植性更好。
  • 基于寄存器架构的特点:

    • 性能优秀,执行更高效。
    • 花费更少的指令去执行一项操作。
    • 指令集完全依赖硬件,可移植性差。

0x06.JVM的生命周期

虚拟机启动:

  • Java虚拟机的启动是通过引导类加载器创建一个初始类来完成的,这个类是由虚拟机的具体实现指定的。

虚拟机的执行:

  • 程序开始执行时,虚拟机运行。
  • 程序结束时,虚拟机停止。
  • 执行Java程序,真正意义上是在执行Java虚拟机的一个进程。
  • 运行的Java虚拟机的目的:执行Java程序。

虚拟机的退出:

  • 可能退出的情况:

    • 程序正常结束。
    • 程序执行过程中遇到异常或错误。
    • 操作系统出现错误。
    • 某一个线程调用Runtime或System类的exit方法,或Runtime类的halt方法,并且Java安全管理器也允许这次exit火灾halt操作。

0x07.JVM发展历程

Classic VM:

  • 1996年JDK1.0的时候,SUN公司发布的Java虚拟机。
  • 世界上第一款商用的Java虚拟机,于JDK1.4时被完全淘汰。
  • 这款虚拟机只提供了解释器。解释器和编译器不能配合工作。
  • 现在的hotspot内置了这款虚拟机。

Exact VM:

  • 为了解决解释器和编译器不能配合工作的问题,SUN 在JDK1.2时提供的虚拟机。

  • Exact Memory Management :准确式内存管理。

    • 虚拟机可以知道内存中耨个位置的数据具体是什么类型。
  • 此款虚拟机具备现代高性能虚拟机的雏形:

    • 热点探测。
    • 编译器和解释器混合工作模式。
  • 最终被HotSpot替代。

HotSpot VM:

  • HotSpot是JDK1.3时发布的,是其默认的虚拟机。

  • 在服务器端,桌面端,嵌入式,都有应用。

  • HotSpot指的是它的热点代码探测技术。

    • 通过计数器找到最具编译价值的代码,除法即时编译或栈上替换。
    • 通过解释器和编译器协同工作,在最优化的程序响应时间与最佳执行性能中取得平衡。
  • 最有影响力的三大商用虚拟机之一。

JRockit VM:

  • 专注服务器端应用。JRockit内部不包含解析器的实现,全都代码都靠即时编译器编译后执行。
  • JRockit JVM被认为是世界上最快的JVM。
  • JRockit提供全面的Java运行时解决方案的组合。
  • 在JDK8中整合了HotSpot和JRockit,整合的方式是在HotSpot的基础上加入JRockit的优秀性能。
  • 最有影响力的三大商用虚拟机之一。

J9(IBM):

  • IBM technology for Java Virtual Machine ,简称IT4J,也叫J9。
  • 市场定位与HotSpot接近,在服务器端,桌面应用,嵌入式等多用途的VM。
  • 广泛应用于IBM的各种Java产品。
  • 最有影响力的三大商用虚拟机之一。

CDC/CLDC HotSpot(KVM):

  • 是Oracle在Java ME产品线上的虚拟机,另一款为Implementation VM。
  • KVM是CLDC-HI的早期产品。
  • KVM在更低端的设备上还有应用,比如智能控制器,传感器,老年手机,功能手机等。

Microsoft JVM:

  • 只能在windows平台下运行。是当时windows下性能最好的Java VM。
  • 1997年,微软因为败诉取消了windows中的VM。

Taobao JVM:

  • AliJVM团队发布。
  • 阿里基于OpenJDK开发了自己的定制版本AlibabaJDK,简称AJDK,是整个阿里Java体系的基石。
  • TaobaoJVM是基于OpenJDK HotSpot VM 发布的国内第一个优化,深度定制且开源的高性能服务器版Java虚拟机。
  • Taobao VM应用在阿里产品上性能高,硬件高度依赖intel的cpu,损失了兼容性,提高了性能。
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐