1、Java是什么
Java是一种编程语言和计算平台,由Sun微系统公司于1995年首次发布。通过提供构建许多服务和应用程序的可靠平台,它已经从不起眼的起点发展到为当今数字世界的很大一部分提供动力。面向未来的新型创新产品和数字服务也将继续依赖于Java。(来着官方文档的翻译)
Java是一种通用的,基于类的,面向对象的编程语言。它是用于应用程序开发的计算平台。同时,Java是快速,安全和可靠的。它被广泛用于在笔记本电脑,数据中心,游戏机,科学超级计算机,手机等中开发Java应用程序。Java遵循WORA(Write Once, Run Anywhere。一次写入,到处运行)的原理,并且与平台无关。同时它也是一门简单易学,容易上手的计算机语言。
2、Java命名由来
Java是印度尼西亚爪哇岛的英文名称,因盛产咖啡而闻名。Java语言中的许多库类名称,多与咖啡有关:如JavaBeans(咖啡豆)、NetBeans(网络豆)以及ObjectBeans (对象豆)等等。SUN和JAVA的标识也正是一杯正冒着热气的咖啡。
Java的名字如何得来,主要两种说法,一种是开发小组开会讨论名字未果,于是一起去了一家咖啡店;还有一种说法是,Java 实际上是几个核心开发人员的名字缩写,其中的J当然就是Jame Gosling了。
3、简述Java发展史
从1991年Java的第一个版本诞生到现在已经有三十余年的时间,白驹过隙,沧海桑田,转眼Java已经发展了三十余年的时间,目前JDK的版本已经发展到了JDK 20,即将迎来JDK 21、JDK 22,这二三十年里诞生过无数与Java相关的产品、技术与标准。现在让我们走入时间隧道,从孕育Java语言的时代开始,再来回顾一下Java的发展轨迹和历史变迁。
1991年4月,在Sun计算机公司中,由James Gosling博士领导的绿色计划(Green Project)开始启动,此计划最初的目标是开发一种能够在各种消费性电子产品(如机顶盒、冰箱、收音机等)上运行的程序架构。这个计划的产品就是Java语言的前身:Oak(得名于James Gosling办公室外的一棵橡树)。Oak当时在消费品市场上并不算成功,但随着1995年互联网潮流的兴起,Oak迅速找到了最适合自己发展的市场定位并蜕变成为Java语言。
1995年5月23日,Oak语言改名为Java,Sun正式发布Java和HotJava产品,Java首次公开亮相,并且在SunWorld大会上正式发布Java 1.0版本。Java语言第 一次提出了“Write Once,Run Anywhere”的口号,至此,Java语言诞生了。
1996年1月23日,JDK 1.0发布,Java语言有了第一个正式版本的运行环境。JDK 1.0提供了一个纯解释执行的Java虚拟机实现(Sun Classic VM)。JDK 1.0版本的代表技术包括:Java虚拟机、Applet、 AWT等。
1996年4月,十个最主要的操作系统和计算机供应商声明将在其产品中嵌入Java技术。同年9月, 已有大约8.3万个网页应用了Java技术来制作。在1996年5月底,Sun于美国旧金山举行了首届JavaOne大 会,从此JavaOne成为全世界数百万Java语言开发者每年一度的技术盛会。
1997年2月19日,Sun公司发布了JDK 1.1,Java里许多最基础的技术支撑点(如JDBC等)都是在 JDK 1.1版本中提出的,JDK 1.1版的技术代表有:JAR文件格式、JDBC、JavaBeans、RMI等。Java语言的语法也有了一定的增强,如内部类(Inner Class)和反射(Reflection)都是在这时候出现的。直到1999年4月8日,JDK 1.1一共发布了1.1.0至1.1.8这9个版本。从1.1.4以后,每个JDK版本都有一个属于自己的名字(工程代号),分别为:JDK 1.1.4-Sparkler(宝石)、JDK 1.1.5-Pumpkin(南瓜)、JDK 1.1.6-Abigail(阿比盖尔,女子名)、JDK 1.1.7-Brutus(布鲁图,古罗马政治家和将军) 和JDK 1.1.8-Chelsea(切尔西,城市名)
1998年12月4日,JDK迎来了一个里程碑式的重要版本:工程代号为Playground(竞技场)的JDK 1.2,Sun在这个版本中把Java技术体系拆分为三个方向,分别是面向桌面应用开发的J2SE(Java 2 Platform,Standard Edition)、面向企业级开发的J2EE(Java 2 Platform,Enterprise Edition)和面向手 机等移动终端开发的J2ME(Java 2 Platform,Micro Edition)。在这个版本中出现的代表性技术非常多,如EJB、Java Plug-in、Java IDL、Swing等,并且这个版本中Java虚拟机第一次内置了JIT(Just In Time)即时编译器(JDK 1.2中曾并存过三个虚拟机,Classic VM、HotSpot VM和Exact VM,其中 Exact VM只在Solaris平台出现过;后面两款虚拟机都是内置了JIT即时编译器的,而之前版本所带的 Classic VM只能以外挂的形式使用即时编译器)。在语言和API层面上,Java添加了strictfp关键字, Java类库添加了现在Java编码之中极为常用的一系列Collections集合类等。在1999年3月和7月,分别有 JDK 1.2.1和JDK 1.2.2两个小升级版本发布。
1999年4月27日,HotSpot虚拟机诞生。HotSpot最初由一家名为“Longview Techno-logies”的小公司 开发,由于HotSpot的优异表现,这家公司在1997年被Sun公司收购。Hot-Spot虚拟机刚发布时是作为 JDK 1.2的附加程序提供的,后来它成为JDK 1.3及之后所有JDK版本的默认Java虚拟机。
2000年5月8日,工程代号为Kestrel(美洲红隼)的JDK 1.3发布。相对于JDK 1.2,JDK 1.3的改进主要体现在Java类库上(如数学运算和新的Timer API等),JNDI服务从JDK 1.3开始被作为一项平台级服务提供(以前JNDI仅仅是一项扩展服务),使用CORBA IIOP来实现RMI的通信协议,等等。这个版本还对Java 2D做了很多改进,提供了大量新的Java 2D API,并且新添加了JavaSound类库。JDK 1.3有1个修正版本JDK 1.3.1,工程代号为Ladybird(瓢虫),于2001年5月17日发布。自从JDK 1.3开始,Sun公司维持着稳定的研发节奏:大约每隔两年发布一个JDK的主版本,以动 物命名,期间发布的各个修正版本则以昆虫作为工程代号。
2002年2月13日,JDK 1.4发布,工程代号为Merlin(灰背隼)。JDK 1.4是标志着Java真正走向成熟的一个版本,Compaq、Fujitsu、SAS、Symbian、IBM等著名公司都有参与功能规划,甚至实现自己独立发行的JDK 1.4。哪怕是在近二十年后的今天,仍然有一些主流应用能直接运行在JDK 1.4之上, 或者继续发布能运行在1.4上的版本。JDK 1.4同样带来了很多新的技术特性,如正则表达式、异常链、NIO、日志类、XML解析器和XSLT转换器,等等。JDK 1.4有两个后续修正版:2002年9月16日发 布的工程代号为Grasshopper(蚱蜢)的JDK 1.4.1与2003年6月26日发布的工程代号为Mantis(螳螂) 的JDK 1.4.2。2002年前后还发生了一件与Java没有直接关系,但事实上对Java的发展进程影响很大的事件,就是微软的.NET Framework发布。这个无论是技术实现还是目标用户上都与Java有java零基础发展史很多相近之处的技术平台给Java带来了很多讨论、比较与竞争,.NET平台和Java平台之间声势浩大的孰优孰劣的论战到今天为止都仍然没有完全平息。
2004年9月30日,JDK 5发布,工程代号为Tiger(老虎)。Sun公司从这个版本开始放弃了谦逊的“JDK 1.x”的命名方式,将产品版本号修改成了“JDK x”。从JDK 1.2以来,Java在语法层面上的变动一直很小,而JDK 5在Java语法易用性上做出了非常大的改进。如:自动装箱、泛型、动态注解、枚举、可变长参数、遍历循环(foreach循环)等语法特性都是在JDK 5中加入的。在虚拟机和API层面上,这个版本改进了Java的内存模型(Java Memory Model,JMM)、提供了java.util.concurrent并发包 等。另外,JDK 5是官方声明可以支持Windows 9x操作系统的最后一个JDK版本。
2006年12月11日,JDK 6发布,工程代号为Mustang(野马)。在这个版本中,Sun公司终结了从 JDK 1.2开始已经有八年历史的J2EE、J2SE、J2ME的产品线命名方式,启用Java EE 6、Java SE 6、Java ME 6的新命名来代替。JDK 6的改进包括:提供初步的动态语言支持(通过内置Mozilla JavaScript Rhino引擎实现)、提供编译期注解处理器和微型HTTP服务器API,等等。同时,这个版本对Java虚拟机内部做了大量改进,包括锁与同步、垃圾收集、类加载等方面的实现都有相当多的改动。在2006年11月13日的JavaOne大会上,Sun公司宣布计划要把Java开源,在随后的一年多时间内, 它陆续地将JDK的各个部分在GPL v2(GNU General Public License v2)协议下公开了源码,并建立了OpenJDK组织对这些源码进行独立管理。除了极少量的产权代码(Encumbered Code,这部分代码所有 权不属于Sun公司,Sun本身也无权进行开源处理)外,OpenJDK几乎拥有了当时SunJDK 7的全部代码,OpenJDK的质量主管曾经表示在JDK 7中,SunJDK和OpenJDK除了代码文件头的版权注释之外, 代码几乎是完全一样的,所以OpenJDK 7与SunJDK 7本质上就是同一套代码库出来的产品。JDK 6发布以后,由于代码复杂性的增加、Java开源、开发JavaFX、世界经济危机及Oracle对Sun 的收购案等原因,Sun公司在发展Java以外的事情上耗费了太多精力和资源,JDK的更新没有能够继续 维持两年发布一个主版本的研发速度,这导致了JDK 6的生命周期异常的长,一共发布了211个更新升 级补丁,最后的版本为Java SE 6 Update 211,于2018年10月18日发布。
2009年2月19日,工程代号为Dolphin(海豚)的JDK 7完成了其第一个里程碑版本。按照JDK 7最初的功能规划,一共会设置十个里程碑。最后一个里程碑版本原计划定于2010年9月9日结束,但由于各种原因,JDK 7最终无法按计划完成,为了尽快完成JDK 7的发布,因此裁掉了大部分原定的功能,对于原定的Lambdax项目、Jigsaw项目、动态语言支持、Gabage-First垃圾收集器、Coin项目只匆匆交付了处于Experimental状态的G1垃圾收集器(直到2012年4月的Update 4中才开始正式商用),其余项目延期到JDK 8中。同年4月20日,Oracle宣布正式以74亿美元的价格收购市值曾超过2000亿美元的Sun公司,传奇的Sun Microsystems从此落幕成为历史,Java商标正式划归Oracle所有(Java语言本身并不属于哪间公 司所有,它由JCP组织进行管理,尽管在JCP中Sun及后来的Oracle的话语权很大),Oracle从JDK 7开始进行接手,迅速展现出了其极具商业化的处世风格,面对Java中使用最广泛的Java SE免费产品线,定义了一套新的商业版产品Java SE Support ,此外JDK 7计划维护到2022年,已经面向付费用户发布了211个补丁,最新版本为JDK 7 Update 211。
2011年7月28日,JDK7发布,做出的改进:提供新的G1收集器、加强对非Java语言的调用支持、可并行的类加载架构等,在JDK1.7u4中,正式启用了新的垃圾回收器G1。
2014年3月18日,Oracle公司发布JDK 8,从此使用JEP(JDK Enhancement Proposals)来定义和管理纳入新版JDK发布范围的功能特性,JDK 8中实现了JDK7中定义并且未完成的功能,主要包括:Lambda函数表达式支持,内置Nashorn JavaScript引擎,新的时间日期API,移除HotSpt永久代等,原本说好的会在JDK 8提供的Jigsaw模块化功能再次被延期到了JDK 9。
2017年9月21日,Oracle公司发表 JDK 9,这其中较为显著的功能就是在JDK 7时期已经规划的Jigsaw模块化功能,为何屡次发布都未能如约而至,前期可能是技术埋坑,后面遭到了以IBM和RedHat联合的等JCP委员抵抗,否决模块化提案,这种做法无疑是革了模块化支持本身就比较好的IBM的命,面对如此抵抗,Oracle丝毫没有退让,宁愿摒弃JSR独立研发,也要推行Jigsaw的发展,如果成真,想必Java也会面临如Python2和Python3的巨大不同,好在最终达成一直协议,Java还是那个完整的Java。JDK 9还提供了JS Shell、JLink、JHSDB等增强。JDK 9之后,Java也以更加敏捷的交付方式如期而至,每年的3月和9月发布一个大版本,每6个月发布一个版本,每三年一个LTS版本,目的是避免众多功能交付在一个捆绑JDK的风险,。这次改革确实从根源上解决了跳票问题,但也为Java的用户和发行商带来了颇大的压力,不仅程序员感慨“Java新版本还没开始用就已经过时了”,Oracle自己对着一堆JDK版本分支也在挠头,不知道该如何维护更新,该如何提供技术支持。Oracle的解决方案是顺理成章地终结掉“每个JDK版本最少维护三年”的优良传统,从此以后,每六个JDK大版本中才会被划出一个长期支持(Long Term Support,LTS)版,只有LTS版的JDK能够获得为期三年的支持和更新,普通版的JDK就只有短短六个月的生命周期。JDK 8和JDK 11会是LTS版,再下一个就到2021年发布的JDK 17 了,JDK9发布的同时,也提出了孵化器模块(Incubator)和预览特性(Preview)两个概念。也是在这个版本中CMS开始被废弃。
2018年3月20日,JDK 10如期发布,这版本的主要研发目标是内部重构,诸如统一源仓库、统一垃圾收集器接口、统一即时编译器接口(JVMCI在JDK 9已经有了,这里是引入新的Graal即时编译 器)等,这些都将会是对未来Java发展大有裨益的改进,但对普通用户来说JDK 10的新特性就显得乏 善可陈,毕竟它只包含了12个JEP,而且其中只有本地类型推断这一个编码端可见的改进。尽管JDK 10可见的改进有限,但2018这一年Java圈丝毫不缺乏谈资,相继发生了几件与“金钱”相关的历史性大事件,Oracle正式宣布Java EE成为历史名称,曾经拥有着无数光辉的Java EE产品线(至今仍使用较为广泛的JDBC、JMS、Servlet等组件)被Oracle扫地出门,全部打包赠送给Eclipse基金会,并且不能使用Java商标,并且更名为Jakarta EE。
2018年9月25日,JDK 11发布,这也是一个LTS(long-term support)版本,包含17个JEP,同时被引入的还有ZGC这样革命性的垃圾收集器,好比G1的诞生,比G1又更具神秘感。同时Oracle也调整了JDK的授权许可证,把以前的商业许可证授权给OpenJDK,官方宣布同时发布两个JDK,一个是Oracle OpenJDK,一个是OracleJDK,共享大部分源码近乎一致,个人均可免费使用,OpenJDK有半年的更新支持,OracleJDK商用必须付费,且支持三年的更新。
2018年10月,JavaOne 2018在旧金山举行,此前没有人想过这会是最后一届JavaOne大会,这个在 1996年伴随着Java一同诞生、成长的开发者年度盛会,竟是Oracle下一个裁撤的对象,此外还有 Java Mission Control的开发团队,也在2018年6月被Oracle解散。
2019年3月20日,JDK 12发布,RedHat接手了OpenJDK 8和OpenJDk 11的管理和维护权。在JDK 12中包含了8个JEP,主要有Switch表达式和JMH测试套件,最引人注目的就是Shenandoah垃圾收集器,作为首个在JDK 7以后非Oracle开发的垃圾收集器,其目标与ZGC一致,这种竞争关系,立马得到了Oracle的**,在OracleJDK中剔除代码,因此Oracle JDK和OpenJDK的隔离性又如历史在JDK9中开始重演,至于后续Java的发展,以及迎接的挑战也是任重而道远,这取决于Oracle的产品线的定制和JCP的决策了。
2019年在9月17日,JDK 13发布,这个版本主要通过改善Java SE平台和JDK的性能,稳定性和安全性来提高开发人员的生产力。主要带来了 ZGC 增强、更新 Socket 实现、Switch 表达式,文本块更新等方面的改动、增强。
2020年3月17日,JDK 14发布,这个版本主要是对JDK历史版本的一些增强,也引入了一些新增的功能。主要包括:模式匹配、Java打包工具、G1支持NUMA(non-uniform memory access)、JRF事件流、指向NVM的MappedByteBuffer、Switch表达式、ZGC、删除CMS垃圾回收器、文本块等16项特性的优化增强或预览版本。
2020年9月15日,JDK 15发布,按照规划路线,JDK 14也停止更新,JDK 15虽然不是LTS版本,但也引入了一些开创性的功能和对早期版本功能的一些优化。主要包括:文本块、隐藏类、外部内存访问 API ,以及密封类和记录的预览等14项优化增强或预览版本。
2021年3月16日,JDK 16发布,这部分依旧是一些功能的优化升级。主要包括:模式匹配 for instanceof、Records语法糖、 jpackage 打包工具、Elastic Metaspace弹性元空间、ZGC等17项优化增强或新特性预览。
2021年9月14日,JDK17发布,这也是在JDK 11之后的下一个LTS版本,JDK 17也是Java六个月发布节奏下的最新的长期支持(LTS)发布,主打安全、性能、稳定为特性,并且官方计划支持到2029年9月。主要包括:文本块、switch表达式、record关键字、sealed classes密封类、instanceof模式匹配、Helpful NullPointerExceptions、日期周期格式化、精简数字格式化支持、Stream.toList()简化等14个JEP更新。
2022 年3月22日,JDK18发布,Java 18 提供了服务提供者接口、简单的 Web 服务器、矢量 API、代码片段、使用方法句柄重新实现核心反射、默认为 UTF-8 字符集、Foreign Function & Memory API (第二孵化器)、switch 语句的模式匹配(第二次预览)、以及完成了对 finalization 的弃用等九个JEP的更新和改进。
2022年9月20日,JDK19发布,具有结构化并发、虚拟线程、switch表达式的模式匹配、vector API 和 Linux/RISC-V 端口等特性。
2023 年3月21日,JDK20发布,具有作用域值、记录模式、switch模式匹配、外部函数和内存API、虚拟线程、结构化并发、向量API等七种新功能的孵化或预览版本
按照官方计划,2023年9月,即将迎来又一个LTS版本的JDK21,不知道还会给我们带来哪些新特性,让我们拭目以待。
Oracle收购Sun是Java发展历史上一道明显的分界线。在Sun掌舵的前十几年里,Java获得巨大成功,同时也渐渐显露出来语言演进的缓慢与社区决策的老朽;而在Oracle主导Java后,引起竞争的同时也带来新的活力,Java发展的速度要显著高于Sun时代。Java的未来是继续向前、再攀高峰,还是由盛转衰、锋芒挫缩,你我拭目以待。 Java面临的危机挑战前所未有的艰巨,属于Java的未来也从未如此充满想象与可能。
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.bianchenghao6.com/h6javajc/25927.html