Java 发展历程

JDK 1.0

1991年4月,由 James Gosling 博士领导的绿色计划(Green Project)开始启动,此计划的目的是开发一种能够在各种消费性电子产品(如机顶盒、冰箱、收音机等)上运行的程序架构。这个计划的产品就是Java语言的前身:Oak(橡树)。Oak当时在消费品市场上并不算成功,但随着1995年互联网潮流的兴起,Oak 迅速找到了最适合自己发展的市场定位并蜕变成为 Java 语言。

1995年5月23日,Oak 语言正式更名为 Java,Java 语言第一次提出了 “Write Once,Run Anywhere”的口号,这一天也被称为 Java 诞生日。

1996年1月23日,JDK 1.0 发布,代表技术包括 Java 虚拟机(Sun Classic VM)、Applet、AWT 等。

1996年4月,10个最主要的操作系统供应商申明将在其产品中嵌入 Java 技术。

1996年5月,Sun 公司于美国旧金山举行了首届 JavaOne 大会。

1996年9月,已有大约 8.3 万个网页应用了 Java 技术来制作。

JDK 1.1

1997年2月19日,JDK 1.1 发布,代表技术包括 Jar 文件格式、JDBC、JavaBeans、RMI、内部类、反射等。

JDK 1.1 一共发布了 1.1.0 - 1.1.8 九个版本,从1.1.4 之后,每个 JDK 版本都有自己的一个代号:

版本 代号 时间
JDK 1.1.4 Sparkler(宝石) 1997-09-12
JDK 1.1.5 Pumpkin(南瓜) 1997-12-13
JDK 1.1.6 Abigail(阿比盖尔--女子名) 1998-04-24
JDK 1.1.7 Brutus(布鲁图--古罗马政治家和将军) 1998-09-28
JDK 1.1.8 Chelsea(切尔西--城市名) 1999-04-08

1998年2月,JDK 1.1 被下载超过 2,000,000 次。

JDK 1.2(Playground - 竞技场)

1998年12月4号,JDK 1.2 发布,这个版本把 Java 技术体系分为三个部分,即 J2SE(面向桌面应用开发)、J2EE(面向企业级开发)、J2ME(面向移动终端开发)。代表技术包括 EJB、Java Plugin-in、Java IDL、Swing、内置 JIT 编译器、Collections集合类等。

JDK 1.2 共有两个修订版本:

版本 代号 时间
JDK 1.2.1 - 1999-03-30
JDK 1.2.2 Cricket(蟋蟀) 1999-07-08

JDK 1.3(Kestrel - 红隼)

2000年5月8号,JDK 1.3 发布,这个版本开始 HotSpot 成为了 JDK 的默认虚拟机,代表技术有 JNDI、Timer、Java 2D、JavaSound、数学运算等。

JDK 1.3 有一个修正版本:

版本 代号 时间
JDK 1.3.1 Ladybird(瓢虫) 2001-05-17

2001年6月5日,NOKIA 宣布,到 2003 年将出售 1 亿部支持 Java 的手机。

JDK 1.4(Merlin - 灰背隼)

2002年2月13日,JDK 1.4 发布,这是 Java 真正走向成熟的一个版本,代表技术包括:正则表达式、异常链、NIO、日志类、XML 解析器和 XSLT 转换器等。

JDK 1.4 有两个修正版本:

版本 代号 时间
JDK 1.4.1 grasshopper(蚱蜢) 2002-09-16
JDK 1.4.2 Mantis(螳螂) 2003-06-26

JDK 1.5(Tiger - 老虎)

2004年9月30日,JDK 1.5 发布,代表技术有自动装箱、泛型、动态注解、枚举、可变长参数、增强 for 循环等。这个版本还改进了 Java 的内存模型、提供了 java.util.concurrent 并发包等。

2006年11月13日,Sun 公司宣布最终会将 Java 开源,并在随后的一年多时间内,陆续将 JDK 的各个部分在 GPL V2 协议下公开了源码,并建立了 OpenJDK 组织对这些源码进行独立管理。(正式开源的版本是 JDK 6)

JDK 6(Mustang - 野马)

2006年12月11号,JDK 6 发布,从这个版本开始,J2SE、J2EE、J2ME 的称呼将不在使用,启用 Java SE、Java EE、Java ME 的命名方式。另外,JDK 的公开版本号也变成了 JDK 6、JDK 7 的命名方式,而程序员内部使用的开发版本号(java -version)继续沿用了 1.6、1.7 这样的称呼。

JDK 6 的代表技术有动态语言支持(通过内置 Mozilla JavaScript Rhino 引擎实现)、编译 API 和微型 HTTP 服务器 API 等。同时,这个版本对 Java 虚拟机内部做了大量改进,包括锁与同步、垃圾收集、类加载等方面的算法都有相当大的改动。

2008年1月16日,Oracle 收购 BEA,获取了 JRockit 虚拟机的所有权。

JDK 7(Dolphin - 海豚)

2009年2月19日,JDK 7 发布,主要改进包括:提供新的 G1 收集器、升级类加载架构、Fork/Join 框架等。

2009年4月20日,Oracle 收购 Sun,获得了 HotSpot 虚拟机的所有权。但是 Java 语言本身并不属于哪个公司,它是由 JCP(Java Community Process)组织管理的,JCP 以前主要是由 Sun 公司领导,现在主要由 Oracle 领导,仅此而已。

2010年12月,Apache 基金会因为其 Harmony 虚拟机的 TCK 授权问题和 Oracle 愈演愈烈,愤然退出 JCP,这也是 Java 史上最大的一次分裂。

JDK 8(Spider - 蜘蛛)

2014年3月18日,JDK 8 发布,又是一个里程碑的版本,代表技术包括 Lambda 表达式、函数式编程、Stream API、新的时间类型等。

JDK 9

2017 年 8 月,甲骨文宣布要将 Java EE 转移到开源阵营。一个月后,Oracle 将 Java EE 转移到 Eclipse 基金会,Oracle 也继续支持现有的 Java EE 许可证。不过,Oracle 可不允许开源组织用 Java 的名号,于是 Eclipse 选出了 "Jakarta EE" 和 "Enterprise Profile" 两个后续按名字,最终前者以64.4%的票数获胜。也就是说 ,Java EE已经正式更名为 Jakarta EE、Java Community Process 更名为 Eclipse EE.next Working Group。

2017年9月,JDK 9 发布,加入了跳票了两个版本 JigSaw 模块化、新增了REPL(Read-Eval-Print Loop)工具 jshell、增强 Stream API 等。

2017年9月,Oracle 宣布,为了更快地迭代,以及跟进社区反馈,Java 的版本发布周期变更为每半年发布一个大版本,每个季度发布一个中间特性版本,并且承诺不会跳票。通过这样的方式,开发团队可以把一些关键特性尽早合并到 JDK 之中,以快速得到开发者反馈。按照官方的说法,新的发布周期会严格遵循时间点,将于每年的3月份和9月份发布。其实程序员不必为频繁发布的 JDK 版本挠头抓耳,Oracle 只对 LTS(Long Term Support,LTS)版的 JDK 进行为期三年的的支持和更新,普通版的 JDK 只有短短六个月的生命周期,JDK 8઼、JDK 11会是 LTS 版,再下一个LTS 版要到 2021 年发布的JDK 17 了。

JDK 10

2018年3月20日,JDK 10 发布,这版本的主要研发目标是内部重构,诸如统一源仓库、统一垃圾收集器接口、统一即时编译器接口(JVMCI 在JDK 9已经有了,这里是引入新的 Graal 即时编译器)等。

2018年3月27日,Android 的 Java 侵权案有了最终判决,法庭裁定 Google 赔偿 Oracle 合计88亿美元,要知道2009年 Oracle 收购 Sun 也就只花了74亿。

JDK 11

2018年9月25日,JDK 11 发布,这是自 Java 8 后的首个长期支持的版本,其中包括 ZGC 这样的革命性垃圾收集器,代表技术有:本地变量类型推断(var )、Stream 加强、字符串加强、HTTP Client API 等。

2018年9月,随着 JDK 11 的发布,还有一个颇具影响的新闻,就是 Java 收费问题。Oracle 从 JDK11 起把以前的商业特性全部开源给 OpenJDK,这样 OpenJDK 11 和 Oracle JDK11 的代码和功能,在本质上是完全相同的。然后 Oracle 宣布以后将会同时发布两个 JDK:一个是以 GPLv2+CE 协议下发行的 OpenJDK;另一个是由新的 OTN 协议下发行的传统的 Oracle JDK,这两个 JDK 共享绝大部分源码,在功能上是几乎一样的,核心差异是前者可以免费在开发、测试或生产环境中使用,但是只有半年时间的更新支持;后者个人仍然可以免费使用,但若在生产环境中商用就必须付费,可以有三年时间的更新支持。

2018年10月,JavaOne 2018 在旧金山举行,此前没有人会想到这会是最后一届JavaOne大会。

JDK 12

2019年2月,RetHat 从 Oracle 手中接过了 OpenJDK8 和 OpenJDK11 的管理权力和维护职责,Oracle 不愿意在旧版本上继续耗费资源,而 RedHat 或者说它背后的 IBM 又乐意扩大自己在 Java 社区的影响力,这是一笔双赢的交易。

2019年3月19日,JDK 12 发布,主要特性包括:switch 支持表达式、Java 微测试套件(JMH 等功能)。其中最引人注目的特性无疑是加入了由 RedHat 领导开发的 Shenandoah 垃圾收集器,Shenandoah 作为首个由非 Oracle 开发的垃圾收集器,其目标又与 OracleJDK 11中发布的 ZGC 几乎完全一致,两者天生就存在竞争。Oracle 马上用实际行动抵制了这个新收集器,JDK 11 发布时才说应尽可能保证 OracleJDK 和 OpenJDK 的兼容一致,转眼就在 OracleJDK 12 里把 Shenandoah 的代码通过条件编译强行剔除掉,使其成为历史上唯一进入了 OpenJDK 发布清单,但在 OracleJDK 中无法使用的功能。

JDK 13

2019年9月13日,JDK 13 发布,主要特性包括:重新实现传统套接字API、switch 表达式预览版、增强 ZGC 将未使用的堆内存返回给操作系统等。

JDK 14

2020年3月17日,JDK 14 发布,主要特性包括:switch 表达式最终版、增强 ZGC 收集器支持 Window/ Mac、弃用 ParallelScavenge + SerialOld 的 GC 组合等。


...未完待续
tips:收集了书籍、网上的一些资料,如有侵权,烦请告知。欢迎大家补充~~

相关文章

摘要: 原创出处 https://www.bysocket.com 「公众号:泥瓦匠...
摘要: 原创出处 https://www.bysocket.com 「公众号:泥瓦匠...
今天犯了个错:“接口变动,伤筋动骨,除非你确定只有你一个...
Writer :BYSocket(泥沙砖瓦浆木匠)微 博:BYSocket豆 瓣:...
本文目录 线程与多线程 线程的运行与创建 线程的状态 1 线程...