JDK版本详解

Oracle JDK 和 OpenJDK 的对比

  1. Oracle JDK版本将每三年发布一次,而OpenJDK版本每三个月发布一次;
  2. OpenJDK 是一个参考模型并且是完全开源的,而Oracle JDK是OpenJDK的一个实现,并不是完全开源的;
  3. Oracle JDK 比 OpenJDK 更稳定。OpenJDK和Oracle JDK的代码几乎相同,但Oracle JDK有更多的
    类和一些错误修复。因此,如果您想开发企业/商业软件,我建议您选择Oracle JDK,因为它经过 了彻底的测试和稳定。某些情况下,有些人提到在使用OpenJDK 可能会遇到了许多应用程序崩溃 的问题,但是,只需切换到Oracle JDK就可以解决问题;
  4. 在响应性和JVM性能方面,Oracle JDK与OpenJDK相比提供了更好的性能;
  5. Oracle JDK不会为即将发布的版本提供长期支持,用户每次都必须通过更新到最新版本获得支持来 获取最新版本;
  6. Oracle JDK根据二进制代码许可协议获得许可,而OpenJDK根据GPL v2许可获得许可。

jdk新版本中都有哪些新特性

jdk 5 泛型
jdk8中推出了lambda表达式,stream,optional,新时间日期API等
jdk9中推出了模块化
jdk10中推出了本地变量类型推断
jdk12中增加了switch表达式
jdk13中增加了textblock
jdk14中增加了records
dk14中增加了instance模式匹配
jdk15中增加了封闭类
jdk17中扩展了switch模式匹配
jdk19中增加了协程

Java Development Kit(JDK)是Java编程语言的开发工具包。JDK的每个版本都会引入新的特性和改进,下面是主要的JDK版本及其主要特性:
JDK 1.0 (1996):第一个版本,包含基础类库、AWT、I/O、网络和字符串处理。
JDK 1.1 (1997):引入了JDBC、RMI、反射、JavaBeans、国际化和新的事件模型。
JDK 1.2 (1998):引入Swing、集合框架、JIT编译器、Java Plug-in、Java IDL、CORBA支持和安全管理器。
JDK 1.3 (2000):改进了RMI、JNDI、JavaSound、HotSpot JVM和支持CORBA。
JDK 1.4 (2002):引入了断言、正则表达式、NIO(新输入/输出)、日志记录、XML解析(JAXP)、Java Web Start和图像I/O API。
JDK 5 (2004):引入泛型、增强的for循环、自动装箱/拆箱、类型安全的枚举、静态导入、元数据(注解)、可变参数和并发工具(java.util.concurrent)。
JDK 6 (2006):改进了Web服务支持(JAX-WS)、脚本引擎(JSR 223)、桌面客户端性能(SwingWorker、桌面类库)、编译器API(JSR 199)和对Pluggable注解处理(JSR 269)的支持。
JDK 7 (2011):引入了Project Coin的许多小改进,如Switch语句支持字符串、泛型类型推断(菱形操作符)、多捕获异常、try-with-resources语句、二进制字面量、下划线分隔符和NIO.2文件系统API。
JDK 8 (2014):引入了Lambda表达式、流API、默认方法、新的日期和时间API(java.time)、重复注解、类型注解和Nashorn JavaScript引擎。
JDK 9 (2017):引入模块系统(Project Jigsaw)、JShell(交互式REPL)、改进的Javadoc、新的HTTP/2客户端API、多版本兼容的JAR文件、集合工厂方法和改进的进程API。
JDK 10 (2018):引入局部变量类型推断(var关键字)、并行Full GC、基于时间的版本控制和Root Certificates。
JDK 11 (2018):引入了新的字符串方法(如strip、repeat、lines)、HttpClient(标准化)、ZGC(实验性)、单文件源代码程序、lambda参数局部变量语法和对多版本兼容的JAR文件的改进。
JDK 12 (2019):引入了Switch表达式(预览)、Default CDS归档、Shenandoah GC(实验性)、微基准套件(JMH)和支持Abortable Mixed Collections for G1。
JDK 13 (2019):引入文本块(预览)、动态CDS归档、重新实现的Socket API和ZGC改进。
JDK 14 (2020):引入了Switch表达式(标准)、记录(预览)、Pattern Matching for instanceof(预览)、NullPointerException诊断和Foreign-Memory Access API(预览)。
JDK 15 (2020):引入了Sealed Classes(预览)、隐藏类、外部记忆访问API(第二次预览)、ZGC改进和文本块(标准)。
JDK 16 (2021):引入了Records(标准)、Pattern Matching for instanceof(标准)、强封闭的类、迁移到Git和新的Vector API(孵化器)。
JDK 17 (2021):长期支持(LTS)版本,引入了Sealed Classes(标准)、Foreign Function & Memory API(孵化器)、新HttpClient API和一些弃用和移除的功能。
JDK 18 (2022):引入了UTF-8作为默认字符集、新的Simple Web Server、Code Snippets in Java API文档、Vector API第二个孵化器版本、外部函数和内存API(第二个孵化器)和对Internet-Address Resolution SPI的改进。
JDK 19 (2022):引入了项目Loom(轻量级线程和虚拟线程),改进的Vector API和外部函数和内存API的更新。
JDK 20 (2023):包含了一些预览和孵化器功能的增强,例如面向模式的switch、记录模式匹配、封闭类和模式匹配的改进。
JDK 21 (2023):长期支持(LTS)版本,继续改进轻量级线程和虚拟线程,增强性能和稳定性,改进开发者工具。
这些版本引入了各种新特性和改进,极大地提高了Java编程的效率和能力。选择合适的JDK版本进行开发非常重要,特别是对于企业级应用程序,通常会选择长期支持(LTS)版本以确保稳定性和长期支持。

jdk 5
引入泛型;
增强循环,可以使用迭代方式; 自动装箱与自动拆箱;
类型安全的枚举;可变参数;静态引入;元数据(注解);引入Instrumentation。
Java 6
• 支持脚本语言;
• 引入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;
• 做了很多优化。
Java7
(或Java 7)引入了许多新特性和改进,以下是其中一些主要的特性:

  1. Diamond语法: 允许在实例化泛型类时不需要重复指定泛型参数类型,编译器可以推断出实际的类型。
  2. try-with-resources语句: 引入了 try-with-resources 语句,简化了对实现了 AutoCloseable 接口的资源进行管理的代码编写。
  3. 字符串在switch语句中的支持: 在 switch 语句中可以使用字符串作为 case 值,而不仅仅局限于整数类型或枚举类型。
  4. 改进的异常处理: 引入了多个异常捕获块的支持,允许捕获不同类型的异常并分别处理。
  5. NIO.2(Java NIO的改进): 引入了一些新的I/O操作特性,包括文件系统访问、文件属性修改、符号链接支持等。
  6. Fork/Join框架: 引入了用于并行处理任务的 Fork/Join 框架,有助于利用多核处理器的性能优势。
  7. TWR(Type Inference for Generic Instance Creation): 允许通过 new 表达式创建对象时,省略泛型类型。
  8. 其他语言级改进: 包括二进制字面量、下划线在数字字面量中的使用、增强的方法调用语法等。
    Java 8
    其中最为核心的是Lambda表达式和Stream API
    • 函数式接口
    • Lambda表达式
    • 接口的增强
    1、Lamdba表达式
    2、函数式接口
    3、方法引用和构造引用
    4、Stream API
    5、接口中的默认方法和静态方法
    6、新时间日期API:加强对日期与时间处理
    7、OPtional:Optional 类已经成为 Java 8 类库一部分,用来解决空指针异常
    8、其他特性
    Java8中两个最为重要特性:第一个的是Lambda表达式,另一个是Stream API。
    StreamAPI它位于java.util.stream包中,StreamAPI帮助我们更好地对数据进行集合操作,它本质就是对数据的操作进行流水线式处理,也可以理解为一个更加高级的迭代器,主要作用是遍历其中每一个元素。,StreamAP提供了一种高效且易于使用的处理数据方式
    2、Stream特点:
    1、Stream自己不会存储数据。
    2、Stream不会改变源对象。相反,它们会返回一个持有结果的新Stream对象
    3、Stream操作时延迟执行的。这就意味着它们等到有结果时候才会执行。
    和list不同,Stream代表的是任意Java对象的序列,且stream输出的元素可能并没有预先存储在内存中,而是实时计算出来的。它可以“存储”有限个或无限个元素。
    例如:我们想表示一个全体自然数的集合,使用list是不可能写出来的,因为自然数是无线的,不管内存多大也没法放到list中,但是使用Sream就可以
    1、速度快;
    2、代码少、简介(新增特性:lamdba表达式);
    3、强大的Stream API;
    4、使用并行流和串行流;
    5、最大化较少空指针异常Optional;

Java 9
对 String 的内部实现进行了一项改进,称为 Compact Strings(紧凑字符串)
Java JDK 9 中并没有将 String 的内部表示从 char[] 改为 byte[]。String 在 Java 中仍然使用 char[] 来存储字符串的字符内容。
然而,在 JDK 9 中,对 String 的内部实现进行了一项改进,称为 Compact Strings(紧凑字符串)。这个改进是为了节省 String 对象的内存使用,特别是在存储包含大量 Latin-1(ISO-8859-1)字符的字符串时。
在 JDK 8 及之前的版本中,每个 char 对象占用 2 个字节的内存空间,无论是存储 ASCII 字符还是 Unicode 字符。然而,ASCII 字符只需要占用 1 个字节的存储空间就足够了。为了解决这个内存使用问题,JDK 9 中将 String 类的内部表示方式更改为使用 byte[] 存储 Latin-1 字符串,并且添加了额外的标记来区分 Latin-1 字符串和非 Latin-1 字符串。
这种改进使得 String 对象可以根据存储的字符内容类型来选择更加经济高效的内部表示方式,从而在存储 Latin-1 字符串时占用更少的内存。这对于那些包含大量 ASCII 字符的应用程序和系统,可以显著减少内存占用。
需要注意的是,这种改进是对 String 内部实现的优化,对于开发者而言,不会对代码编写和使用 String 产生明显的影响。我们仍然可以正常地使用 String 类来处理字符数据,而无需关心内部的具体实现细节。
为何JDK9要将String的底层实现由char[]改成byte[]?
JDK 版本更新、性能和内存优化的了解,对字符编码的认知以及对代码兼容性的考虑
实际上,JDK 9 并没有将 String 的底层实现由 char[] 改成 byte[]。String 类的底层实现仍然使用的是 char[],即字符数组。
然而,在 JDK 9 中,引入了 Compact Strings 特性,这是一项优化技术,旨在减少 String 对象所占用的内存空间。在此之前,Java 使用 UTF-16 编码来表示字符串,每个字符占用两个字节(char 类型)。这对于大部分英文字符来说是浪费的,因为它们可以用一个字节(byte 类型)来表示。
Compact Strings 特性的目标是将只包含拉丁字符的字符串以字节数组(byte[])的形式进行存储,从而节省内存。这样,在只包含 ASCII 字符的字符串中,每个字符只需要占用一个字节,而不再浪费两个字节。
但是需要注意的是,这种优化只适用于只包含拉丁字符的字符串,当字符串中存在其他字符时,仍然会使用 char[] 来存储。这是因为 UTF-16 编码是一种变长编码,可以表示所有 Unicode 字符,包括拉丁字符以外的字符。
综上所述,JDK 9 并没有将 String 的底层实现由 char[] 改成 byte[],而是引入了 Compact Strings 特性来优化只包含拉丁字符的字符串的存储方式,节省内存。

JDK 11
JDK 11相对于JDK 8引入了多项新功能和改进。以下是JDK 11相对于JDK 8的一些主要区别:

  1. 新的HTTP客户端:JDK 11引入了java.net.http包,提供了一个现代化的、非阻塞的HTTP客户端,支持HTTP/2和WebSocket。
  2. Epsilon垃圾收集器(实验性):JDK 11引入了一种实验性的垃圾收集器,称为Epsilon,它适用于不关注内存回收性能的测试和短暂任务。
  3. 动态类文件常量:JDK 11允许将常量放入类文件中,以提高字节码的动态性和灵活性。
  4. 预测性G1垃圾收集器:JDK 11在G1垃圾收集器中引入了一些改进,以提供更可靠和确定性的停顿时间。
  5. 单元测试框架改进:JDK 11集成了JUnit单元测试框架,并引入了新的测试特性和工具。
  6. 本地变量类型推断:JDK 11增强了Java编译器,使其能够根据上下文自动推断局部变量的类型。
  7. Unicode 10支持:JDK 11支持Unicode 10版本,包括符号和字符集的更新。
  8. TLS 1.3支持:JDK 11添加了对TLS 1.3协议的支持,提供更快、更安全的加密通信。
  9. 增强的性能:JDK 11引入了各种性能优化和改进,包括减少JIT编译时间、提高G1垃圾收集器的效率等。
    这只是JDK 11相对于JDK 8的一些重要区别。JDK 11还有其他许多细小的改进和新功能。如果你需要更详细的信息,建议查阅Oracle官方文档或JDK 11的发行说明。需要注意的是,每个Java版本都有自己的特性和改进,选择适合你项目需求的最新版本是明智的选择。

JDK 17
截至目前(2023年8月28日),JDK的最新版本是JDK 17。JDK 17于2021年9月14日发布,它是一个长期支持(LTS)版本,并提供了许多新功能、改进和安全性增强。如果您想获取最新的JDK版本,请访问Oracle官方网站或OpenJDK项目的官方网站,以确保您获取到最新的稳定版本。请注意,未来可能还会发布更高版本的JDK,建议您及时关注并进行更新。

JDK 17是一个重要的版本,引入了许多新功能和改进。以下是JDK 17的一些主要新特性:

  1. 嵌套的本地变量类型推断(Nested Local Variable Type Inference):允许在lambda表达式、匿名内部类和for循环中使用var关键字来推断局部变量的类型。
  2. 基于Pattern Matching的switch语句(Pattern Matching for Switch):通过在switch语句中使用模式匹配,可以更方便地编写和匹配多个条件。
  3. Sealed类(Sealed Classes):引入了一种新的类修饰符sealed,用于限制哪些类可以继承或实现某个类或接口,从而提供更严格的类层次结构控制。
  4. 垃圾回收器接口(Garbage Collector Interface):为了促进垃圾回收器的开发和插件化,引入了一组接口和抽象类,使开发人员可以实现自定义的垃圾回收器。
  5. 基于x86的向量API(Vector API):通过引入一组新的类和接口,支持在Java中编写基于SIMD(Single Instruction, Multiple Data)指令集的并行代码,从而提高向量化操作的性能。
  6. 基于OpenJDK的源代码移植(JEP 391):该JEP(JDK Enhancement Proposal)使得OpenJDK的源代码更易于在不同平台上进行移植和构建。
    这些只是JDK 17中的一些新特性和改进,还有其他一些JEP(JDK Enhancement Proposal)也包含在其中。您可以参阅官方文档或JDK 17的发布说明,以获取更详细的信息。

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

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

相关文章

多源字段聚合重塑算法

要求如下 [[{"oone": "评估是否聘请第三方机构","otwo": null,"othree": "test",},{"oone": "评估是否聘请第三方机构","otwo": null,"othree": "test",}],[{"oon…

python爬虫获取网易云音乐评论歌词以及歌曲地址

python爬虫获取网易云音乐评论歌词以及歌曲地址 一.寻找数据接口二.对负载分析三.寻找参数加密过程1.首先找到评论的请求包并找到发起程序2.寻找js加密的代码 四.扣取js的加密源码1.加密函数参数分析①.JSON.stringify(i0x)②bse6Y(["流泪", "强"])③bse6Y…

探索元宇宙:开启数字世界的奇妙之旅【小学生也能读懂】

元宇宙:数字新纪元的曙光 随着技术的飞速发展,我们正站在一个全新的数字时代的门槛上。元宇宙(Metaverse),这个听起来充满未来感的词汇,已经成为科技界的热门话题。它不仅仅是一个概念,更是一个…

C语言——字符串两种声明初始化方式、输入输出及常见处理函数

C语言中的字符串是一个字符数组,它以空字符(\0)作为结束标志。这意味着字符串中的字符是连续存储在内存中的,而字符串的末尾会自动添加一个\0字符来表示字符串的结束。这种表示方式使得C语言在处理字符串时非常灵活,但…

第1关 -- Linux 基础知识

闯关任务 完成SSH连接与端口映射并运行hello_world.py ​​​​ 可选任务 1 将Linux基础命令在开发机上完成一遍 可选任务 2 使用 VSCODE 远程连接开发机并创建一个conda环境 创建新的虚拟环境lm3 可选任务 3 创建并运行test.sh文件 参考文档 文档:https://g…

【MySQL-19】一文带你了解存储函数

前言 大家好吖,欢迎来到 YY 滴MySQL系列 ,热烈欢迎! 本章主要内容面向接触过C的老铁 主要内容含: 欢迎订阅 YY滴C专栏!更多干货持续更新!以下是传送门! YY的《C》专栏YY的《C11》专栏YY的《Lin…

ROS2中间件

ROS2 是重新设计的 Robot Operating System,无论从用户API接口到底层实现都进行了改进。这里主要关注ROS2 的中间件。 1. 通信模式 ROS2 使用DDS协议进行数据传输,并通过抽象的rmw,支持多个厂家的DDS实现(FastDDS,Cyc…

Python 和 R两者的主要区别和优缺点对比

有个问题,既然做模型调的还是python,那为啥很多人还用R呢? 这是一个很好的问题。Python 和 R 都是数据科学和统计分析领域中非常流行的编程语言,它们各有优缺点,选择哪种语言通常取决于具体的任务需求、个人或团队的技…

【链表】算法题(二) ----- 力扣/牛客

一、链表的回文结构 思路: 找到链表的中间节点,然后逆置链表的后半部分,再一一遍历链表的前半部分和后半部分,判断是是否为回文结构。 快慢指针找到链表的中间节点 slow指针指向的就是中间节点 逆置链表后半部分 逆置链表后半部分…

Java 如何实现单点登录案例详解

单点登录(SSO)是一种用户身份验证机制,允许用户在多个系统或应用程序中使用同一组登录凭据。从业务需求的角度来看,单点登录具有以下优势和必要性: 从业务需求的角度来看,单点登录具有以下优势和必要性&am…

梧桐数据库:数据库技术中表的统计信息技术详解

在数据库技术中,表的统计信息主要用于查询优化等方面,以下是对其的详细解释: 作用: 帮助查询优化器做出更合理的执行计划决策,以提高查询性能。 常见的统计信息类型: 行数(Row count&#xf…

Transformer是怎样处理序列数据的?

Transformer模型最初是一种广泛应用于自然语言处理(NLP)和其他序列建模任务的架构。它由编码器(encoder)和解码器(decoder)组成。 以下是Transformer模型输入和输出的详细介绍: 输入 1. 输入…

Pandas库学习之dataframe.corr()函数

Pandas库学习之dataframe.corr()函数 一、简介 dataframe.corr()是Pandas库中的一个函数,用于计算DataFrame中各列之间的相关系数。相关系数衡量的是两个变量之间线性关系的强度和方向,结果在-1到1之间,分别表示完全负相关和完全正相关。 二…

前端代码审查大纲

一、代码审查的目的 提升代码质量:代码审查可以发现代码中的错误、漏洞、不符合规范的地方,从而及时进行修正。这有助于提升代码的稳定性和可靠性,减少运行时出现的问题。 统一编码标准和风格:代码审查可以确保团队成员遵循统一的…

Maven学习——Maven的下载、安装与配置(详细攻略!)

目录 前言 1.下载与安装 2.配置Maven的环境变量 3.配置Maven的本地仓库 4. 配置Maven的镜像远程仓库 前言 我在之前写了一篇博客,是介绍Maven的基本概念和下载安装,但是由于篇幅过长,Maven的下载与安装写的并不详细🐶&#x…

TCP三次握手与四次挥手详解

1.什么是TCP TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的通信协议,属于互联网协议族(TCP/IP)的一部分。TCP 提供可靠的、顺序的、无差错的数据传输服务&…

TeamViewer手机端APP提示:请先验证账户

当你在手机端下载安装了TeamViewerAPP后,需要你先登录个人账号,然后还会要求你验证账户,同时跳转到一个网址中,但是这个网址并没有自动跳转到验证账户的位置。 解决办法: 在手机浏览器中进入下面这个网址:…

SpringCloudAlibaba-Seata2.0.0与Nacos2.2.1

一、下载 ## 下载seata wget https://github.com/apache/incubator-seata/releases/download/v2.0.0/seata-server-2.0.0.tar.gz## 解压 tar zxvf seata-server-2.0.0.tar.gz二、执行sql文件 ## 取出sql文件执行 cd /seata/script/server/db/mysql ## 找个mysql数据库执行三、…

分布式搜索引擎ES-elasticsearch入门

1.分布式搜索引擎:luceneVS Solr VS Elasticsearch 什么是分布式搜索引擎 搜索引擎:数据源:数据库或者爬虫资源 分布式存储与搜索:多个节点组成的服务,提高扩展性(扩展成集群) 使用搜索引擎为搜索提供服务。可以从海量…

算法基础之回溯法

本文将详细介绍回溯法的基本原理和适用条件,并通过经典例题辅助读者理解回溯法的思想、掌握回溯法的使用。本文给出的例题包括:N皇后问题、子集和问题。 算法原理 在问题的解空间树中,回溯法按照深度优先的搜索策略,从根结点出发…