【JVM与性能调优】Java虚拟机发展史与Sun HotSpot VM入门介绍
一、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.0 | 1996 | 提供了纯解释执行的 Java 虚拟机实现,世界上第一款商用JVM | Sun Classic VM | 开山鼻祖 |
1.1 | 1997 | 虚拟机没有做变更,依然使用 Sun Classic VM 作为默认的虚拟机 | Sun Classic VM | 开山鼻祖 |
1.2 | 1998 | 提供了运行在 Solaris 平台的 Exact VM 虚拟机,但此时还是用 Sun Classic VM 作为默认的 Java 虚拟机 | Exact VM 虚拟机 | 无疾而终 |
1.3 | 2000 | 默认的 Java 虚拟机改为 Sun HotSopt VM,而 Sun Classic VM 则作为备用虚拟机 | Sun HotSopt VM | 武林盟主 |
1.4 | 2002 | Sun Classic VM 退出商用虚拟机舞台,直接使用 Sun HotSpot VM 作为默认虚拟机一直到现在。 | Sun HotSopt VM | 武林盟主 |
JDK版本 | HotSpot JVM版本 |
---|---|
JDK 1.0 | Sun 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。
相关文章
- JVM初探(一):jvm内存结构[通俗易懂]
- 编写一个C程序,运行时输出以下图形_java图形程序设计之图片显示
- Java爱心代码_java怎么敲入代码
- JVM内存与垃圾回收篇第1章JVM和Java体系架构
- Java 中的 int 型转为 long 型
- java 开发中 dom4j的简单用法「建议收藏」
- java后端开发需要什么_从事Java后端开发,要学习哪些知识和技能?[通俗易懂]
- java启动器_JAVA基础:Java 启动器如何查找类
- java ee简介_Java EE 简介
- MySQL字段类型如何转为java_Java JDBC中,MySQL字段类型到JAVA类型的转换
- 【说站】Java内存屏障是什么
- java创建线程池的几种方式_Java中的线程池
- java泛型中的通配符 T,E,K,V,?
- 【Java】Best coding practices every java developer should
- 简化 Java 应用的升级:Eclipse Migration Toolkit for Java(EMT4J)
- JVM是如何执行Java的函数
- Java Activiti6.0 spring5 SSM 工作流引擎 审批流程 java项目框架详解编程语言
- Java数据结构和算法(一)——简介详解编程语言
- Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x0000000794500000, 576716800, 0)详解编程语言
- Linux平台上Java新版本发布(linux发布java)
- Java异步MySQL:开启数据处理新时代(java异步mysql)
- Java监控Oracle性能的最佳实践(java监控oracle)
- java利用做的csv文件解析为list对象详解编程语言
- Linux监控JVM系统性能优化实战(linux监控jvm)
- Java里的Redis事务处理(redis事务java)
- Java和Redis的配合安装方法(java redis安装)
- Linux JVM GC管理追求极致性能(linux jvm gc)
- 使用Java程序执行Linux指令:实现自动化操作(java执行linux命令)
- Oracle与Java程序融合谱写成功曲(java程序Oracle)
- Java模拟Oracle实现稳定数据库性能(java模仿oracle)
- Java技术将数据写入Oracle数据库(java写入oracle)
- java获取系统路径字体、得到某个目录下的所有文件名、获取当前路径
- Java虚拟机JVM性能优化(一):JVM知识总结