https://docs.oracle.com/javase/8/docs/
![](https://img.haomeiwen.com/i18102334/376ec65fa4c6c89f.png)
包含了Java运行环境(JRE)和开发工具(编译器,调试器,javadoc等),JDK的编译器Javac[.exe]会将Java代码编译成字节码(.class文件)。编译出来的字节码在任何平台上都是一样的内容。
JRE(Java Runtime Environment)
为Java提供了运行环境,其中最重要的一环就是通过JVM将字节码解释成可执行的机器码。JRE由JVM、Java运行时类库、动态链接库等组成。
JVM(Java Virtual Machine)
Java虚拟机可以看做是一台抽象化的计算机,它有一套完整的体系结构,包括处理器、堆栈、寄存器等。在运行时环境,JVM会将Java字节码解释成机器码。机器码和平台相关的(不同硬件环境、不同操作系统、产生的机器码不同),所以在JVM在不同平台有不同的实现。目前JDK默认使用的实现是Hotspot VM。
Sun Hotspot VM、BEA JRockit VM、IBM J9 VM、Azul VM、Apache Harmony、Google Dalvik VM、Microsoft JVM..
![](https://img.haomeiwen.com/i18102334/ac39d8fbbafc4613.png)
常见JVM
Sum Classic VM
世界上第一款商用的Java虚拟机
只能使用纯解释器的方式来执行Java代码
Exact VM
Exact Memory Management准确试内存管理
编译器和解释器混合工作以及两级即时编译器
只在Solaris平台发布
HotSpot VM
提起HotSpot VM,相信所有Java程序员都知道,它是Sun JDK和OpenJDK中所带的虚拟机,也是目前使用范围最广的Java虚拟机。 但不一定所有人都知道的是,这个目前看起来“血统纯正”的虚拟机在最初并非由Sun公司开发,而是由一家名为“Longview Technologies”的小公司设计的; 甚至这个虚拟机最初并非是为Java语言而开发的,它来源于Strongtalk VM, 而这款虚拟机中相当多的技术又是来源于一款支持Self语言实现“达到C语言50%以上的执行效率”的目标而设计的虚拟机, Sun公司注意到了这款虚拟机在JIT编译上有许多优秀的理念和实际效果,在1997年收购了Longview Technologies公司,从而获得了HotSpot VM。
HotSpot VM既继承了Sun之前两款商用虚拟机的优点(如前面提到的准确式内存管理),也有许多自己新的技术优势, 如它名称中的HotSpot指的就是它的热点代码探测技术(其实两个VM基本上是同时期的独立产品,HotSpot还稍早一些,HotSpot一开始就是准确式GC, 而Exact VM之中也有与HotSpot几乎一样的热点探测。 为了Exact VM和HotSpot VM哪个成为Sun主要支持的VM产品,在Sun公司内部还有过争论,HotSpot打败Exact并不能算技术上的胜利), HotSpot VM的热点代码探测能力可以通过执行计数器找出最具有编译价值的代码,然后通知JIT编译器以方法为单位进行编译。 如果一个方法被频繁调用,或方法中有效循环次数很多,将会分别触发标准编译和OSR(栈上替换)编译动作。 通过编译器与解释器恰当地协同工作,可以在最优化的程序响应时间与最佳执行性能中取得平衡,而且无须等待本地代码输出才能执行程序, 即时编译的时间压力也相对减小,这样有助于引入更多的代码优化技术,输出质量更高的本地代码。
KVM
Kernel-based Virtual Machine的简称,是一个开源的系统虚拟化模块,自 Linux 2.6.20之后集成在 Linux 的各个主要发行版本中。它使用 Linux 自身的调度器进行管理,所以相对于 Xen,其核心源码很少。KVM已成为学术界的主流 VMM 之一。
KVM的虚拟化需要硬件支持(如 Intel VT 技术或者 AMD V 技术)。是基于硬件的完全虚拟化。而Xen早期则是基于软件模拟的Para-Virtualization,新版本则是基于硬件支持的完全虚拟化。但Xen本身有自己的进程调度器,存储管理模块等,所以代码较为庞大。广为流传的商业系统虚拟化软件 VMware ESX 系列是基于软件模拟的 Full-Virtualization。
JRockit
Oracle JRockit (原来的 Bea JRockit)系列产品是一个全面的Java运行时解决方案组合,包括了行业最快的标准Java解决方案。 大量的行业基准测试显示,基本JRockit JVM是世界上最快的JVM。JRockit面向延迟敏感型应用的解决方案JRockit Real Time提供以毫秒或微秒级的JVM响应时间,适合财务前端办公、军事指挥与控制和电信网络的需要。使用JRockit产品,客户已经体验到了显著的性能提高(一些超过了70% )和硬件成本的减少(达50%)。
优势
- 垃圾收集器
- MissionControl服务套件
BEA JRockit Mission Control套件提供了可单独使用的性能工具,它为BEA JRockit的最新版本提供了补充。这个套件由几个独特的性能管理工具组成,可以监控、管理、分析及排除 Java 应用中的内存泄 漏问题,而不会带来通常与这类工具有关的性能消耗问题,也不需要重启服务器来启动故障排除进程。BEA JRockit Mission Control套件包括三个工具,为开发人员和系统管理员提供了前所未有的实时可见性和控制能力。这些功能可以帮助开发人员通过改变使用模式和业务环境, 来调整应用性能、确保系统质量。这些新工具包括:
- BEA JRockit管理控制台。该工具捕获并展现有关垃圾收集停顿、内存利用和CPU使用的实时数据,以及来自Java虚拟机内部MBean服务器里面的JMX MBean信息。这项功能为开发人员和系统管理员控制网络内多个Java虚拟机实例提供了实时可见性和控制能力。
- BEA JRockit运行时分析器(JRA)。JRA就像是一个随需应变的“飞行记录器”,可以详细记录有Java虚拟机及应用运行的详细数据,帮助开发人员查看和分析应用在生产环境中的状况。
- BEA JRockit内存泄漏检测器。这是一种实时分析工具,用于发现和查找导致内存泄漏的原因。
J9
IBM® J9 虚拟机 (JVM) 是一个特定于平台的组件,用于运行 Java™ 程序。
在运行时,JVM 解释由 Java 编译器编译的 Java 字节码。 JVM 充当语言与底层操作系统和硬件之间的转换程序。Java 程序需要特定的 JVM 在特定平台上运行,如 Linux、z/OS® 或 Windows。
IBM VM 的主要组件有:
- JVM 应用程序编程接口 (API)
- 诊断组件
- 内存管理
- 类装入器
- 解释器
- 平台端口层
Azul VM
是Azul system 公司 在Hot Spot基础上进行的改进,是运行在其公司专有的硬件上,一个Azul VM 实例,都可以管理数十个CPU以及数百G的内存资源,而且通过巨大内存范围内,实现可控的GC事件以及垃圾回收。
Liquid VM
BEA 公司的一个产品。更加强大,不需要操作系统的支持,它自己就是一个操作系统。说Java慢,是因为它先经过一层Java VM,然后虚拟机来调用OS,多了一部。而Liquid VM本身就不需要OS的支持,它自己就已经实现了File System,网络支持等等这些必要的功能,本身就相当与一个OS。所以性能和速度都是相当强大的。
Dalvik VM
Dalvik是 Google公司自己设计用于Android平台的虚拟机。Dalvik虚拟机是Google等厂商合作开发的Android移动设备平台的核心组成部分之一。它可以支持已转换为 .dex(即Dalvik Executable)格式的Java应用程序的运行,.dex格式是专为Dalvik设计的一种压缩格式,适合内存和处理器速度有限的系统。Dalvik 经过优化,允许在有限的内存中同时运行多个虚拟机的实例,并且[1] 每一个Dalvik 应用作为一个独立的Linux 进程执行。独立的进程可以防止在虚拟机崩溃的时候所有程序都被关闭。
Microsoft VM
只能运行在windows 平台上,当时是windows上运行效率最快的。
TaobaoVM
淘宝公司根据HotSpot 深度定制的产品。对硬件依赖比较高,eg : 只能使用Intel的CPU,损失了兼容性,但是提高了性能。在JNI(Java Native Interface)调用时,能够降低进程的开销。
网友评论