1.JVM是什么
- JVM 是 java虚拟机,是用来执行java字节码(二进制的形式)的虚拟计算机
- JVM是运行在操作系统上的,与硬件没有任何关系
2.Java的跨平台及原理
- 跨平台:由Java编写的程序可以在不同的操作系统上运行,一次编写,多处运行
- 原理:
编译之后的字节码文件和平台没有关系,需要不同操作系统上安装上对应的Java虚拟机
- Java虚拟机不与包括Java在内的任何编程语言绑定,它只和class文件这种二进制文件格式关联
- 无论使用何种语言进行软件开发,只要将源文件编译为正确的Class文件,那么这种语言就可以在Java虚拟机上执行
- 可以说,统一而强大的Class文件结构,就是Java虚拟机的基石、桥梁
3.JVM的分类
- 类加载子系统
- 运行时数据区(栈,堆,方法区)
- 执行引擎(一般都是JIT编译器和解释器共存)
- JIT编译器(主要影响性能):编译执行; 一般热点数据会进行二次编译,将字节码指令变成机器指令。将机器指令放在方法区缓存
- 解释器(负责响应时间):逐行解释字节码
4.三大商业虚拟机
- Sun HotSpot
- 提起HotSpot VM,相信所有Java程序员都知道,它是Sun JDK和OpenJDK中所带的虚拟机,也是目前使用范围最广的Java虚拟机
- 在2006年的JavaOne大会上,Sun公司宣布最终会把Java开源,并在随后的一年,陆续将JDK的各个部分(其中当然也包括了HotSpot VM)在GPL协议下公开了源码, 并在此基础上建立了OpenJDK。这样,HotSpot VM便成为了Sun JDK和OpenJDK两个实现极度接近的JDK项目的共同虚拟机。
- 在2008年和2009年,Oracle公司分别收购了BEA公司和Sun公司,这样Oracle就同时拥有了两款优秀的Java虚拟机:JRockit VM和HotSpot VM。 Oracle公司宣布在不久的将来(大约应在发布JDK 8的时候)会完成这两款虚拟机的整合工作,使之优势互补。 整合的方式大致上是在HotSpot的基础上,移植JRockit的优秀特性,譬如使用JRockit的垃圾回收器与MissionControl服务, 使用HotSpot的JIT编译器与混合的运行时系统
- BEA JRocket
- 专注于服务端应用(JRockit内部不包含解释器实现,全部代码都靠即时编译器编译后执行)
- Jrockit JVM 是世界上最快的jvm3. 2008年被oracle收购
- iBM J9
- 市场定位与hotspot接近,服务器端,桌面应用,嵌入式等
- 目前,是影响力的三大商业虚拟机之一