zl程序教程

您现在的位置是:首页 >  后端

当前栏目

【JVM与性能调优】Java虚拟机发展史与Sun HotSpot VM入门介绍

JAVAJVM性能虚拟机入门 介绍 调优 发展史
2023-09-14 09:04:55 时间

一、Java虚拟机(JVM)介绍

Java虚拟机(Java Virtual Machine,JVM)
是一种能够在不同平台上运行Java字节码的虚拟计算机。
JVM(Java Virtual Machine)是 Java 语言的核心,它是 Java 平台的基础。
JVM 是一个虚拟的计算机,它具有自己的指令集和堆栈。
Java 代码被编译成字节码,然后在 JVM 上运行。
JVM 还负责内存管理,垃圾回收和安全性等方面。

二、Java虚拟机发展史

JDK 版本升级不仅仅体现在语言和功能特性上,还包括了其编译和执行的 Java 虚拟机的升级。

下面是Java虚拟机发展史的主要里程碑:

JDK版本年份主要里程碑
1.0/1.1期间1995-1997最早的Java虚拟机,提供了基本的内存管理、类加载、字节码解释等功能,但性能较低。
1.2/1.3期间1998-2000引入了JIT,可以将频繁执行的字节码编译成本地代码,提高了性能。
1.4/5期间2002-2005进一步优化了性能,并支持动态生成字节码和调试工具等新特性。
6/7期间2006-2011引入了G1垃圾收集器、可重入锁、NIO库等新特性,进一步提高了性能和安全性。
8/9期间2014-至今引入了Lambda表达式、Stream API、模块化系统等新特性,并优化了GC和性能。
JDK版本年份主要里程碑虚拟机家族地位
1.01996提供了纯解释执行的 Java 虚拟机实现,世界上第一款商用JVMSun Classic VM开山鼻祖
1.11997虚拟机没有做变更,依然使用 Sun Classic VM 作为默认的虚拟机Sun Classic VM开山鼻祖
1.21998提供了运行在 Solaris 平台的 Exact VM 虚拟机,但此时还是用 Sun Classic VM 作为默认的 Java 虚拟机Exact VM 虚拟机无疾而终
1.32000默认的 Java 虚拟机改为 Sun HotSopt VM,而 Sun Classic VM 则作为备用虚拟机Sun HotSopt VM武林盟主
1.42002Sun Classic VM 退出商用虚拟机舞台,直接使用 Sun HotSpot VM 作为默认虚拟机一直到现在。Sun HotSopt VM武林盟主
JDK版本HotSpot JVM版本
JDK 1.0Sun Microsystems的Classic VM是JDK 1.0中的Java Virtual Machine实现。
JDK 1.2引入了 HotSpot VM,它是一种基于动态编译的虚拟机,可以提高 Java 应用程序的性能。
JDK 1.3引入了 Java HotSpot Client VM 和 Java HotSpot Server VM,它们是 HotSpot VM 的两个变体,分别用于客户端和服务器端应用程序。
JDK 1.4引入了 Java HotSpot VM 的第二个版本,它包括了许多新的功能和性能优化。
JDK 5引入了 Java HotSpot VM 的第三个版本,它包括了许多新的功能和性能优化,如自适应编译器和堆栈上替换等。
JDK 6引入了 Java HotSpot VM 的第四个版本,它包括了许多新的功能和性能优化,如 G1 垃圾回收器和类数据共享等。
JDK 7引入了 Java HotSpot VM 的第五个版本,它包括了许多新的功能和性能优化,如新的垃圾回收器和动态语言支持等。
JDK 8引入了 Java HotSpot VM 的第六个版本,它包括了许多新的功能和性能优化,如元空间和 Lambda 表达式等。

除了Oracle官方实现的HotSpot JVM外,还有其他公司和社区提供的Java虚拟机实现,例如:IBM J9、Azul Zing、OpenJ9等。这些实现在性能、垃圾收集等方面都有所不同,可以根据具体应用场景进行选择。

三、Sun HotSpot VM入门介绍

3.1 HotSpot VM 是什么?

Sun HotSpot VM是使用最为广泛的 Java 虚拟机
Sun HotSpot VM是Java Virtual Machine(JVM)的一种实现
Sun HotSpot VM是一个基于动态编译器的虚拟机,可以提高Java应用程序的性能。
Sun HotSpot VM是JDK 1.2中引入的,是Java应用程序的默认虚拟机。
Sun HotSpot VM是SunJDK 和OpenJDK两个实现极度接近的JDK项目的共同虚拟机。

3.2 HotSpot VM发展历史

Sun HotSpot VM 可以说是使用最为广泛的 Java 虚拟机,几乎所有的 Java 程序员都知道它。但实际上,这个虚拟机并不是由 Sun 公司原生开发的,而是由一个叫 Longview Technologies 公司开发的。而 Sun 公司注意到了这款虚拟机在 JIT 编译上的许多优秀成果,于 1997 年收购了 Longview Technologies 公司,从而获得了 HotSpot VM。

从 2000 年 JDK 1.3 发布,HotSpot VM 作为默认的虚拟机开始登上历史舞台。
到现在 2018 年,18 年时间过去了,其依然是最常用的虚拟机,可见 Sun HotSpot VM 的生命力顽强

3.3 HotSpot VM优点

要说 HotSpot 不仅仅有前面说到两款虚拟机(Sun Classic VM、Exact VM)的优点(如:准确式内存管理),也有许多自己的新技术,例如:热点探测技术。

3.3.1 准确式内存管理

准确式内存管理是一种内存管理技术,它可以减少内存泄漏和内存溢出等问题。
在Java中,准确式内存管理是通过使用指针和引用计数来实现的。

  • 指针是指向内存中对象的地址
  • 引用计数是指跟踪每个对象被引用的次数。
    当对象不再被引用时,垃圾回收器会自动将其释放。

在Java中,准确式内存管理是由JVM的垃圾回收器实现的。
JVM的垃圾回收器会定期扫描内存中的对象,并标记哪些对象可以被释放。
然后,垃圾回收器会自动释放这些对象的内存空间,以便其他对象可以使用它们。

3.3.2 热点代码探测技术

热点代码探测技术指的是通过执行计数器找出最具优化价值的代码,然后通知 JIT 编译器以方法为单位进行深度优化编译。但其实 Exact VM 中也有类似的技术,Sun 公司内部还因此大吵了一架,但最终还是选择了 HotSpot 作为默认的虚拟机,其中的缘由不得而知。

热点代码探测技术是HotSpot VM用于识别频繁执行的代码并针对性地进行优化的一种技术。这种技术基于这样一个观察结果:大多数Java应用程序在执行过程中会花费大量时间来执行其中的一小部分代码。通过识别这些“热点”代码并进行优化,HotSpot VM可以显著提高Java应用程序的性能。

HotSpot VM使用热点代码探测技术来识别这些热点代码。这种技术会监视应用程序的执行情况,并记录哪些代码被频繁执行。一旦识别出这些热点代码,HotSpot VM就会使用一种称为“即时编译器”的技术来将这些代码编译成本地机器代码。这种本地机器代码比Java字节码更快,因此可以显著提高应用程序的性能。

JVM热点代码探测技术指的是用于识别Java应用程序中最常执行的代码路径的技术。这些技术包括基于采样的分析,例如在运行时使用Java虚拟机工具接口(JVM TI)提供的方法,对Java堆使用情况进行分析、跟踪和监视,以及使用可视化工具(例如Java Mission Control)实时监控应用程序执行过程中的性能瓶颈和资源利用率等。这些技术可以帮助开发人员更好地理解和优化系统性能,并提高应用程序的吞吐量和响应时间。

3.4 检查Java安装是否使用HotSpot VM?

使用以下命令检查Java安装是否使用HotSpot VM:

java -version

这将显示安装在系统上的Java版本以及正在使用的VM的名称。
在这里插入图片描述
如果显示“Java HotSpot™”,则表示正在使用HotSpot VM。