文章目录
JVM简介
所谓虚拟机就是一台虚拟的计算机,用来执行一系列计算机指令。分为系统虚拟机和程序虚拟机
- 系统虚拟机:Visual Box,VMware,完全对物理计算机的仿真,提供一个可供运行的完整的操作系统的软件平台
- 程序虚拟机:Java虚拟机,专门执行单个计算机程序
Java虚拟机
- 是一台执行Java字节码的虚拟计算机,拥有独立的运行机制,其运行的Java字节码不一定都是由Java语言所写,只要符合JVM的编写规范,任何字节码文件都可以运行
- Java核心技术就是Java虚拟机,因为所有的Java程序都运行在Java虚拟机内部
- 作用
- Java虚拟机就是执行二进制字节码的运行环境
- 特点
- 一次编译,到处运行
- 自动内存管理
- 自动垃圾回收
- 位置
JVM的整体结构
-
HotSpot VM是目前市面上高性能的虚拟机之一
-
采用解释器和即时编译器并存的架构
区分栈的指令集基于栈和基于寄存器的
Java编译器输入的指令基本上是一种基于栈的指令集架构,另一种是基于寄存器的指令集架构
- 基于栈式架构的特点
- 设计和实现简单,适用于资源受限的系统
- 避开了寄存器分配的难题,使用零地址指令的分配方式
- 指令流中的指令大部分是零地址指令,其执行过程依赖于操作栈,指令集更小,编译器容易实现
- 不需要硬件的支持,可移植性更好,更好实现跨平台
- 基于寄存器架构的特点
- 典型的应用是x86的二进制指令集,比如传统的PC以及Android的Davlik虚拟机
- 指令集架构完全依赖于硬件,可移植性差
- 性能优秀和执行高效
- 花费更少的时间去完成一项操作
- 基于寄存器架构的指令集往往都是以一地址指令,二地址指令和三地址指令为主。
总结:由于跨平台性的设计,Java的指令都是根据栈来设计的。不同的CPU架构不同,所以不能设计为基于寄存器的,优点是跨平台,指令集小,编译容易实现,缺点是性能下降,实现同样的功能需要更多的指令
JVM生命周期
虚拟机的启动
Java虚拟机的启动是通过引导类加载器(bootstrap class loader)创建一个初始类(initial class)来完成的,这个类由虚拟机的具体实现指定
虚拟机的执行
- 程序开始执行,程序结束时停止
- 执行所谓的Java程序的时候,真真正正在执行的是一个叫做Java虚拟机的进程
虚拟机的生命周期
虚拟机的退出
- 程序正常结束
- 在执行过程中遇到异常或者错误而终止
- 由于操作系统错误而导致Java虚拟机进程终止
- 某线程调用Runtime类或者System类的exit(),或Runtime类的halt(),并且Java安全管理器也允许这次exit或halt操作
- 用JNI Invocation API来加载或者卸载Java虚拟机
JVM发展历程
Sun Classic VM
- Sun公司发布的Sun Classic VM,世界上第一款商用Java虚拟机
- 只提供解释器如果使用JIT要外挂,但是二者不能配合工作
- hotSpot内置了此虚拟机
Exact VM
- Exact Memory Management:准确式内存管理
- 虚拟机可以知道内存中某个位置的数据具体是什么类型
- 具备现代高性能虚拟机的雏形
- 热点探测
- 编译器和计数器混合工作
- 只在Solaris平台短暂使用
SUN公司的 HotSpot
- Oracle JDK和Open JDK默认的虚拟机
- 热点代码探测技术
- 通过计数器找到最具编译价值的代码,触发JIT或栈上替换
- 通过编译器和解释器协同工作,在最优化的程序响应时间与最佳执行性能中取得平衡
BEA的 JRockit
- 专注于服务器端
- 它可以不太关注程序的启动速度,因此JRockit内部不包含解析器,全部代码都是靠JIT后执行的
- JRockit JVM是世界上最快的JVM
- 全面的Java运行时解决方案组合
- JRockit面向延迟敏感型应用
- MissionControl服务套件,是以极低的开销来监控、管理和分析生产环境中的应用程序的工具
- 在HotSpot基础上,移植JRockit的优秀特性
IBM的 J9
- 市场定位于HotSpot相似,服务器端、桌面应用、嵌入式等多用途VM
- 广泛用于IBM的各种Java产品
其他类型虚拟机
- KVM和CDC/CLDC Hotspot
- 老年机
- Azul VM
- 与特定硬件平台绑定、软硬配合的专有虚拟机
- Liquid VM
- 与特定硬件平台绑定、软硬配合的专有虚拟机
- Apache Harmony
- Microsoft JVM
- TaoBao JVM
- Dalvik VM
- 只能称作虚拟机,不能称为Java虚拟机
- Graal VM
- 在HotSpot基础上增强而成的跨语言全栈虚拟机,可作为”任何语言“的运行平台使用
- 如何HotSpot有一天被取代,Graal VM希望最大