# 为什么叫 Java?

​ Java 平台和语言最开始只是 SUN 公司在 1990 年 12 月开始研究的一个内部项目。SUN 公司的一个叫做帕特里克・诺顿的工程师被自己开发的 C 和 C 语言编译器搞得焦头烂额,因为其中的 API 极其难用。帕特里克决定改用 NeXT,同时他也获得了研究公司的一个叫做 “Stealth 计划” 的项目的机会。
“Stealth 计划” 后来改名为 “Green 计划”,JGosling (詹姆斯・高斯林)和麦克・舍林丹也加入了帕特里克的工作小组。他们和其他几个工程师一起在加利福尼亚州门罗帕克市沙丘路的一个小工作室里面研究开发新技术,瞄准下一代智能家电(如微波炉)的程序设计,SUN 公司预料未来科技将在家用电器领域大显身手。团队最初考虑使用 C 语言,但是很多成员包括 SUN 的首席科学家比尔・乔伊,发现 C 和可用的 API 在某些方面存在很大问题。
工作小组使用的是内嵌类型平台,可以用的资源极其有限。很多成员发现 C 太复杂以至很多开发者经常错误使用。他们发现 C 缺少垃圾回收系统,还有可移植的安全性、分布程序设计、和多线程功能。最后,他们想要一种易于移植到各种设备上的平台。
根据可用的资金,比尔・乔伊决定开发一种集 C 语言和 Mesa 语言搭成的新语言,在一份报告上,乔伊把它叫做 “未来”,他提议 SUN 公司的工程师应该在 C 的基础上,开发一种面向对象的环境。最初,高斯林试图修改和扩展 C 的功能,他自己称这种新语言为 C –,但是后来他放弃了。他将要创造出一种全新的语言,被他命名为 “Oak”(橡树),以他的办公室外的树而命名。
就像很多开发新技术的秘密的工程一样,工作小组没日没夜地工作到了 1992 年的夏天,他们能够演示新平台的一部分了,包括 Green 操作系统,Oak 的程序设计语言,类库,和其硬件。最初的尝试是面向一种类 PDA 设备,被命名为 Star7,这种设备有鲜艳的图形界面和被称为 “Duke” 的智能代理来帮助用户。1992 年 12 月 3 日,这台设备进行了展示。
同年 11 月,Green 计划被转化成了 “FirstPerson 有限公司”,一个 SUN 公司的全资子公司,团队也被重新安排到了帕洛阿尔托。FirstPerson 团队对建造一种高度互动的设备感兴趣,当时代华纳发布了一个关于电视机顶盒的征求提议书时(Request for proposal),FirstPerson 改变了他们的目标,作为对征求意见书的响应,提出了一个机顶盒平台的提议。但是有线电视业界觉得 FirstPerson 的平台给予用户过多地控制权,因此 FirstPerson 的投标败给了 SGI。与 3DO 公司的另外一笔关于机顶盒的交易也没有成功,由于他们的平台不能在电视工业产生任何效益,公司再并回 SUN 公司。
JAVA 应用 1994 年 6、7 月间,在经历了一场历时三天的头脑风暴的讨论之后,约翰・盖吉、詹姆斯・高斯林、比尔・乔伊、帕特里克・诺顿、韦恩・罗斯因和埃里克・斯库米,团队决定再一次改变了努力的目标,这次他们决定将该技术应用于万维网。他们认为随着 Mosaic 浏览器的到来,因特网正在向同样的高度互动的远景演变,而这一远景正是他们在有线电视网中看到的。作为原型,帕特里克・诺顿写了一个小型万维网浏览器,WebRunner,后来改名为 HotJava。同年,Oak 改名为 Java。商标搜索显示,Oak 已被一家显卡制造商注册,因此团队找到了一个新名字。这个名字是在很多成员常去的本地咖啡馆中杜撰出来的。名字是不是首字母缩写还不清楚,很大程度上来说不是。虽然有人声称是开发人员名字的组合:James Gosling(詹姆斯・高斯林)Arthur Van Hoff(阿瑟・凡・霍夫)Andy Bechtolsheim(安迪・贝克托克姆),或 “Just Another Vague Acronym”(只是另外一个含糊的缩写)。还有一种比较可信的说法是这个名字是出于对咖啡的喜爱,所以以 Java 咖啡来命名。类文件的前四个字节如果用十六进制阅读的话,分别为 CA FE BA BE,就会拼出两个单词 “CAFE BABE”(咖啡宝贝)。
1994 年 10 月,HotJava 和 Java 平台为公司高层进行演示。1994 年,Java 1.0a 版本已经可以提供下载,但是 Java 和 HotJava 浏览器的第一次公开发布却是在 1995 年 5 月 23 日 SunWorld 大会上进行的。SUN 公司的科学指导约翰・盖吉宣告 Java 技术。这个发布是与网景公司的执行副总裁马克・安德森的惊人发布一起进行的,宣布网景将在其浏览器中包含对 Java 的支持。1996 年 1 月,升阳公司成立了 Java 业务集团,专门开发 Java 技术。

# JDK 发展历程

​ 1996 年 1 月,Sun 公司发布了 Java 的第一个开发工具包(JDK 1.0),这是 Java 发展历程中的重要里程碑,标志着 Java 成为一种独立的开发工具。9 月,约 8.3 万个网页应用了 Java 技术来制作。10 月,Sun 公司发布了 Java 平台的第一个即时(JIT)编译器。

​ 1997 年 2 月,JDK 1.1 面世,在随后的 3 周时间里,达到了 22 万次的下载量。4 月 2 日,Java One 会议召开,参会者逾一万人,创当时全球同类会议规模之纪录。9 月,Java Developer Connection 社区成员超过 10 万。

​ 1998 年 12 月 8 日,第二代 Java 平台的企业版 J2EE 发布。1999 年 6 月,Sun 公司发布了第二代 Java 平台(简称为 Java2)的 3 个版本:J2ME(Java2 Micro Edition,Java2 平台的微型版),应用于移动、无线及有限资源的环境;J2SE(Java 2 Standard Edition,Java 2 平台的标准版),应用于桌面环境;J2EE(Java 2Enterprise Edition,Java 2 平台的企业版),应用于基于 Java 的应用服务器。Java 2 平台的发布,是 Java 发展过程中最重要的一个里程碑,标志着 Java 的应用开始普及。

​ 1999 年 4 月 27 日,HotSpot 虚拟机发布。HotSpot 虚拟机发布时是作为 JDK 1.2 的附加程序提供的,后来它成为了 JDK 1.3 及之后所有版本的 Sun JDK 的默认虚拟机 。

​ 2000 年 5 月,JDK1.3、JDK1.4 和 J2SE1.3 相继发布,几周后其获得了苹果公司 Mac OS X 的工业标准的支持。2001 年 9 月 24 日,J2EE1.3 发布。2002 年 2 月 26 日,J2SE1.4 发布。自此 Java 的计算能力有了大幅提升,与 J2SE1.3 相比,其多了近 62% 的类和接口。在这些新特性当中,还提供了广泛的 XML 支持、安全套接字(Socket)支持(通过 SSL 与 TLS 协议)、全新的 I/OAPI、正则表达式、日志与断言。2004 年 9 月 30 日,J2SE1.5 发布,成为 Java 语言发展史上的又一里程碑。为了表示该版本的重要性,J2SE 1.5 更名为 Java SE 5.0(内部版本号 1.5.0),代号为 “Tiger”,Tiger 包含了从 1996 年发布 1.0 版本以来的最重大的更新,其中包括泛型支持、基本类型的自动装箱、改进的循环、枚举类型、格式化 I/O 及可变参数。

​ 2005 年 6 月,在 Java One 大会上,Sun 公司发布了 Java SE 6。此时,Java 的各种版本已经更名,已取消其中的数字 2,如 J2EE 更名为 JavaEE,J2SE 更名为 JavaSE,J2ME 更名为 JavaME。

​ 2006 年 11 月 13 日,Java 技术的发明者 Sun 公司宣布,将 Java 技术作为免费软件对外发布。Sun 公司正式发布的有关 Java 平台标准版的第一批源代码,以及 Java 迷你版的可执行源代码。从 2007 年 3 月起,全世界所有的开发人员均可对 Java 源代码进行修改 。

​ 2009 年,甲骨文公司宣布收购 Sun 。2010 年,Java 编程语言的共同创始人之一詹姆斯・高斯林从 Oracle 公司辞职。2011 年,甲骨文公司举行了全球性的活动,以庆祝 Java7 的推出,随后 Java7 正式发布。

​ 2014 年,甲骨文公司发布了 Java8 正式版

​ 2017 年,甲骨文公司发布了 Java9 正式版

# Java 发展史上发生的大事件具体概括如下表

各版本 JDK 引入的主要新特性
JDK Version 1.0
开发代号为 Oak(橡树),于 1996-01-23 发行。

时间事件
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 日Java 2 企业平台 J2EE 发布 (J2EE1.2)
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 日J2SE1.5 发布,成为 Java 语言发展史上的又一里程碑。为了表示该版本的重要性,J2SE1.5 更名为 Java SE 5.0;
2005 年 6 月JavaOne 大会召开,SUN 公司公开 Java SE 6。此时,Java 的各种版本已经更名,以取消其中的数字 “2”: J2ME 更名为 Java ME, J2SE 更名为 Java SE,J2EE 更名为 Java EE
2006 年 12 月SUN 公司发布 JRE6.0
2009 年 12 月SUN 公司发布 Java EE 6
2010 年 11 月由于甲骨文对 Java 社区的不友善,因此 Apache 扬言将退出 JCP
2011 年 7 月甲骨文发布 Java SE 7
2014 年 3 月甲骨文发表 Java SE 8
2017 年 9 月甲骨文发表 Java SE 9
2018 年 3 月甲骨文发布 Java SE 10

# J2SE Version 1.2

开发代号为 Playground(操场),于 1998-12-08 发行。
引入的新特性包括:

  • 引入集合(Collection)框架;
  • 对字符串常量做内存映射;
  • 引入 JIT(Just In Time)编译器;
  • 引入对打包的 Java 文件进行数字签名;
  • 引入控制授权访问系统资源的策略工具;
  • 引入 JFC(Java Foundation Classes),包括 Swing 1.0、拖放和 Java 2D 类库;
  • 引入 Java 插件;
  • 在 JDBC 中引入可滚动结果集、BLOB、CLOB、批量更新和用户自定义类型;
  • 在 Applet 中添加声音支持。

# J2SE Version 1.3

开发代号为 Kestrel(红隼),于 2000-05-08 发行。
引入的新特性包括:

  • 引入 Java Sound API;
  • jar 文件索引;
  • 对 Java 的各个方面都做了大量优化和增强。

# J2SE Version 1.4

开发代号为 Merlin(隼),于 2004-02-06 发行(首次在 JCP 下发行)。
引入的新特性包括:

  • XML 处理;
  • Java 打印服务;
  • 引入 Logging API;
    引入 Java Web Start;
  • 引入 JDBC 3.0 API;
  • 引入断言;
  • 引入 Preferences API;
  • 引入链式异常处理;
  • 支持 IPv6;
  • 支持正则表达式;
  • 引入 Image I/O slot machine API。

# Java Version SE 5.0

开发代号为 Tiger(老虎),于 2004-09-30 发行。
引入的新特性包括:

  • 引入泛型;
  • 增强循环,可以使用迭代方式;
  • 自动装箱与自动拆箱;
  • 类型安全的枚举;
  • 可变参数;
  • 静态引入;
  • 元数据(注解);
  • 引入 Instrumentation。

# Java Version SE 6

开发代号为 Mustang(野马),于 2006-12-11 发行。
引入的新特性包括:

  • 支持脚本语言;
  • 引入 JDBC 4.0 API;
  • 引入 Java Compiler API;
  • 可插拔注解;
  • 增加对 Native PKI (Public Key Infrastructure)、Java GSS (Generic Security Service)、Kerberos 和 LDAP (Lightweight Directory Access Protocol) 的支持;
  • 继承 Web Services;做了很多优化。

# Java Version SE 7

开发代号是 Dolphin(海豚),于 2011-07-28 发行。
引入的新特性包括:

  • switch 语句块中允许以字符串作为分支条件;
  • 在创建泛型对象时应用类型推断;
  • 在一个语句块中捕获多种异常;
  • 支持动态语言;
  • 支持 try-with-resources;
  • 引入 Java NIO.2 开发包;
  • 数值类型可以用 2 进制字符串表示,并且可以在字符串表示中添加下划线;
  • 钻石型语法;
  • null 值的自动处理。

# Java Version SE 8

开发代号是 Spider(蜘蛛),于 2014-03-18 发行。

  • 支持 lambda 支持;
  • 增强日期与时间 API 的功能;
  • 对垃圾回收的性能也进行了改进;
  • 并且移除了 permgen 区。
  • Lambdas 表达式与 Functional 接口。
  • 接口的默认与静态方法。
  • 方法引用。
  • 重复注解。
  • 更好的类型推测机制。
  • 扩展注解的支持。

# Java Version SE 9.0

  • Java 平台级模块系统。
  • Linking。
  • JShell : 交互式 Java REPL。
  • 改进的 Javadoc。
  • 集合工厂方法。
  • 改进的 Stream API。
  • 私有接口方法。
  • HTTP/2。
  • 多版本兼容 JAR。

# Java Version SE 10.0

​ 本地变量类型推断,可以使用本地变量的初始化去推荐对应变量的类型。提升了并行垃圾收集器 G1 的性能,降低了收集延时。应用优化了启动时刻的数据共享,已经存在的类更好的共享。一个试用的即时编译器 Grral,只支持 linux x64 平台能够感知到 docker 的存在,如果运行在 linux 平台,可以感知到是否运行在 docker 容器中,可以查询到操作系统给容器分配的 cpu 和内存等等物理资源信息.
修复从主机 Java 线程连接到容器内 Java 线程的一个问题。更短的 jShell REPL tool 启动时间。提供了新接口,可以获取可变化的集合类,copyOf,Set.copyOf, 和 Map.copyOf 等方法创建一个新的集合对象,toUnmodifiableList, toUnmodifiableSet, 和 toUnmodifiableMap 获取不可修改对象,让 Stream 操作可以获取到不可变对象。
​ 本地变量类型推断。可以减少类型的生命,同时也保证了 static 类型的安全性。提供一个垃圾收集的接口去提供各个垃圾收集器隔离的能力,这样可以让内置的垃圾收集器正常运行,同时可以更容易向 hotspot 添加新的垃圾收集器。改进的并行的垃圾收集器 G1, 可以有效降低延迟。让 hotspot 支持寻找可用的任何内存,例如 NVDIMM 存储模块,用户可以去指定它,这也是为未来的异构内存提供支持。在 Linux/x64 平台提供一个实验性的即时编译器。让 jdk 使用单一仓库管理,现在分离在不同的仓库,这样给源码管理带来了一些困难。提升了内存的共享,减少了应用的启动时间。本地线程握手,可以在虚拟机的全局安全点暂停而不用等待其他的任何线程。为 openJDK 提供 Oracle 根认证,这样可以吸引更多的开发者使用 openJDK。

原文链接:https://blog.csdn.net/ghscarecrow/article/details/82318636