《深入理解Java虚拟机》-周志明 -第3版-第一章摘记
第一章讲了java的发展和变迁,在章节末作者讲到了编译openjdk源码和调试源码java发展史java的诞生起因史1991年4月,James Gosling博士领导的绿色计划(Green Project),原先想开发一种能够在各种消费性电子产品(如机顶盒、冰箱、收音机等)上运行的程序架构。取名为Oak (橡树的意思) 1995年5月23日,Oak语言改名为Java,并且在SunWorld大会上
第一章讲了java的发展和变迁,在章节末作者讲到了编译openjdk源码和调试源码
java发展史
java的诞生起因史1991年4月,James Gosling博士领导的绿色计划(Green Project),原先想开发一种能够在各种消费性电子产品(如机顶盒、冰箱、收音机等)上运行的程序架构。取名为Oak (橡树的意思)
1995年5月23日,Oak语言改名为Java,并且在SunWorld大会上正式发布Java 1.0版本。Java语言第 一次提出了“Write Once,Run Anywhere”的口号。
1996年1月23日,JDK 1.0发布,Java语言有了第一个正式版本的运行环境。JDK 1.0提供了一个纯 解释执行的Java虚拟机实现(Sun Classic VM)。JDK 1.0版本的代表技术包括:Java虚拟机、Applet、 AWT等。
1997年2月19日,Sun公司发布了JDK 1.1,Java里许多最基础的技术支撑点(如JDBC等)都是在 JDK 1.1版本中提出的,JDK 1.1版的技术代表有:JAR文件格式、JDBC、JavaBeans、RMI等。Java语 言的语法也有了一定的增强,如内部类(Inner Class)和反射(Reflection)都是在这时候出现的。
1998年12月4日,JDK 1.2发布,工程代号为Playground(竞技场),Sun在这个版本中把Java技术体系拆分为三个方向,分别是面向桌面应用开发的J2SE(Java 2 Platform,Standard Edition)、面向企业级开发的J2EE(Java 2 Platform,Enterprise Edition)和面向手 机等移动终端开发的J2ME(Java 2 Platform,Micro Edition)。在这个版本中出现的代表性技术非常 多,如EJB、Java Plug-in、Java IDL、Swing等,并且这个版本中Java虚拟机第一次内置了JIT(Just In Time)即时编译器(JDK 1.2中曾并存过三个虚拟机,Classic VM、HotSpot VM和Exact VM,其中 Exact VM只在Solaris平台出现过;后面两款虚拟机都是内置了JIT即时编译器的,而之前版本所带的 Classic VM只能以外挂的形式使用即时编译器)。在语言和API层面上,Java添加了strictfp关键字, Java类库添加了现在Java编码之中极为常用的一系列Collections集合类等。在1999年3月和7月,分别有 JDK 1.2.1和JDK 1.2.2两个小升级版本发布。
1999年4月27日,HotSpot虚拟机诞生。HotSpot最初由一家名为“Longview Techno-logies”的小公司 开发,由于HotSpot的优异表现,这家公司在1997年被Sun公司收购。Hot-Spot虚拟机刚发布时是作为 JDK 1.2的附加程序提供的,后来它成为JDK 1.3及之后所有JDK版本的默认Java虚拟机。
2000年5月8日,工程代号为Kestrel(美洲红隼)的JDK 1.3发布。相对于JDK 1.2,JDK 1.3的改进 主要体现在Java类库上(如数学运算和新的Timer API等),JNDI服务从JDK 1.3开始被作为一项平台 级服务提供(以前JNDI仅仅是一项扩展服务),使用CORBA IIOP来实现RMI的通信协议,等等。这 个版本还对Java 2D做了很多改进,提供了大量新的Java 2D API,并且新添加了JavaSound类库。JDK 1.3有1个修正版本JDK 1.3.1,工程代号为Ladybird(瓢虫),于2001年5月17日发布。
2002年2月13日,JDK 1.4发布,工程代号为Merlin(灰背隼)。JDK 1.4是标志着Java真正走向成 熟的一个版本,Compaq、Fujitsu、SAS、Symbian、IBM等著名公司都有参与功能规划,甚至实现自己 独立发行的JDK 1.4。哪怕是在近二十年后的今天,仍然有一些主流应用能直接运行在JDK 1.4之上, 或者继续发布能运行在1.4上的版本。JDK 1.4同样带来了很多新的技术特性,如正则表达式、异常 链、NIO、日志类、XML解析器和XSLT转换器,等等。JDK 1.4有两个后续修正版:2002年9月16日发 布的工程代号为Grasshopper(蚱蜢)的JDK 1.4.1与2003年6月26日发布的工程代号为Mantis(螳螂) 的JDK 1.4.2。
2004年9月30日,JDK 5发布,工程代号为Tiger(老虎)。Sun公司从这个版本开始放弃了谦逊 的“JDK 1.x”的命名方式,将产品版本号修改成了“JDK x”[1]。从JDK 1.2以来,Java在语法层面上的变 动一直很小,而JDK 5在Java语法易用性上做出了非常大的改进。如:自动装箱、泛型、动态注解、枚 举、可变长参数、遍历循环(foreach循环)等语法特性都是在JDK 5中加入的。在虚拟机和API层面上,这个版本改进了Java的内存模型(Java Memory Model,JMM)、提供了java.util.concurrent并发包 等。另外,JDK 5是官方声明可以支持Windows 9x操作系统的最后一个JDK版本。
2006年12月11日,JDK 6发布,工程代号为Mustang(野马)。在这个版本中,Sun公司终结了从 JDK 1.2开始已经有八年历史的J2EE、J2SE、J2ME的产品线命名方式,启用Java EE 6、Java SE 6、Java ME 6的新命名来代替。JDK 6的改进包括:提供初步的动态语言支持(通过内置Mozilla JavaScript Rhino引擎实现)、提供编译期注解处理器和微型HTTP服务器API,等等。同时,这个版本对Java虚拟 机内部做了大量改进,包括锁与同步、垃圾收集、类加载等方面的实现都有相当多的改动。
2009年2月19日,工程代号为Dolphin(海豚)的JDK 7完成了其第一个里程碑版本。按照JDK 7最 初的功能规划,一共会设置十个里程碑。最后一个里程碑版本原计划定于2010年9月9日结束,但由于 各种原因,JDK 7最终无法按计划完成。
从JDK 7最原始的功能清单来看,它本应是一个包含许多重要改进的JDK版本,其中规划的子项 目都为Java业界翘首以盼,包括:
- Lambda项目:支持Lambda表达式,支持函数式编程。
- Jigsaw项目:虚拟机层面的模块化支持。
- 动态语言支持:Java是静态语言,为其他运行在Java虚拟机上的动态语言提供支持。
- Garbage-First收集器。
- Coin项目:Java语法细节进化。
2014年3月18日,JDK 8分布,诞生了lambda表达式、全新时间API 等新特性
2017年9月21日,JDK 9发布,诞生了模块化子系统、jshell 等新特性
2018年3月20日,JDK 10发布,更新了12个 等新特性,由于java9的模块化子系统是一个大的转变,10的发布则是统一源仓库、垃圾收集器接口、即时编译器接口等,为后期发展做准备。
2018年9月25日,JDK 11发布,这是一个LTS版本的JDK,包含17个JEP,其中有ZGC这样的革命 性的垃圾收集器出现,也有把JDK 10中的类型推断加入Lambda语法这种可见的改进;
2019年3月20日,JDK 12发布,只包含8个JEP,其中主要有Switch表达式、Java微测试套件 (JMH)等新特性,最引人注目的特性无疑是加入了由RedHat领导开发的Shen-andoah垃圾收集器。 Shenandoah作为首个由非Oracle开发的垃圾收集器,其目标又与Oracle在JDK 11中发布的ZGC几乎完全 一致,两者天生就存在竞争。Oracle马上用实际行动抵制了这个新收集器,在JDK 11发布时才说应尽 可能保证OracleJDK和OpenJDK的兼容一致,转眼就在OracleJDK 12里把Shenandoah的代码通过条件编 译强行剔除掉,使其成为历史上唯一进入了OpenJDK发布清单,但在OracleJDK中无法使用的功能。
下面是自己收集的信息:
2019年9月17日,JDK 13发布。switch表达式引入yield用与返回值、文本块 等新特性
2020年3月17日,JDK 14发布。instanceof 强化、record关键字、引入ZGC 等新特性
2020年9月17日,JDK 15发布。ZGC转正成为默认的垃圾回收器STW停顿时间<10ms
等新特性
市面上常见的虚拟机
Microsoft JVM 以及 Taobao JVM 的介绍
编译OpenJDK
更多推荐
所有评论(0)