JVM从零到一系列:01--JVM概述【初识JVM】
0x01.什么是JVM?JVM(Java Virtual Machine):Java虚拟机虚拟机(Virtual Machine):虚拟机是一款软件,用来执行一系列虚拟的计算机指令。虚拟机分为系统虚拟机和程序虚拟机。系统虚拟机是对物理计算机的仿真,提供一个可运行完整操作系统的平台。软件虚拟机是专门为执行单个计算机程序而设计的。在虚拟机上运行的软件所拥有的资源都被限制于虚拟机提供的资源。Java虚拟
·
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,损失了兼容性,提高了性能。
更多推荐
已为社区贡献3条内容
所有评论(0)