《深入理解Java虚拟机》读书笔记(一)--Java和Java虚拟机发展

目录

一、Java发展史

二、Java虚拟机(部分)

2.1 Sun Classic VM

2.2 Sun Exact VM

2.3 Sun HotSpot VM

2.4 BEA JRockit VM

2.5 BEA Liquid VM

2.6 IBM J9 VM

2.7 Azul VM

2.8 Microsoft JVM

三、总结


一、Java发展史

  • 1991年4月,James Gosling博士领导绿色计划(Green Project),产品为Java语言的前身:Oak(橡树)。
  • 1995年5月23日,Oak语言改名为Java,并且在SunWorld大会上正式发布Java1.0版本,第一次提出了“Write Once, Run Anywhere”的口号。
  • 1996年1月23日,JDK1.0发布,Java语言有了第一个正式版本的运行环境。JDK1.0提供了一个纯解释执行的Java虚拟机实现(Sun Classic VM)。
  • 1996年5月底,Sun公司于美国旧金山举行了首届JavaOne大会。
  • 1998年12月4日,JDK发布了里程碑式的版本JDK1.2,工程代号Playground(竞技场),这个版本中把Java技术体系拆分为三个方向:J2SE、J2EE和J2ME。在这个版本中,Java虚拟机第一次内置了JIT编译器。
  • 1999年4月27日,HotSpot虚拟机(其由Longview Technologies公司开发,该公司于1997年被Sun公司收购)发布。
  • 2000年5月8日,JDK1.3发布。
  • 2002年2月13日,JDK1.4发布。发布了很多新的技术特性:正则表达式、NIO、日志类等等。
  • 2004年9月30日,JDK1.5发布。加入了自动装箱、泛型、动态注解、枚举等等。
  • 2006年12月11日,JDK1.6发布。放弃了J2EE、J2SE、J2ME的命名方式,启用Java SE 6、Java EE 6、Java ME 6的命名方式。
  • 2009年2月19日,JDK1.7发布。
  • 2009年4月20日,Oracle公司宣布以74亿美元的价格收购Sun公司。

二、Java虚拟机(部分)

2.1 Sun Classic VM

世界上第一款商用Java虚拟机,于1996年1月23日JDK1.0发布时提供。这款虚拟机只能以纯解释器方式来执行Java代码,如果要使用JIT编译器,必须进行外挂。但是如果外挂了JIT,那么JIT编译器就完全接管了虚拟机执行系统,解释器便不再工作了。

由于解释器和编译器不能配合工作,这就意味着如果要使用编译器执行,那编译器就不得不对每一个方法、每一行代码都进行编译,而无论它们执行的频率是否具有编译的价值。基于程序响应时间的压力,这些编译器不敢应用编译耗时稍高的优化技术,因此这个阶段的虚拟机即使使用了JIT编译器输出本地代码,执行效率也和传统的C/C++程序有很大差距,“Java语言很慢”的形象就是在这个时候开始在用户中心树立起来的。

由于GC之后对象可能会被移动位置,也没有明确信息表明内存中哪些数据是reference,所以需要使用句柄来保持reference的稳定,采用基于handler的对象查找方式。

2.2 Sun Exact VM

它的执行系统已经具备现代高性能虚拟机的雏形,比如两级即时编译器、编译器与解释器混合工作模式等。Exact VM因它使用准确式内存管理(Exact Memory Management)得名,即虚拟机可以知道内存中某个位置的数据具体是什么类型。比如内存中有一个32位的整数123456,它到底是一个reference类型只想123456的内存地址,还是一个数值为123456的整数,虚拟机有能力分辨出来,这样才能在GC时准确判断堆上的数据是否还可以被使用。

由于使用了准确式内存管理,就可以抛弃之前Classic VM基于handler的对象查找方式,这样每次定位对象都少了一次间接查找的开销,提升执行性能。

2.3 Sun HotSpot VM

目前使用范围最广的Java虚拟机,本由Longview Technologies公司设计,该公司与1997年被Sun公司收购。HotSpot指的就是热点代码探测技术:可以通过执行计数器找出最具有编译价值的代码,然后通知JIT编译器以方法为单位进行编译。

2.4 BEA JRockit VM

BEA公司在2002年从Appeal Vitrual Machines公司收购的虚拟机,由于专注于服务器端应用,所以不太关注程序启动速度,所以JROckit内部不包含解析器实现,全部代码都靠即时编译器编译后执行。

2.5 BEA Liquid VM

即现在的JRockit VE(Virtural Edition),它是由BEA公司开发的,可以直接运行在自家Hypervisor系统上的JRockit VM的虚拟化版本。其不需要操作系统的支持,或者说它自身实现了一个专用操作系统的必要功能,如文件系统、网络支持等。由虚拟机越过操作系统直接操作硬件可以获得很多好处,比如线程调度时,不需要再进行内核态/用户态的切换等。

2.6 IBM J9 VM

IBM公司主力发展的虚拟机,最初由IBM Ottawa实验室一个名为SmallTalk的虚拟机扩展而来,它是一款设计上从服务端到桌面应用再到嵌入式都全面考虑的多用途虚拟机。

2.7 Azul VM

Azul Systems公司在HotSpot基础上进行大量改进的虚拟机,运行于Azul Systems公司的专有硬件Vega系统上。在2010年,Azul Systems公司开始从硬件转向软件,发布了自己的Zing JVM,可以在通用x86平台上提供接近于Vega系统的特性。

2.8 Microsoft JVM

微软公司为了在IE3中支持Java Applets应用而开发的自己的虚拟机,虽然其只有Windows平台的版本,却是当时Windows下性能最好的Java虚拟机。1997年10月,Sun公司以侵犯商标、不正当竞争等罪名恐高微软,最终微软除了赔偿大量金额外,还承诺终止其Java虚拟机的发展。  

三、总结

本章主要介绍了Java技术体系的过去、现在以及未来的一些发展趋势,介绍了一些虚拟机的背景和发展轨迹,另外还介绍了如何自己来独立编译一个OpenJDK7。

上一篇:codeup|问题 C: EXCEL排序


下一篇:server client通过unix socket通讯(local)