一篇文章和你从 Java1 聊到 Java18

简介: 002-2022 年的 20 年里 Java 始终保持在前三的水平,其中在 2005 年、2013-2015 年间、2021 年等时间还多次登顶过第一,这么一个已经发布了 27 年的语言在这些年是怎么始终保持在编程语言前三的呢?这么多年 Java 各个版本间又有什么变化?Java 语言在未来还会继续保持成为语言的常青树吗?这篇文章就来和大家回顾一下 Java 的历史。

1.前言

2022 年 9 月就要来临,按照官方的发布排期,Java 19 将要来临,Java 19 是非 LTS 版本(非长期支持版本),Java 19 将更新包括结构化并发、记录模式、外部函数、内存 API ,以及对开源 Linux/RISC-V 指令集架构 (ISA) 的支持等新特性。从 1995 年 Java 1 发布,到现在已经过去了整个 27 年了,Java 马上就要进入而立之年,我们看一下 TIOB 最新(2022 年 8 月)的编程语言排行榜,Java 排行第三名,根据下面的编程语言趋势图,可以看到,2002-2022 年的 20 年里 Java 始终保持在前三的水平,其中在 2005 年、2013-2015 年间、2021 年等时间还多次登顶过第一,这么一个已经发布了 27 年的语言在这些年是怎么始终保持在编程语言前三的呢?这么多年 Java 各个版本间又有什么变化?Java 语言在未来还会继续保持成为语言的常青树吗?这篇文章就来和大家回顾一下 Java 的历史,现在市面上大部分介绍是从 Java9 以后开始的,本文大量数据来自网络,如有参考缪误,请大神指正。

image.png


image.png

2.Java 简介

首先简单介绍下 Java 语言,Sun 公司的詹姆斯·高斯林(James Gosling)等人于 1990 年代初开发 Java 语言,Sun 公司对 Java 的描述是:Java 编程语言是个简单、面向对象、分布式、解释性、健壮、安全、与系统无关、可移植、高性能、多线程和动态的语言。Java 相对于其他语言的优势,它可以将源代码编译成字节码,再依赖各种不同平台上的虚拟机来解释执行字节码,所以 Java 的最著名的口号就是一次编写,到处运行(Write once, run anywhere,有时也简写为 WORA)。2009 年,Oracle 收购 Sun 公司,Java 也成为 Oracle 的产品,OpenJDK 项目也被 Oracle 接管。

Java 版本介绍

下图是 Java 版本发布日志和支持日期。我将 Java 的发展阶段分为 4 个阶段:

1990——1996 从 0 到 1,寻找方向;

1996——2004 从 1 到 5,逐渐成熟;

2004——2014 从 5 到 8,走向辉煌;

2014——2022 从 8 到 18,挑战中前行;

image.png

3. 从 0 到 1,寻找方向

首先,让我们回到 1990 年哪个 Java 还没有诞生的时刻,看看当时的年代背景。

市场环境:20 世纪 90 年代,单片式计算机系统诞生,单片式计算机系统不仅廉价,而且功能强大,使用它可以大幅度提升消费性电子产品的智能化程度。有目标明确的巨大市场。

技术环境:当时 C++ 在编程语言中比较优秀,但 C++过于复杂和庞大,再加上由于消费电子产品所采用的嵌入式处理器芯片的种类繁杂,需要让编写的程序跨平台运行,假如用 C++编写的话对程序的跨平台运行不友好。当时的技术不足以支持,或者说不能很好的支持要发展的市场环境。亟需新的语言来适应市场。

公司环境:1982 年 2 月 24 日,安迪和维诺德·科斯拉、斯科特·麦克尼利创建了 Sun 公司。Sun 公司成立以后,所以第一季度就盈利了。到 1983 年的时候,Sun 公司就已经非常有名气了。1986 年,成立仅仅四年的 Sun 公司上市了。作为一个持续增长超过 30%的公司,Sun 一上市就受到了极大的追捧。Sun 公司在 2001 年的时候,营收达到了 183 亿美元的巅峰。公司处于上升期,人员比较理想,激进,也有资源支持新项目、新想法的落地。

组织和人才环境:1990 年,Sun 的总裁麦克尼利让高斯林自己组建一个完全独立于公司的小组,由小组成员自己决定工作目标和进度。麦克尼利对高斯林说:“我不管你们要做什么,要多少钱、多少人,也不管你们花多长时间做出来,公司都无条件支持”。这个后来取名为“绿色小组”的团队成立之初只有 4 个人。他们有一个很模糊的想法,甚至连最终的目标产品是硬件还是软件也不知道。但是他们知道必须发明一些技术或者产品让 Sun 公司赶上信息领域的下一波大浪潮。当时人类已经发明了很多种消费类电子产品,包括微机、手机、手持电脑、录相机、电视机、洗衣机、冰箱、微波炉等等。他们认为要将这些设备数字化并用网络互联讲是今后的方向。

可以说,当时 Java 的出现,是万事俱备只欠东风。绿色小组开始决定既不用 C++编写,也不开发全新的编程语言,而是对 C++进行改造:去除了 C++复杂的指针和内存管理,并结合嵌入式系统的实时性要求。所以最开始,Java 也被叫做 C++--。最开始命名为 Oak,后来因为版权原因改为 Java。但是由于在当时这些智能化家电的市场需求没有预期的高,当他们在向硬件生产商进行演示的时候,硬件生产商对此并不感冒,从而被搁置一旁。如果到此为止,可以说 Java 语言的开发工作是失败的,Java 语言就和历史上众多消失的语言没有什么区别了,但是市场的变化和团队主动拥抱变化带来了柳暗花明。

1994 年,联网商业化浪潮最具标志性的 Netscape 诞生了。同年,微软为 Windows 95 创建了一个 Web 浏览器。项目小组看到了浏览器在未来的发展前景,于是决定将 Java 应用(当时还叫 Oak)于互联网。

1995 年,他们用 OaK 语言研发了一种能将小程序嵌入到网页中执行的技术——Applet,由于 Applet 不仅能嵌入网页,还可随同网页在网络上进行传输,这让无数的程序员看到了 OaK 这门语言,与此时,OaK 正式更名为 Java。雅虎公司当时就使用了 Applet 技术开发实现聊天室功能。

1996 年 1 月,SUN 公司推出了 JDK1.0。在 JDK1.0 发布后,有很多程序员学习并运用 Java 来制作网页,JDK 包括两大部分:开发工具和运行环境。运行环境包括核心 API、集成 API、用户界面 API、发布技术、Java 虚拟机(JVM)。

JDK1.0 的发布,标志着 Java 成为一种独立的开发工具。在同年 9 月,约有 8.3 万个网页应用了 Java 技术来制作。从此,Java 在互联网的推动下火了。JDK1.0 的代表性技术有:Java 虚拟机、Applet、AWT 等。

Java 从 0 到 1 的成功,其实是优秀的公司、团队和互联网的兴起的共同造成的。在后面让 Java 一开始大放异彩的技术 Java Applet 被新兴的 Flash、JavaScript、Html5 逐渐替代,在 2022 年的今天,几乎已经没有浏览器支持 Applet 了。那后来的 Java 又是靠什么在互联网大潮中脱颖而出呢?

4. 从 1 到 5,逐渐成熟;

我们先看看在 1996——2004,8 年的时间 Java 共发布了 5 个版本,从 JDK1.1~Java 5,版本更新的具体内容大家可以在网上查到,这里不做赘述,这里只讨论下对后面有较大影响的更新项。

在 Java 2(也叫 J2SE 1.2)版本,Java 正式分为三个平台,“J2SE”(Java 2 平台,标准版)、J2EE(Java 2 平台,企业版) 和 J2ME(Java 2 Platform,Micro Edition,微型版)。虽然 IBM 用 Java SE 开发出强大的 Java 编辑器 Eclipse,但是 Java SE 在桌面应用必须安装 JDK 等原因,现在已经没有什么人使用了。Java ME 曾一度在手机端辉煌,在 2001 年,NOKIA 宣布,到 2003 年将出售 1 亿部支持 Java 的手机。但随着塞班、安卓、IOS 等系统的兴起,Java ME 已经几乎无人问津。而 Java EE 面向企业的 Java 应用规范,现在已经是 Java 最主流的应用,虽然不是官方的倡导的 EJB,但是以 Spring 为代表的企业应用开发技术已经成为当今互联网最重要的基础设施。

image.png

(上图为 Java ME 手机应用)

在 Java 3 版本,Sun 公司发布了 HotSpot JVM,成为 Java 的主流虚拟机沿用至今。

在 Java 5 版本,Java 发布了大量语言新特性,如泛型、枚举、注解、自动装箱拆箱、可变参数、foreach 等,极大的增强了语言的特性,为后面 Java 优秀的框架出现打下了基础。

可以说从 1 到 Java 5 版本,Java 进行了各种的探索,从当时主流的电脑桌面到企业服务器再到还在兴起极端的手机,Java 都在做尝试,到了 Java 5 版本已经为企业服务端开发做好了一切准备,EJB 规范虽然繁琐但是为优秀的框架提供了参照和打下了基础。

5.从 5 到 8,走向辉煌;

从 2004 年到 2014 年,Java 从 6 到 8,发布了 3 个大版本,直至 Java 8 版本,成为 Java 集大成版本,至今都是 Java 开发者的主力版本。

2005 年,Rod Johnson 推出了一个叫做 spring 的开发框架,他出过一本书《Expert one on one J2EE development without EJB》,该框架的一些核心功能理论上可用于任何 Java 应用,但 Spring 还为基于 Java 企业版平台构建的 Web 应用提供了大量的拓展支持。Spring 没有直接实现任何的编程模型,但它已经基本上完全代替了EJB 模型。在这套框架下,Java EE 的开发由繁琐变为简介,受到开发者的欢迎,在 Java 社区中广为流行。除了 Spring 以外, mybatis、hibernate、struts、springmvc 等框架的出现,也大大减轻了服务器端开发工作,为互联网的爆发提供了基础设施支持。

image.png

在 2006 年的 JavaOne 大会上 Sun 公司称要将 Java 开放源代码,宣称:“Java 语言靠群体的力量而非公司的力量”,并于 2009 年 4 月 15 日正式发布 OpenJDK,极大的扩展了 Java 的开放生态。

2006 年,Hadoop 成为独立项目,Java 进入大数据领域并随着 Hadoop 项目的成功,成为大数据最广泛运用的语言之一。

image.png

2007 年 11 月,Google 与 84 家硬件制造商、软件开发商及电信营运商成立开放手持设备联盟来共同研发 Android,Android 系统的开发使用了 Java 为主要语言,在移动端 Java 焕发了第二春。至此 Java 成为服务端、大数据、移动端的三大主流开发语言。

2009 年,全球最大的数据库软件商甲骨文(Oracle)公司。甲骨文和 SUN 今天联合宣布了一项最终协议,甲骨文将以 74 亿美元价格收购 Sun。随后 Java 以及 OpenJDK 等全部被收入 Oracle 怀中。

2014 年,Java 8 版本发布,新增了 Lambda 表达式、函数式接口、Stream 流、Optional 判空、新的日期时间类等重要特性。而且从 Java 8u211 以后的版本,都是需要商业收费的,但是一旦当你开发的程序如果用于商业用途,就需要缴纳费用获取授权。根据 New Relic 公司发布的《2022 年 Java 生态系统状况报告》来看,Java 11 已经超过了 Java 8,但在这个统计中很多小公司或老项目可能没有统计其中,就中国目前市场情况,个人认为 Java 8 依旧是主流版本,并还会继续很长一段时间,这点从 Oracle 的维护日期也可以看出,Java 8 维护至 2030 年,而 Java 17 才维护到 2029 年。

image.png

6.从 8 到 18,挑战中前行;

从 Java 9 版本开始,Java 的更新周期改为每六个月更新一个版本,每年的 3 月和 9 月进行版本的更新,这也是为了适应市场快速的变化,但是 LTS 版本还是 3 年左右一个,其实是把以前大的迭代变成了现在小迭代。

在 Java 8 以后的版本,借鉴了很多其他语言的特性和语法糖,也开发了很多提升性能的特性,,比如 G1 垃圾回收、var 声明变量、模块化、switch 语法的变化等等,但是真正的挑战并不在这些细微的优化上,云原生的兴起让 Java 面临很多的挑战。

近几年 Docker 和 Kubernetes 迅速崛起,以容器+微服务为主要技术的云原生已经成为主流,而 docker 的口号就是修改了 Java 原来的口号:”一次构建,到处运行“,Java 这种基于虚拟机运行的应用天生和容器兼容较差,容器运行需要先安装 JVM,容器的运行中内存和启动速度也因为 JVM 而影响性能,再加上 Go 语言的强势崛起,什么“XX 全面使用 Go 语言进行重构”、“XXXX 全面拥抱 Go 语言”的消息无孔不入,Java 的颓势似乎已经注定。

从 Java 1 到现在的,Java 其实一直在面对挑战,这次云原生来势汹汹,Java 又是如何应对呢?这里简单说一下 GraalVM,GraalVM 可以直接把 Java 程序编译成目标平台二进制可执行文件,可以把 Java 程序编译成只有数 M 大小的可执行的本地镜像,可以在 Docker 容器中运行,由于省去了 JVM 启动初始化对象的时间,加载速度也大大提升,而加载时间只有几毫秒。而且也基于 Spring 推出了 Spring Native 项目,让 Spring 可以快速的运行。当然这只是 Java 应对云原生的一个方面。不同公司不同 JDK 还有 Java 生态的开发者,都在做新的尝试。

7.小结

本文简单描述 Java 从 1-18 的历史,当中夹杂了很多关键事件,介绍了一些背景,一个历经 27 年的语言不会轻易的倒下,就像周志明老师说的:”Java 与其他语言竞争,底气从来不在于语法、类库有多么先进好用,而是来自它庞大的用户群和极其成熟的软件生态,这在朝夕之间难以撼动。“Java 的下一个 LTS 版本是 Java 2023 年发布的 Java 21,让我们拭目以待 Java 在云原生下的改变。


参考资料:

云原生时代,Java的危与机(周志明) (itxueyuan.com)

Java - 维基百科,自由的百科全书 (wikipedia.org)

相关文章
|
3月前
|
安全 Java 调度
当前仍在编辑文章 - Java 并 发 编 程 基 础
当前仍在编辑文章 - Java 并 发 编 程 基 础
34 0
|
3月前
|
缓存 Java 数据安全/隐私保护
当前仍在编辑文章 - Java Excel处理 - 实操案例与方法手册
当前仍在编辑文章 - Java Excel处理 - 实操案例与方法手册
77 0
|
3月前
|
存储 搜索推荐 算法
一篇文章学会Java十大排序算法
一篇文章学会Java十大排序算法
28 0
GitHub阅读量最高的文章竟是图解Java,不愧是Alibaba内部资料
这篇《Java基础知识总结》是 JavaGuide 上阅读量最高的一篇文章,由于我对其进行了重构完善并且修复了很多小问题,所以,在头条同步一下!
|
5月前
|
SQL Java 数据库连接
一般文章让你了解mybatis,以及如今在Java开发的地位!
一般文章让你了解mybatis,以及如今在Java开发的地位!
|
5月前
|
XML Java 数据格式
一篇文章了解Java spring中bean的生命周期!
一篇文章了解Java spring中bean的生命周期!
132 0
|
8月前
|
Java
一篇文章教你学会:对Java集合进行并集,交集,差集运算
一篇文章教你学会:对Java集合进行并集,交集,差集运算
219 0
|
8月前
|
小程序 Java
一篇文章搞定Java稀疏数组!
一篇文章搞定Java稀疏数组!
71 0
|
9月前
|
存储 Java
【JavaSE】一篇文章领悟Java运算符
Java运算符超级详细解析,包含算数运算符、关系运算符、逻辑运算符、位运算符。
80 1
【JavaSE】一篇文章领悟Java运算符
|
10月前
|
存储 Java
一篇文章入门单链表+刷题实践【java实现+详细注释】
一篇文章入门单链表+刷题实践【java实现+详细注释】
10648 2