聊聊JDK1.0到JDK20的那些事儿 | 京东云技术团队

news2024/11/26 22:30:44

1.前言

最近小组在开展读书角活动,我们小组选的是《深入理解JVM虚拟机》,相信这本书对于各位程序猿们都不陌生,我也是之前在学校准备面试期间大致读过一遍,emm时隔多日,对里面的知识也就模糊了。这次开始的时候从前面的JDK发展史和JVM虚拟机家族着手,之前都是粗略读过,这次通过查阅相关资料并收集在每一个JDK版本演化期间所发生的的一些趣闻,发现还是比较有意思的,以下是关于有关JDK发展史的总结分享。

2.JDK各版本特性及趣闻

•JDK版本演变及各版本特性

image.png

◦JDK 1.0 (1996):

▪包含Java语言、Java类库和Java虚拟机。支持图形用户界面(GUI)、数据库连接(JDBC)等功能。

“Oak” 是 Java 语言的前身,由于“Oak”这个名称已经被其他公司使用了,因此在1995年,Java 的创造者——Sun 公司决定将其改名为“Java”。 据说,这个名称是来自于一家咖啡店。当时,在设计 Java 语言的时候,创始团队成员到一家咖啡店买咖啡时,发现这家咖啡店的名字叫做“Java Coffee”,于是决定以“Java”作为新的名称。

◦JDK 1.1 (1997-2):

▪增加了内部类、JavaBeans、远程方法调用(RMI)等功能。

JDK 1.2 / Java 2 (1998-12):

▪引入了Swing组件、反射机制和动态代理、集合框架、Java 2D和Java 3D图形等特性。

这是Java SE第一个真正具有商业价值的版本。该版本引入了Java命名空间(namespace)等特性,使得Java应用程序能够更好地组织和管理。在此阶段并存过三个虚拟机,Classic VM、HotSpot VM和Exact VM,其中HotSpot在1999年4月诞生。

◦JDK 1.3 (2000-5):

▪增加了Java平台的功能、底层类库、增强了AWT和Swing用户界面等。

当时Sun公司正在面对来自Microsoft的严峻挑战,后者推出了.NET框架,试图颠覆Java的地位。因此,Sun公司决定加快Java的开发速度,增强其竞争力。

JDK 1.4LST (2002-2):

▪引入Java管理扩展(JMX)、新的I/O API,称为NIO(New I/O)、断言、内置的XML解析器(SAX和DOM)等特性。

这是Java SE中功能最全面的版本之一。该版本引入了NIO和XML解析器等新特性,提高了Java程序的性能和扩展性。

JDK 5.0 / Java 1.5 (2004-9):

▪引入了泛型、枚举类型、自动装箱和拆箱、注解、并发编程API等特性。

这是Java SE中功能最丰富的版本之一。该版本引入了泛型、类型安全的枚举、自动装箱/拆箱和注解等新特性,使得Java程序的编写更加简洁和精简。 Sun公司从这个版本开始放弃了谦逊的“JDK 1.x”的命名方式,将产品版本号修改成了“JDK x”。Sun 公司这样做的原因是,从 JDK 5.0 开始,Java 平台的发布计划每年发布一个版本,为了避免版本号混淆,同时更好地传达 Java 平台的快速迭代和更新,采用了新的命名方式。

◦JDK 6 (2006-12):

▪引入了JDBC 4.0 API、Java监视与管理控制台(JConsole)、增加了对动态语言的支持、改进的GUI工具包(Swing)、改进的Java Web Start、改进的性能与安全性等特性。

JDK的更新没有能够继续维持两年发布一个主版本的研发速度,这导致了JDK 6的生命周期异常的长。 Java 6 在银行等体系使用比较多可能有以下几个原因:

稳定性高:Java 6 是一个相对成熟和稳定的版本,由于经过多年的实践和测试,已被广泛认可并得到了验证,符合金融行业对稳定性的要求。虽然 Java 7 和 Java 8 等新版本带来了更多的功能和优化,但这些功能并不是每个银行都需要,而且新版本的稳定性也需要一定时间的验证和检验。

可控性强:银行等体系对软件的可控性要求非常高,需要确保软件能够稳定运行,并具备良好的可维护性。在这个方面,Java 6 较新的特性和更新也相对较少,使其相对容易维护和掌控。

成本考虑:对于一些大型机构,升级到最新的 Java 版本可能需要付出巨大的成本。例如,需要修改现有的代码和应用程序、重新测试和审计等。另外,许多旧系统都还在运行 Java 6,升级到新版本需要重新评估风险和效益,这也需要额外的成本和投入。

总之,Java 6 在银行等体系中使用较多是由于其稳定性、可控性和成本方面的考虑。然而,随着时间的推移和新版本的推出,银行等体系也需要逐步升级到更先进的 Java 版本,以满足业务的需求和提高运行效率。

此外,虽然 Java 7 和 Java 8 带来了更多的新特性和优化,但是在银行等体系中升级到新版本需要付出巨大的成本,例如重新编写和测试代码、重新评估安全性等,这也是银行等企业将 Java 6 作为开发平台的一大原因。

◦JDK 7 (2011-7):

▪引入了switch语句的字符串表达式形式、二进制字面量和下划线数字表示法、Try with Resources语句等特性。

在JDK 7开发期间,Sun公司相继在技术竞争和商业竞争中陷入泥潭,公司的股票 市值跌至仅有高峰时期的3%,已无力推动JDK 7的研发工作按计划继续进行。为了尽快结束JDK 7长期跳票的问题,Oracle收购Sun公司后随即宣布马上实行“B计划”,大幅裁剪了JDK 7预定目标,以保证 JDK 7的正式版能够于2011年7月28日准时发布。

JDK 8LST (2014-3):

◦引入了Lambda表达式、Stream API、Date/Time API、接口默认方法、方法引用、重复注解、Optional 类、Nashorn JavaScript 引擎等特性。

这是Java SE中最重要的版本之一,引入了Lambda表达式、Stream API、Default方法、DateTime API等新功能,极大地提高了Java程序的编写效率和开发效率。 原定于2013年9月发布,最终还是跳票到了2014年3月18日,从JDK 8开始,Oracle启用JEP(JDK Enhancement Proposals)来定义和管理纳入新版JDK发布范围的功能特性。

JDK 9 (2017-9):

◦引入了模块化系统、JShell、HTTP/2客户端和服务器端API等特性。

发版节奏变更:以后JDK将会在每年的3月和9月各发布一个大版本、每6个JDK大版本中才会被划出一个长期支持(Long Term Support,LTS)版,只有LTS版的JDK能够获得为期3年的支持和更新,JDK 8和JDK 11会是LTS版。 再下一个就到2021年发布的JDK 17 了。

◦JDK 10 (2018-3):

▪引入了局部变量类型推断、改进了Javadoc等特性。

2018年3月27日,Android的Java侵权案有了最终判决,法庭裁定Google赔偿Oracle合计88亿美元,要知道2009年Oracle收购Sun也就只花了74亿,收购完成后随即就用Sun的专利把Google告上了法庭,经过Oracle法务部的几轮神操作,一场官司的赔偿让收购Sun公司等同免费。

JDK 11LST (2018-9):

▪引入了HTTP Client API(HTTP 客户端API)、Nest-Based Access Control(基于嵌套的访问控制)、Flight Recorder(飞行记录器)、Epsilon GC(Epsilon垃圾回收器)改进的ZGC(Z Garbage Collector)等特性。

这是Java SE中长期支持版本中最新的一个版本,引入了HTTP客户端、Local-Variable Syntax for Lambda Parameters、ZGC等新功能,具有重要的实用价值。 2018年10月,最后一届JavaOne2018在旧金山举行,这个1996年伴随Java一同诞生、成长的开发者年度盛会落下帷幕。此外Java Mission Control(Java Mission Control (JMC)是一个由 Oracle 公司开发的用于监视、管理和分析 Java 应用程序的工具。)开发团队也于6月被Oracle解散。

◦JDK 12(2019年3月):

▪引入了Switch表达式预览功能、微基准测试套件等特性。

2019年2月,在JDK 12发布前夕,Oracle果然如之前宣布那样在六个月之后就放弃了对上一个版本OpenJDK的维护,RedHat同时从Oracle手上接过OpenJDK 8和OpenJDK 11的管理权利和维护职责。

◦JDK 13(2019年9月):

▪引入了文本块预览功能、动态CDS归档等特性。

◦JDK 14LST(2020年3月):

▪引入了实例模式匹配预览功能、非易失性内存支持等特性。

◦JDK 15(2020年9月):

▪引入了密封类预览功能、Edwards-Curve数字签名算法等特性。

◦JDK 16(2021年3月):

▪引入了记录类预览功能、向量API等特性。

JDK 17LST(2021年9月):

▪长期支持版本,引入了模式匹配、密封类等正式特性。

◦JDK 18(2022年3月):

▪引入简单的web服务器、支持在Java API文档中加入代码片段、制定UTF-8作为Java API的默认字符集。

◦JDK 19 (2022年9月):

▪引入结构化并发的API来简化多线程的编程、支持虚拟线程等。

◦JDK 20LST (2023年3月):

▪引入记录模式、Switch模式匹配等。

3.当前市面JDK版本使用情况

New Relic近日发布了一份《2023 年 Java 生态系统状况报告》,这份报告收集了上百万份线上的应用程序的数据,统计了目前生产环境中使用最多的JDK版本,最受欢迎的JDK供应商以及容器等的相关数据。

image.png

目前市面上有超过56%的应用程序使用了JDK 11,而相比之下,Java 8 的使用从2020年的84%降低到了现在的32%左右,大部分公司在这三年之间都升级到了JDK 11 或者 JDK 17这两个LTS版本上面。

image.png

在JDK 的厂商上面,Amazon这两年的增长量是比较大的,从22%上升到了31%,是目前市面上的各个JDK厂商中占比最高的。

4.总结

ok,以上就是截止目前所有的JDK版本及有关特性的简要介绍,原本对各个版本的特性整理了一张脑图,里面有详细的相关介绍,但是这块如果全部都放到文章里面会显得过于冗长,emm,其实目前我们使用的JDK还是JDK8,前段时间通过对JDK的调研还对JDK9中的模块化和JDK19中的虚拟线程进行了学习并使用实际demo对使用场景进行了验证,相关分析会在后续文章进行介绍。

ps:文章末尾附录一张脑图照片~

作者:京东科技 宋慧超

来源:京东云开发者社区 转载请注明出处

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/881100.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

zookeeper未授权访问漏洞处理

方法一:设置指定ip访问 a、登陆zookeeper:./zkCli.sh -server :(ps:需cd到zookeeper的bin目录下执行) b、查看当前权限:getAcl /(ps:默认为’world,anyone) c、添加可访问IP:setAcl / ip:192.16…

HCIP-OpenStack搭建

1、OpenStack概述 OpenStack是一种云操作系统,OpenStack是虚拟机、裸金属和容器的云基础架构。可控制整个数据中心的大型计算、存储和网络资源池,所有资源都通过API或Web界面进行管理。 为什么称OpenStack是云操作系统? 云一般指云计算&…

中间件(二)dubbo负载均衡介绍

一、负载均衡概述 支持轮询、随机、一致性hash和最小活跃数等。 1、轮询 ① sequences:内部的序列计数器 ② 服务器接口方法权重一样:(sequences1)%服务器的数量(决定调用)哪个服务器的服务。 ③ 服务器…

C 内存分配器 mimalloc

有论文 … … https://www.microsoft.com/en-us/research/publication/mimalloc-free-list-sharding-in-action/ 可以减少内存碎片,微软研究院2019 年开源出的内存分配器 代码,适配linux

YOLOv5改进系列(21)——替换主干网络之RepViT(清华 ICCV 2023|最新开源移动端ViT)

【YOLOv5改进系列】前期回顾: YOLOv5改进系列(0)——重要性能指标与训练结果评价及分析 YOLOv5改进系列(1)——添加SE注意力机制 YOLOv5改进系列(2

AI周公解梦-在线AI解梦大师

AI周公解梦-在线AI解梦大师 废话不多啥,直接上效果图 展示链接https://zuowen.toolxq.com/front/ai/jiemeng/jiemeng 梦是人类心灵深处的奇妙现象,它们在科学、文化和心理层面都具有重要的意义和启发。以下是关于梦对个人的意义和启发的一些观点&#x…

Markdown使用笔记

Markdown使用笔记 一、段落与强调 important denotes the impossible thing to do Because your ugly appearance, you cannot have a happy ending. 使用*括起来的为斜体 使用**括起来的是粗体 使用~~括起来的是删除线 在句子后面添加<br>即可换行 二、标题 在…

HD Supply EDI 项目案例

HD Supply Inc.是一家总部位于美国的工业分销公司。该公司成立于1983年&#xff0c;总部位于佐治亚州亚特兰大市。它主要提供广泛的工业产品、设备和解决方案&#xff0c;涵盖建筑、能源、制造、设施维护等多个行业。其产品和服务包括管道、阀门、暖通空调设备、电气设备、工具…

java对象和json类型转换

fastjson参考 参考&#xff1a;http://doc.yaojieyun.com/www.runoob.com/w3cnote/java-json-instro.html 参考&#xff1a; http://doc.yaojieyun.com/www.runoob.com/w3cnote/fastjson-intro.html 序列化&#xff1a;JSON.toJSONString(person)将Java 对象转换为 JSON 字符串…

DNS服务器的搭建之初体验

第一步关闭防火墙 安装bind 启动服务&#xff0c;设置开机自动启动 安装vim 编辑修改/etc/resolv.conf文件&#xff0c;既修改本机的dns解析文件&#xff0c;增加我们自己的dns服务器地址 这里遇到问题了 这里我们需要重启启动网络服务 重启服务还是不行&#xff0c;那么重…

轻薄的ESL电子标签有哪些特性?

在智慧物联逐渐走进千万家的当下&#xff0c;技术变革更加日新月异。ESL电子标签作为科技物联的重要组成部分&#xff0c;是推动千行百业数字化转型的重要技术&#xff0c;促进物联网产业的蓬勃发展。在智慧零售、智慧办公、智慧仓储等领域&#xff0c;ESL电子标签在未来是不可…

使用GUI Guider工具开发嵌入式GUI应用(4)-使用image组件

使用GUI Guider工具开发嵌入式GUI应用&#xff08;4&#xff09;-使用image组件 文章目录 使用GUI Guider工具开发嵌入式GUI应用&#xff08;4&#xff09;-使用image组件引言在GUI Guider中创建image组件绑定图片在Keil工程中部署、编译和下载总结 引言 在没有使用LVGL和GUI …

【一场专属于开发者的盛会!】------NPCon2023 AI模型技术与应用峰会(北京站)

2023年8月12日&#xff0c;由CSDN官方举办的2023年-NPCon2023 AI模型技术与应用峰会(北京站)在北京格兰云天大酒店荣重召开&#xff01; 话不多说&#xff01;上图~~~ 目录 【会议展望】 【大咖宣讲】 【CSDN活动介绍】 【开谈环节&#xff0c;我有句话说】 【现场人气】…

linux 查看文件被那个进程所调用

使用lsof 命令 显示文件被哪个进程所占用 lsof /var/log/messagesCOMMAND&#xff1a;进程的名称PID&#xff1a;进程标识符USER&#xff1a;进程所有者FD&#xff1a;文件描述符&#xff0c;应用程序通过文件描述符识别该文件。如cwd、txt等TYPE&#xff1a;文件类型&#…

uni——初次加载问题处理(赋值后再调用)

案例描述 此案例中 一进页面接收good_id并调用接口&#xff0c;这个流程正常。 这个changeNum也是一进页面就触发了&#xff08;组件购物车加减自带&#xff09;&#xff0c;且触发的顺序在onload赋值id之前&#xff0c;这时候good_id还是为空&#xff0c;所以接口报错。如何处…

AMD fTPM RNG的BUG使得Linus Torvalds不满

导读因为在 Ryzen 系统上对内核造成了困扰&#xff0c;Linus Torvalds 最近在邮件列表中表达了对 AMD fTPM 硬件随机数生成器的不满&#xff0c;并提出了禁用该功能的建议。 因为在 Ryzen 系统上对内核造成了困扰&#xff0c;Linus Torvalds 最近在邮件列表中表达了对 AMD fTPM…

第4章 微服务框架主体搭建

mini商城第4章 微服务框架主体搭建 一、课题 框架搭建 二、回顾 1、整体业务功能分析 2、根据业务需求设计表结构及字段 三、目标 1、版本控制器的搭建使用 2、能独立自主的搭建微服务框架 3、学会考虑一些公共的工具组件 4、网关模块的应用 四、内容 第1章 版本控…

nodejs+vue+elementui电影订票网站系统_wqc3k

电影订票系统在国内有很多值得借鉴的例子&#xff0c;功能也都趋于完善&#xff0c;因此此次电影订票系统将轻量化开发&#xff0c;要完成以下功能&#xff1a; &#xff08;1&#xff09;要支持完整的用户注册&#xff0c;登录功能&#xff0c;账号的管理通过管理员来实现。 &…

推断统计中非参数检验之卡方检验、列联表分析和游程检验

一、&#xff08;卡方检验&#xff09;&#xff1a;赛马比赛的赛道会影响成绩吗 这里以一个实例赛马比赛的赛道是否会影响成绩为例&#xff0c;实际就是检验获胜频数与期望频数之间有无显著性差异。 import pandas as pdstep1 调用包 from scipy.stats import chisquare impor…