JVM—了解一下Java的几种虚拟机
0.
- 解释器:虚拟机将源代码编译成一种中间的字节码(class文件),与机器平台无关
- 编译器:虚拟机将源代码编译成和本地机器平台相关的机器语言。
- JIT编译器:即时编译器(Just In Time Compiler)
1. Sun Classic VM
- 1996年随着Java1.0发布的世界上第一款商用Java虚拟机,目前已经淘汰。
- 只能使用纯解释器的方式来执行Java代码,代码会逐行编译,效率低下,运行慢。
- 没有内置JIT,但是可以外挂JIT编译器,外挂后解释器将不工作,完全由JIT编译器接管虚拟机的执行系统。
2. Exact VM
- Exact VM 使用准确式内存管理(Exact Memory Management),也就是说JVM可以知道内存上某个位置的的具体类型;比如一个整数,他可以知道是真正存的整数还是某一个整数的引用。
- 编译器和解释器混合工作以及两级即时编译器。具备了一些高性能虚拟机的特点。
- 在JDK1.2的时候,Exact VM只在Salaris平台上发布了,后来就被 HotSpot取代。
3. HotSpot VM
- 继承了Classic VM 和 Exact VM的优点。
- HotSpot VM的热点代码探测能力可以通过执行计数器找出最具有编译价值的代码,然后通知JIT编译器以方法为单位进行编译。如果一个方法被频繁调用,或方法中有效循环次数很多,将会分别触发标准编译和OSR(栈上替换)编译动作。通过编译器与解释器恰当地协同工作,可以在最优化的程序响应时间与最佳执行性能中取得平衡,而且无须等待本地代码输出才能执行程序,即时编译的时间压力也相对减小,这样有助于引入更多的代码优化技术,输出质量更高的本地代码。
4. JRockit
- BEA(已经被Oracle收购)开发的“世界上最快的JVM”(号称)
- 主要做服务器端应用,不太关注程序的启动速度,内部不包含解析器的实现,全部代码都靠即时编译器编译后执行。
- 它的主要优势是垃圾收集器和MissionControl服务套件(它包括内存泄漏检测器、JVM运行时分析器、管理控制台,只一套以极低的开销来监控、管理、分析的工具)
5. J9
- IBM公司开发的JVM。IBM Technology for Java virtual Machine. IT4J
- 类似于HotSpot,支持多种平台,服务器,桌面应用,嵌入式等。
- 主要用于IBM公司的Java产品。
6. Dalvik
- Google公司自己设计用于Android平台的虚拟机。
- 并不是一个Java虚拟机,并没有严格遵循JVM架构。Dalvik基于寄存器,而JVM基于栈。基于寄存器的虚拟机对于编译后变大的程序来说,在它们执行的时候,花费的时间更短。
- 它是使用在Android中的Java执行环境,不过它不是class文件,它是Dex,即Dalvik executable.
7. Microsoft JVM
- 不用解释,微软出的JVM。只有windows平台能运行。。。你懂得。反正已经凉了。
- 当时是速度最快的JVM。后来两家公司撕B后就凉了。当时被告侵权,赔偿了Sun公司一笔钱。
8. Azul VM
- 在HotSpot基础上进行了一些改进的一个高性能Java虚拟机。
- 只能运行中他们公司的专用的设备上。
9. Liquid VM
- 它本身不需要操作系统,它自己就相当于一个操作系统,运行速度贼快。
10. 其他
- 除了以上这些外,其实像国内也有自己的改的虚拟机 比如:阿里巴巴基于OpenJDK改的TaobaoVM,有兴趣可以自己去看看