深入理解java虚拟机第二版(一)走进java
java技术体系;java发展史;Java虚拟机的发展史;
1.java技术体系:
- java card : java小程序
- java me: 移动终端(手机,PDA)
- java se : 桌面级应用
- java ee : 企业级应用
2.java发展史
-
1995年5月23日,Java语言诞生
-
1996年1月,第一个JDK–JDK1.0诞生
-
1996年4月,10个最主要的操作系统供应商申明将在其产品中嵌入JAVA技术
-
1996年9月,约8.3万个网页应用了JAVA技术来制作
-
1997年2月18日,JDK1.1发布
-
1997年4月2日,JavaOne会议召开,参与者逾一万人,创当时全球同类会议规模之纪录
-
1997年9月,JavaDeveloperConnection社区成员超过十万
-
1998年2月,JDK1.1被下载超过2,000,000次
-
1998年12月8日,JAVA2企业平台J2EE发布
-
1999年6月,SUN公司发布Java的三个版本:标准版(J2SE)、企业版(J2EE)和微型版(J2ME)
-
2000年5月8日,JDK1.3发布
-
2000年5月29日,JDK1.4发布
-
2001年6月5日,NOKIA宣布,到2003年将出售1亿部支持Java的手机
-
2001年9月24日,J2EE1.3发布
-
2002年2月26日,J2SE1.4发布,自此Java的计算能力有了大幅提升
-
2004年9月30日18:00PM,J2SE1.5发布,成为Java语言发展史上的又一里程碑。为了表示该版本的重要性,J2SE1.5更名为Java SE 5.0(因为新特新增加特别多,所以起了个高大上的名字!)
-
2005年6月,JavaOne大会召开,SUN公司公开Java SE 6。此时,Java的各种版本已经更名,以取消其中的数字“2”:J2EE更名为Java EE,J2SE更名为Java SE,J2ME更名为Java ME
-
2006年12月,SUN公司发布JRE6.0
-
2009年12月,SUN公司发布Java EE 6
-
2010年11月,由于Oracle公司对于Java社区的不友善,因此Apache扬言将退出JCP
-
2011年7月28日,Oracle公司发布Java SE 7
-
2014年3月18日,Oracle公司发表Java SE 8(市场主流版本)
-
2017年9月21日,Oracle公司发表Java SE 9
- 2018年3月21日,Oracle公司发表Java SE 10
- 2018年9月25日,Oracle公司发表Java SE 11
3. Java虚拟机的发展史.
自96年SUN公司发布包含JVM的JDK依赖,产生了大量优秀的JVM.下面将简单的进行介绍.
3.1 Sun Classic/Exact VM
Sun Classic 是世界上第一款商用的JVM,这款JVM只能以纯解释器的方式来执行Java代码,如果要使用JIT编译器,就必须进行外挂.而一旦外挂了JIT编译器,JIT编译器将完全接管虚拟机的执行系统,解释器又不在工作了.由于解释器和编译器不能配合工作,如果使用编译器执行,编译器将针对每一条代码进行编译,基于响应时间的压力,又无法使用编译耗时稍高的优化技术."Java语言很慢"的形象就是在这时候在用户心目中形成的.
3.2 Exact VM
为解决Classic VM所面临的问题,Sun的虚拟机团队在Solaris平台上发布了一款名为Exact VM的虚拟机.
这款虚拟机已具备现代高性能虚拟机的雏形,比如两级即时编译器、编译器和处理器的混合处理模式等.它因使用准确式内存管理而得名,即虚拟机可以知道内存中某个位置存储的数据具体是什么类型,这将有利于在GC(垃圾收集)的时候准确判断堆上的数据是否还有可能被使用,而每一次定位对象的时候都少了一次间接查找的开销,从而提高了执行效率.
虽然Exact VM相对Classic VM来说先进了很多,但它还没有来的发布Windows和Linux平台下的商用版本就被更加优秀的Hotspot VM所取代了.而Classic VM的生命周期则相对长了很多,其在JDK 1.2和JDK 1.3中也作为备用选择与Hotspot VM并存.直到JDK 1.4时Classic VM真正的完全退出了商用JVM的历史舞台.
3.3 Sun Hotspot VM.
Hotspot VM是Sun JDK和OpenJDK中所带的JVM,但并非是由Sun公司开发的,而是由一家名叫"Longview Technologies"的小公司设计,Sun公司注意到这款虚拟机在JIT编译上的诸多优秀理念和实际效果,在1997年收购了Longview Technologies公司,从而获得了Hotspot VM.
Hotspot VM即继承了Sun之前两款商用虚拟机的优点,(如前面所说的准确内存管理),也具备其自身的技术优势.正如其名称:Hotspot指的是它的热点代码探测技术.它可以通过执行计数器来找出最具备编译价值的代码,然后通知JIT编译器以方法为单位进行编译,通过编译器和解释器恰当的协同工作,可以在最优化的程序执行时间和最佳执行性能之间取得平衡.
在2006年的JavaOne大会上,Sun公司宣布最终将会把Java开源,并在随后的一年中陆续将JDK的各个部分(包括Hotspot VM)在GPL协议下公开了源码.并在此基础之上建立了OpenJDK.
2008年和2009年,Oracle公司分别收购了BEA公司和Sun公司,如此便获得了两款优秀的Java虚拟机:JRockit VM和Hotspot JM.随后完整了这两款虚拟机的整合工作,使之优势互补.
3.4 Sun Mobile-Embedded VM/Meta-Circular VM.
Sun公司所研发的虚拟机不仅有前面所述的服务器、桌面领域的商用虚拟机.Sun公司还面对移动和嵌入式市场研发过相应的虚拟机.另有一些虚拟机,设计之初并没有报商用的目的,而仅仅用作研究之用、验证技术的可行性.
3.4.1 KVM.
KVM直译过来是千比特,它具备简单、高效、高度可移植性的特点,但其运行速度比较慢.在Android和IOS等智能手机还未出现之前层在手机平台上得到非常广泛的应用.
3.4.2 CDC/CLDC Hotspot Implementation.
它曾希望在手机、电子书、PDA等设备上建立统一的Java编程接口,但就目前Android和IOS二分天下的移动数字设备市场来看,Sun的虚拟机所面临的局面明显不如服务器和桌面领域乐观.
3.4.3 Squawk VM.
曾用于Java Card.这是一种Java代码比重比较很高的嵌入式虚拟机实现.
3.4.4. JavaInJava
一个实验室性质的虚拟机.它试图使用Java语言来实现Java语言本身的运行环境,即所谓的"元循环".必须运行在另一台宿主虚拟机之上,内部没有JIT编译器,代码只能解释执行,其执行速度可想而知.
3.4.5 Maxine VM
与JavaInJava非常相似,它是几乎全部以Java代码实现的元循环Java虚拟机.由于有先进的JIT编译器和垃圾收集器,且可在宿主模式或独立模式下执行,其执行效率已接近于Hotspot Client VM的水平了.
3.5 BEA JRockit/IBM J9 VM
除了Sun公司以外,还有其他公司或组织研发过虚拟机实现.其中规模最大,最著名的是BEA和IBM公司.
JRockit VM是BEA公司专为服务器硬件和服务器端应用场景高度优化的虚拟机.专注于服务器端应用,因此它不太注重程序的启动速度.其全部代码都靠即时编译器编译后执行.除此之外,JRockit VM的垃圾收集器和MissionControl服务套件等部分的实现在众多JVM中一直处于领先水平.
与JRockit VM不同,IBM J9的市场定位与Sun Hotspot比较接近.它是一款从服务器端到桌面领域再到嵌入式都全面考虑的多用途虚拟机.J9的开发目的是为IBM公司各种Java产品的执行平台.
3.5 Azul VM/BEA Liquid VM
相对之前所说的在通用平台上运行的商用虚拟机,在特定硬件平台上运行的专用虚拟机才是"高性能神器"!
Azul VM是经Azul Systems 公司改造Hotspot VM的,运行在自家专有硬件Vega系统上的JVM.
Liquid VM即是BEA公司研发,运行在自家Hepervisor系统上的JRockit VM的虚拟化版本,它不需要操作系统的支持.越过操作系统直接控制硬件有诸多好处,可以最大限度的发挥硬件的能力,提升Java应用程序的执行性能.
3.6 Apache Harmony /Google Android Dalvik VM
Apache Harmony是Apache软件基金会旗下的Java程序运行平台.但却没有获得TCK使用授权.自从Sun将JDK开源形成Open JDK以来,Apache Harmony 开源的优势被极大地削弱.虽然Harmony没有经过真正大规模的商业运用,但它的代码被先进入了IBM的JDK 7的实现及Google Android SDK之中,对Android的发展有很大的推动作用.
Android让Java语言真正走向了移动数码设备领域,Dalvik VM是Android平台的核心组成部分之一.它不是JVM,但却和JVM有着千丝万缕的联系.跟随着Android一起处于迅猛发展阶段,Android2.2中即时编译器的实现,使其在执行性能上有很大的提高.
3.7 Microsoft JVM及其他.
Java语言诞生初期,它的主要应用之一是在浏览器中运行Java Applets程序,微软公司为了在IE3中支持Java Applets应用而开发了自己的JVM,虽然只有Windows平台下的版本.却是当时Windows下性能最好的JVM.
声明:本文是个人学习笔记,内容来自《深入理解Java虚拟机·JVM高级特性与最佳实践》周志明 与网络文章
浙公网安备 33010602011771号