世界上并没有完美的程序,但我们并不因此而沮丧,因为写程序本来就是一个不断追求完美的过程
把周志明老师的《深入理解Java虚拟机_JVM高级特性与最佳实践》书中的知识点大概记录下来,方便自己以后的重读。
一、概述
Java不仅仅是一门编程语言,还是一个由一系列软件和规范形成的技术体系,这个体系提供了完整的的用于软件开发和跨平台部署的支持环境,并广泛应用于嵌入式系统、移动终端、企业服务器等各种场合。
二、Java技术体系
Sun官方所定义的Java技术体系包括:
- Java程序设计语言
- 各种硬件平台上的Java虚拟机
- Class文件格式
- Java API类库
- 来自第三方的Java类库
我们可以把Java语言、Java虚拟机、Java API类库这三部分统称为JDK(Java Development Kit),JDK是用于支持Java程序开发的最小环境。
另外,可以把Java API类库中的JavaSE API子集和Java虚拟机这两部分统称为JRE(Java Runtime Environment),JRE是支持Java程序运行的标准环境。
下图展示了Java技术体系包含的内容,图片来自JavaSE1.8官方文档
根据技术服务领域划分Java技术体系可以分为4个平台:
- Java Card:支持java小程序(Applets)运行在小内存设备上的平台。
- Java ME:支持Java巡行在移动终端上的平台,以前称为J2ME。
- Java SE(Standar Edition):支持面向桌面级应用的Java平台,提供了完整的Java核心API,以前称为J2SE。
- Java EE(Enterprise Edition):支持使用多层架构的企业级应用的Java平台除了JavaSE API外,还对其做了大量的扩充并提供了相关的部署支持,以前称为J2EE。
三、Java发展史
- 1991年,James Gosling 博士发布产品 Oak(橡树),这是 Java 语言的前身。
- 1995年,Oak 语言改名为 Java。并提出了“Write Once,Run Anywhere”
- 1996年,JDK1.0 发布,提供了纯解释执行的 Java 虚拟机实现:Sun Classic VM。
- 1997年,JDK1.1 发布,新特性:JDBC、JavaBeans、内部类、反射。
- 1998年,JDK1.2 发布,Java 技术体系被拆分为 J2SE、J2EE、J2ME 三大体系。
- 2000年,JDK1.3 发布,默认的 Java 虚拟机由 Sun Classic VM 改为 HotSopt。
- 2002年,JDK1.4 发布,Java 真正走向成熟,新特性:正则表达式、异常连、NIO等。
- 2004年,JDK1.5 发布,新特性:自动装箱、泛型、枚举、动态注解、forEach循环,concurrent并发包等
- 2006年,JDK1.6 发布,将 J2EE/J2SE/J2ME 的命名方式改为 Java SE 6、Java EE 6、Java ME 6。童年,Sun公司宣布会将Java开源。
- 2009年,Sun 公司被Oracle 公司收购。
- 2011年,JDK1.7 发布。新特性:null值自动处理,switch中允许字符串等
- 2013年,JDK1.8 发布。新特性:lambda表达式,接口增强等
- 2017年,JDK1.9 发布。新特性:jshell,接口中允许私有方法等
- 2018年3月,JDK10 发布。
- 2018年9月,JDK11 发布。
- 2019年3月,JDK12 发布。
四、JVM发展史
Sun Class:Sun公司发布的JDK1.0中所带的虚拟机,这款虚拟机只能用纯解释器方式来执行Java代码,但如果外挂了 JIT 编译器,那么 JIT 编译器就完全替代了虚拟机的执行系统,解释器便不再工作了。简单地说,在 Sun Classic 虚拟机中,解释器与编译器无法共同存在。
Sun Exact VM:Sun 的虚拟机团队在JDK1.2时发布的虚拟机尝试解决 Classic VM 遇到的问题。它的执行系统解决了Classic VM 存在的解释器和编译器无法同时工作的问题,还具备了一些现代高性能处理器的特性,但这款虚拟机并没有被大规模使用过。
Sun HotSpot VM:使用最为广泛的 Java 虚拟机,但实际上,这个虚拟机并不是由 Sun 公司原生开发的,而是由一个叫 Longview Technologies 公司开发的。而 Sun 公司注意到了这款虚拟机在 JIT 编译上的许多优秀成果,于 1997 年收购了 Longview Technologies 公司。从 2000 年 JDK 1.3 发布,HotSpot VM 作为默认的虚拟机。
-
BEA JRockit / IBM J9 VM:BEA 公司的 JRockit 是一款专注于服务器硬件和服务端应用场景的虚拟机,其针对服务端场景做了大量的优化,因此其不太关注程序启动速度。JRockit 虚拟机内部不包含解释器实现,全部代码都靠即时编译器编译后执行。此外,其提供的 MissionControl 服务套件也十分强大。
IBM 公司的 J9 VM 则是一款比较通用的虚拟机,其定位应用于从服务端到桌面应用再到嵌入式的多用途虚拟机。IBM 公司开发 J9 VM 的目的是将其作为 IBM 公司各种 Java 产品的执行平台。
五、展望Java技术的未来
- 模块化
- 混合语言
- 多核并行
- 进一步丰富语法
- 64位虚拟机