JAVA 发展历程

357 阅读12分钟

Java之父——James Gosling

詹姆斯·高斯林 (James Gosling)是一名软件专家,1955年5月19日出生于加拿大,Java编程语言的共同创始人之一,一般公认他为“Java之父”。

1977年获得了加拿大卡尔加里大学计算机科学学士学位,1983年获得了美国卡内基梅隆大学计算机科学博士学位。

JAVA发展历程

93dbd6e4c343717df8a7ca939319fee3.png

  • 1991年,Java 的历史要追溯到 1991 年, 由 Sun 公司带领的开发小组, 想设计一种小型的计算机语言,主要用于有线电视转换盒这类的消费设备。

    由于这类设备的处理能力和内存都非常有限,所以语言就必须设计的非常小且能够生成紧凑的代码。 另外,由于不同的厂商会选择不同的 CPU, 因此很重要的一点就是这种语言不应该与任何特定的体系结构绑定。这个项目被命名为 “Green”

    Sun 公司的人都有 Unix 的应用背景, 所以开发的语言用了 C++ 为基础。并把这种语言称为 “Oak” , 后来, Sun 公司的人后来发现, Oak 是一种已经有的计算机语言的名字, 于是, 将其改名为 “Java”。

  • 1992 年, Green 项目发了第一个产品,这个产品可以提供非常智能的远程控制,遗憾的是, Sun 公司对这个产品并不感兴趣。

  • 1993 年,Green 项目(新名字 “First Person 公司”)。在这一整年以及 1994 年上半年, 一直苦苦寻求买家购买他们的技术。 然后一个也没有找到, 然后在 1994 年,First Person 公司解散了。

    而且在这一年,1994年4月20日,一条64K的国际专线从中科院计算机网络中心(NCFC工程)通过美国Sprint公司连入Internet,实现了中国与Internet的全功能连接。从此中国被国际上正式承认为第77个真正拥有全功能Internet的国家。

    当这些在 Sun 公司发生的时候, Internet 的万维网也在日渐发展壮大, 当时的万维网关键是把浏览器超文本页面转换到屏幕上。 在 1994 年大多数都在使用 Mosaic, 这是 1993 年出自伊利诺伊大学超级计算中心的一个非商业化的 Web 浏览器。 在1994 年中期,Java 语言的开发者意识到, 要是能够建立一个相当酷的浏览器, 在客户/服务器主流框架中, 浏览器恰好需要我们完成一些工作: 体系结构中立、实时、可靠、安全。这些问题在工作站环境中并不太重要。 所以决定开发浏览器

  • 1995 年,实际的浏览器是由 Patrick Naughton 和 Jonathan Payne 开发的,并演变为 HotJava 浏览器。

    HotJava 浏览器采用Java 编写,为了炫耀 Java 语言的超强能力。这个浏览器可以在网页中执行内嵌的 Java 代码。 也就是 Java Applet。这一 “技术证明” 在 1995 年 5 月 23 日的 SunWorld'95 大会上展示,同时引发了人们对他的追逐, 一直延续延续到现在。诞生几个月后, 就超过了 10 万人下载 Java 语言。

  • 1995年5月23日,Java语言诞生

  • 1996年1月,第一个JDK-JDK1.0诞生,JDK 1.0 开发代号为 Oak(橡树)。

    但是这个版本 Java 1.0, 并不能用来进行真正的应用开发。虽然后来 Java 1.1 弥补了其中很多的不足和明显的缺陷。大大改进了反射能力, 并未 GUI 编程增加了新的事件处理模型,单是它仍然有很大的局限性, 并没有为 Java 的黄金时期到来做好准备。

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

  • 1996年9月,约8.3万个网页应用了JAVA技术来制作

  • 1997年2月18日,JDK1.1发布

    JDK 1.1

    引入的新特性包括:

    • 引入JDBC(Java Database Connectivity);
    • 支持内部类;
    • 引入Java Bean;
    • 引入RMI(Remote Method Invocation);
    • 引入反射(仅用于内省)。
  • 1997年4月2日,JavaOne会议召开,参与者逾一万人,创当时全球同类会议规模之纪录

  • 1997年9月,Java Developer Connection社区成员超过十万

  • 1998年,JDK1.1被下载超过2,000,000次。这一年, JavaOne 会议的头号新闻就是发布 Java 1.2 版本, 将这个早期玩具式的 GUI 和图形工具包括一些工具包。 在这个版本发布的 3 天后, Sun 公司的市场部将它改名为更加吸引人的 “Java 2 标准版软件开发 1.2 版”。

    也就在这个时候, 除了标准版(Standard Edition)J2SE 之外, Sun 公司还推出了另外两个版本: 一是, 手机嵌入式设备“微型版”(Micro Edition)J2ME。另一个是用于服务器端的处理“企业版”(Enterprise Edition)J2EE。为了区分这三个版本,分别叫做Java2SE,Java2EE,Java2ME,简称J2SE,J2EE,J2ME。故,2的含义为1.2版本

    JDK 1.2 开发代号为Playground(操场)

    引入的新特性包括:

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

    JDK 1.3 开发代号为Kestrel(红隼)

    引入的新特性包括:

    • 引入Java Sound API;
    • jar文件索引;
    • 对Java的各个方面都做了大量优化和增强。
  • 2002年2月26日,J2SE1.4发布,自此Java的计算能力有了大幅提升

    JDK 1.4 开发代号为Merlin(隼)

    引入的新特性包括:

    • XML处理;
    • Java打印服务;
    • 引入Logging API;
    • 引入Java Web Start;
    • 引入JDBC 3.0 API;
    • 引入断言;
    • 引入Preferences API;
    • 引入链式异常处理;
    • 支持IPv6;
    • 支持正则表达式;
    • 引入Image I/O slot machine API。
  • 2004年9月30日,18:00PM,J2SE1.5发布,成为Java语言发展史上的又一里程碑

    这个版本对 Java 语言做出了重大的改进,为了表示该版本的重要性, 这个版本原来定位 1.5 版, 在 2004 年的 JavaOne 大会之后, 版本直接升为 5.0,对外宣布 Java SE 5.0。内部还是使用 Java 1.5。 这个版本加入了泛型的支持,另外受到了 C# 的启发, 还增加了几个很有用的语言特性: for each 循环、自动装箱、注解、枚举、可变长参数等。

    JDK 1.5 开发代号为Tiger(老虎)

    引入的新特性包括:

    • 引入泛型;
    • 增强循环,可以使用迭代方式;
    • 自动装箱与自动拆箱;
    • 类型安全的枚举;
    • 可变参数;
    • 静态引入;
    • 元数据(注解);
    • 引入Instrumentation。
  • 2005年6月,JavaOne大会召开,SUN公司公开Java SE 6。

    此时,Java的各种版本已经更名,取消其中的数字 “2”:J2EE更名为Java EE,J2SE更名为Java SE,J2ME更名为Java ME。单内部版本不变化还沿用之前的写法。一直延续至今。 这个版本没有对语言方面进行修改, 而是做了其他性能改进,并增强了类库。

  • 2006年12月,SUN公司发布JRE6.0。

    并且宣布, 将 Java 语言作为免费软件对外发布。使用 GPL v2 (GNU General Public License v2) 协议下公开了源码。并且建立了 OpenJDK 组织对这些源码进行独立管理。除了极少量的产权代码外(Encumbered Code,这部分代码大多是 Sun 公司本身也无权限进行开源处理的),OpenJDK 几乎包括了 Sun JDK 的全部代码外,OpenJDK 的质量主管曾经表示,在 JDK 1.7 中,Sun JDK 和 OpenJDK 除了代码文件头的版权注释之外,代码基本上完全一样,所以 OpenJDK7 与 Sun JDK 1.7 本质上就是同套代码库开发的产品。

    JDK 1.6 开发代号为Mustang(野马)

    引入的新特性包括:

    • 支持脚本语言;
    • 引入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;
    • 做了很多优化。
  • 2009年12月,SUN公司发布Java EE 6

    JDK 1.6发布以后,由于代码复杂性的增加、JDK开源、开发 JavaFX、经济危机及Sun 公司收购案等原因,SUN公司在JDK发展以外的事情上耗费了很多资源,JDK的更新没有再维持两年发布一个主版本的发展速度。并且在 2009 年 4 月 20 日,被 Oracle 以 74 亿美元收购 Sun 公司,取得了 Java 的商标版权(Java语言本身并不属于哪个公司所有,它由JCP组织进行管理,尽管JCP主要是由Sun 公司或者说 Oracle 公司所领导的)。也就在这两年 Java 的开发停滞了一段时间。一直到了 2011 年。

  • 2010年11月,由于Oracle公司对于Java社区的不友善,因此Apache扬言将退出JCP

  • 2011年7月28日,Oracle公司发布Java SE 7

    但是很多规划在这个版本的特性,其中 Lambda 项目 ( Lambda 表达式、函数式编程)、Jigsaw 项目(虚拟机模块化支持)、动态语言支持、GarbageFirst 收集器和 Coin 项目(语言细节进化)等子项目都没有实现在这个版本中, 而是用了 Oracle 公司实行的 “B计划”。

    JDK 1.7 开发代号是Dolphin(海豚)

    引入的新特性包括:

    • switch语句块中允许以字符串作为分支条件;
    • 在创建泛型对象时应用类型推断;
    • 在一个语句块中捕获多种异常;
    • 支持动态语言;
    • 支持try-with-resources;
    • 引入Java NIO.2开发包;
    • 数值类型可以用2进制字符串表示,并且可以在字符串表示中添加下划线;
    • 钻石型语法;
    • null值的自动处理。
  • 2014年3月18日,Oracle公司发表Java SE 8。 这个版本, 在近 20 年中这个版本变更最大, Java SE 8 包含了 “函数式” 编程方式,可以很容易的表述并发执行的计算。 这个版本也是现在企业中使用范围最广的一个版本。 就想一开始说的那样, 能跟上时代的进步, 就不会被淘汰。

    JDK 1.8 开发代号是Spider(蜘蛛)

    引入的新特性包括:

    • 支持 lambda支持;
    • 增强日期与时间API的功能;
    • 对垃圾回收的性能也进行了改进;
    • 并且移除了permgen区。
    • Lambdas表达式与Functional接口
    • 接口的默认与静态方法
    • 方法引用
    • 重复注解
    • 更好的类型推测机制
    • 扩展注解的支持
  • 2017年7月,Oracle 公司将发布 JDK 9。这个版本算是比较大的调整,加入了很早之前就规划的模块化功能。并且对整个 JDK 基于模块进行了重新编写。Java 9 提供了轻量级 JSON API; 使用 G1 作为默认的垃圾收集器,替代了之前默认使用的 Paralel GC; 引入了 jShell 这个交互性工具。并且全面支持 HTTP 2.0。

    也就是在这一年,2017 年 8 月,Oracle 决定将 Java EE 移交给开源组织,最后 Eclipse 基金会接手。

    由于甲骨文不允许开源组织用 Java 的名号,于是 Eclipse 选出了 "Jakarta EE" 和 "Enterprise Profile" 两个后续名字,最终前者以 64.4% 的票数获胜。

    也就是说,Java EE 已经正式更名为 Jakarta EE(雅加达)。

    Oracle公司发表Java SE 9

  • 2018年,从 2018 年开始, 每6个月就会发布一个 Java 版本, 以更快地引入新特性。这里又分为 LTS 版和最新版。 生产环境中最好只使用 LTS 版本, 因为这个版本更加稳定, 维护周期更长。

  • 2018 年 3 月 21 日, Java 10 发布。

  • 2018 年 9 月 25 日, Java 11 LTS 发布。

  • 2019 年 2 月, Java 12 发布。

  • 2019 年 9 月, Java 13 发布。

  • 2020 年 3 月 17 日,Java 14 发布。

  • 2020 年 9 月 15 日,Java 15 发布。

  • 2021 年 3 月 16 日,Java SE 16 发布。

  • 2021 年 9 月 14 日,Java SE 17 LTS 发布。

    这个是继 Java 11 之后的有一个长期支持版本, 并且直接支持到了 2029 年 9 月。这可能是下一个 Java 8。所以学习的话, 可以直接学习这个版本。当然也可以直接学习 Java 17 。这样的话, 对于工作来说 3 年之内不会有大的变化。