技术分享 | JVM - 1. Java虚拟机梗概,那些你不知道的VM

Posted 卓朗科技

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了技术分享 | JVM - 1. Java虚拟机梗概,那些你不知道的VM相关的知识,希望对你有一定的参考价值。

技术分享 | JVM - 1. Java虚拟机梗概,那些你不知道的VM

虚拟机梗概


JDK


Java程序设计语言、Java虚拟机、Java API类库这三部分统称为JDK(Java Development Kit),JDK是用于支持Java程序开发的最小环境。


JRE


Java API类库中的JavaSE API子集、Java虚拟机这两部分统称为JRE(Java Runtime Environment),JRE是支持Java程序运行的标准环境。



技术分享 | JVM - 1. Java虚拟机梗概,那些你不知道的VM

(Java技术体系中所包含的内容)


技术服务领域


可以划分为以下四种

Java Card


支持一些Java小程序(Applets)运行在小内存设备(如智能卡)上的平台。


Java ME(Micro Edition)


支持Java程序运行在移动终端(手机、 PDA)上的平台,对Java API有所精简,并加入了针对移动终端的支持,这个版本以前称为J2ME。


Java SE(Standard Edition)


支持面向桌面级应用(如Windows下的应用程序)的Java平台,提供了完整的Java核心API,这个版本以前称为J2SE。


Java EE(Enterprise Edition)


支持使用多层架构的企业应用(如ERP、 CRM应用)的Java平台,除了提供Java SE API外,还对其做了大量的扩充[3]并提供了相关的部署支持,以前称为J2EE。


众多虚拟机


Sun Classic


第一款商用虚拟机,纯解释器的方式执行java代码,当然可以选择外挂一个JIT编译器来工作。

 
由于解释器和编译器不能配合工作,这就意味着如果要使用编译器执行,编译器就不得不对每一个方法、每一行代码都进行编译 。

无论它们执行的频率是否具有编译的价值,基于程序响应时间的压力,这些编译器根本不敢应用编译耗时稍高的优化技术。 

因此这个阶段的虚拟机即使用了JIT编译器输出本地代码,执行效率也和传统的C/C++程序有很大差距。


Exact VM



Sun HotSpot VM


技术分享 | JVM - 1. Java虚拟机梗概,那些你不知道的VM

HotSpot VM的热点代码探测能力可以通过执行计数器找出最具有编译价值的代码,然后通知JIT编译器以方法为单位进行编译。 


如果一个方法被频繁调用,或方法中有效循环次数很多,将会分别触发标准编译和OSR(栈上替换)编译动作。


通过编译器与解释器恰当地协同工作,可以在最优化的程序响应时间与最佳执行性能中取得平衡,即时编译的时间压力也相对减小。


Sun Mobile-Embedded VM/Meta-Circular VM


Sun公司研发的众多虚拟机中有一部分是面向研究,验证观点或一些陌生的标准规范以及特殊领域的存在。


KVM

android ios 出现前在手机平台中曾得到广泛应用”。


CDC/CLDC HotSpot Implementation

“希望规范手机,电子书,pad等设备中的java接口规范,但是现不容乐观”。


Squawk VM

“运行在sum spot(一种手持小型wifi设备),其中除了i/o和非必要的本地代码外基本都是用java实现”。


JavaInJava

“实验性项目,目的是用java来实现java vm,达成“元循环”的思想,内部没有编译器只能依赖解模式执行,性能问题未得到解决”。


Maxine VM

“可以理解为带有JIT编译器的JavaInJava性能接近Hotspot,仍在发展中”。


BEA JRockit/IBM J9 VM


JRockit 无解释器,全依赖即时编译执行。其为专门为服务器硬件和服务器应用场景优化的虚拟机,专注服务器端应用,对启动不太关注。


J9 一款多用途商用的IBM虚拟机,主要针对IBM WebSphere等IBM产品。


Azul VM/BEA Liquid VM


Azul是Hotspot针对Azul公司专有硬件Vega系统而优化的硬件平台虚拟机。


Liquid则是BEA针对自家Hypervisor系统上JRockit的虚拟化版本,自身成为系统直接控制硬件最大效能发挥能力。


64位JDK


Java程序运行在64位虚拟机上需要付出比较大的额外代价: 内存问题。


由于指针膨胀(更宽的寻址)和各种数据类型对齐补白的原因,通常要比32位系统额外增加10%~ 30%的内存消耗。


机构的测试结果显示,64位虚拟机的运行速度在各个测试项中几乎全面落后于32位虚拟机, 两者大约有15%左右的性能差距 在Java EE方面, 企业级应用经常需要超过4GB的内存, 对于64位虚拟机的需求是非常迫切的 在JDK 1.6 Update 14之后, 提供了普通对象指针压缩功能。


(感谢云计算服务事业部张晓磊供稿)




以上是关于技术分享 | JVM - 1. Java虚拟机梗概,那些你不知道的VM的主要内容,如果未能解决你的问题,请参考以下文章

阿里架构技术分享 JAVA虚拟机,JVM内核-原理,诊断与优化+内存模型

免费分享Java虚拟机JVM的优秀图书

每周一书《深入理解Java虚拟机:JVM高级特性与最佳实践(第2版)》分享!

深入理解JVM虚拟机5:虚拟机字节码执行引擎

深入理解JVM虚拟机开篇:JVM介绍与知识脉络梳理

资源分享 | 深入理解Java虚拟机(jvm性能调优+内存模型+虚拟机原理)