一、整体结构
整个JVM可以分为三个部分,以HotSpot虚拟机为例:
- 类加载器(ClassLoader):负责把字节码文件生成Class对象放入内存
- 运行时数据区:保存Class对象,分为线程共享的方法区、堆,非共享的JVM栈、本地方法栈、程序计数器(PC register)
- 执行引擎:包括解释执行器、编译器(JTI)、垃圾回收期,负责把字节码转换为机器码
二、java代码的执行流程
java文件是通过前端编译器(javac等),生成字节码文件(.class)。主流JVM都是解释器和编译器并存的架构。
- 解释执行器:逐行翻译class文件,负责响应时间
- 编译器:对热点代码就行缓存,下次直接调用,提高性能
三、JVM的架构模型
指令集架构分为2种,① 基于栈 ②基于寄存器,HopSpot就是基于栈的指令架构。
- 跨平台性
- 指令集小、指令多
- 执行性能比寄存器差
四、jvm生命周期
1、启动:引导类加载器加载(bootstrap class loader)创建一个初始类(initial class)完成的。
2、执行:执行java任务,每个java任务就是jvm中的一个进程
3、结束:java任务执行结束,就是执行完成,或者异常、调用System\Runtime的exit操作
五、JVM发展历程
- Sun Classic VM:第一个商用的jvm,只有解释器
- Exact VM:可知道内存中某个位置是哪个类型,编译器和解释器一起使用
- HotSpot VM:至今依然使用,最著名的虚拟机之一,默认的虚拟机(方法区概念)
- JRockit:专注于服务器端,不关心启动速度,所以不包含解释器,只有编译器,所以是世界上最快的JVM
- J9:IBM的JVM,定位和HotSpot相近,号称世界上最快的JVM,在IBM产品上很稳定
- CDC/CLDC HotSpot:java移动端的虚拟机
- KVM:低端设备上,老人机\低端手机等
- Azul\Liquid VM:与硬件整合,性能更高
- Harmony:Apache 推出,在Android SDK中借鉴了大量代码编写方式
- Microsoft JVM:windows 平台上,后来sun状告
- TaoBao JVM:HotSpot深度定制,依赖intel的cpu
- Dalvik VM:5.0之前提供的Android虚拟机,执行dex文件,寄存器架构模型
- Graal VM:2018年4月 oracle公布,真正实现了跨语言的全站虚拟机,可能替代HotSpot