为什么叫做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正式发布。
2017年,甲骨文公司发布了Java9正式版
Java发展史上发生的大事件具体概括如下表
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 |
各版本JDK引入的主要新特性
JDK Version 1.0
- 开发代号为Oak(橡树),于1996-01-23发行。
JDK Version 1.1
- 于1997-02-19发行。
- 引入的新特性包括:
- 引入JDBC(Java Database Connectivity);
- 支持内部类;
- 引入Java Bean;
- 引入RMI(Remote Method Invocation);
- 引入反射(仅用于内省)。
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。