深入理解Java虚拟机——走近Java
Java程序设计语言、Java虚拟机、JavaAPI类库这三部分统称为JDK(Java
Development Kit),JDK是用于支持Java程序开发的最小环境。
Java API类库中的Java SE API子集和Java虚拟机这两部分统称为JRE,JRE是支持Java程序运行的标准环境。
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外,还对其做了大量的扩充并提供了相关的部署支持,这个版本以前称为J2EE。
Java发展史:
Java虚拟机发展史:
Sun公司:
-
Classic VM:世界上第一款商用Java虚拟机),sun公司发布JDK1.0时所带的虚拟机,只能使用纯解释器方式来执行Java代码,编译耗时高且执行效率慢。生命周期相对较长,直至JDK1.4时才退出商用虚拟机的历史舞台。
-
Exact VM:在JDK1.2时出现,执行系统具备两级即时编译器、编译器与解释器混合工作模式等。可以知道内存中某个位置的数据具体是什么类型,后被HotSpot VM取代。
-
HotSpot VM: SunJDK和OpenJDK中所带的虚拟机,也是目前使用范围最广的虚拟机。最初由一家名为Longview Technologies的小公司设计于1997年被Sun公司收购,从而属于Sun。HotShot VM的热点代码探测能力可以通过执行计数器找出最具有编译价值的代码,然后通知JIT编译器以方法为单位进行编译,如果一个方法被频繁调用,或方法中有效循环次数很多,将会分别触发标准编译和OSR(栈上替换)编译动作。通过编译器与解释器恰当地协同合作,可以在最优化程序响应时间与最佳执行性能中取得平衡,而且无需等待本地代码输出才能执行程序,即时编译的时间压力也相对减小,这样有助于引入更多的代码优化技术,输出质量更高的本地代码。这也是HotShot 打败Exact成为主流虚拟机的技术优势。
-
KVM:K为“Kilobye“的意思,强调简单、轻量、高度可移植性,但运行速度比较慢,在Android、iOS等出现前曾在手机平台上得到广泛的关注。
-
CDC/CLDC HotShot Implementation:在JSR-139/JSR-218规范中进行定义,希望在手机、电子书、PDA等设备上建立统一的Java编程接口,CDC-HI VM和CLDC-HI VM则是它们的一组参考实现。CDC/CLDC是整个Java ME的重要支柱。但发展前景并不乐观。
-
Squawk VM:运行于Sun SPOT(一种手持的WIFI设备)
是一个Java代码比重较高的嵌入式虚拟机实现。 -
JavaInJava:实验室性质的虚拟机,以Java语言实现本身的运行环境,代码只能以解释模式执行。
-
Maxine VM:发展中,几乎全部以Java代码实现有先进的JIT编译器和垃圾收集器但没有解释器。可在宿主模式或独立模式下执行。
除Sun公司以外:
-
BEA:JRockit VM:曾号称“世界上速度最快的Java虚拟机”。
-
BM:IBM J9 VM:一款设计上从服务器端到桌面应用再到嵌入式都需要全面考虑的多用途虚拟机。
还有其余很多虚拟机,在这里不做太多介绍了。
模块化:是解决应用系统与技术平台越来越复杂、越来越庞大的问题的一个重要途径,站在整个软件工业化的高度来看,模块化是建立各种功能的标准件的前提。
Fork/Join模式:处理并行编程的一种经典方法:
第一次写博客,下次改进,不足之处请指出,图源网络侵删,仅为自己学习笔记。