当前位置: 首页 > news >正文

[java][jdk]JDK各个版本的核心特性

JDK 8至JDK 21的主要新特性概览:

JDK 8

  1. Lambda表达式:引入了函数式编程的特性,使得代码更加简洁和灵活。
  2. Stream API:提供了一种新的抽象,可以让你以声明性方式处理集合数据。
  3. 新的日期和时间API:引入了java.time包,提供了一套全新的日期和时间处理类。
  4. 接口默认方法和静态方法:允许在接口中定义具有默认实现的方法和静态方法。
  5. Optional类:用于解决空指针异常的问题,可以包装一个可能为空的对象,并提供一系列的操作来处理该对象。
  6. CompletableFuture类:用于异步编程,可以简化异步编程的复杂性。
  7. 并行数组操作:通过Arrays.parallelSort()方法引入了并行数组排序。
  8. 重复注解支持:允许在同一个声明上多次使用相同的注解类型。
  9. Base64编码和解码:在java.util包中提供了对Base64编码和解码的支持。

JDK 9

  1. 平台模块系统(Jigsaw项目):引入了模块化,使得应用程序可以更加轻量级。
  2. 接口私有方法:允许在接口中创建私有方法。
  3. Try-With Resources:扩展了try-with-resources语句,支持自动资源管理。
  4. @SafeVarargs注释:用于防止在泛型代码中可能发生的不安全操作。
  5. 集合工厂方法:提供了新的集合工厂方法,简化集合的创建。
  6. JShell:引入了JShell,一个交互式命令行工具,用于探索Java编程语言。
  7. 流API改进:对流API进行了改进,增强了数据处理能力。

JDK 10

  1. 局部变量类型推断:通过var关键字实现局部变量类型推断。
  2. G1垃圾回收器优化:对G1垃圾回收器进行了优化,提高了性能和减少了停顿时间。

JDK 12

  1. Shenandoah垃圾收集器:引入了Shenandoah GC,一个低延迟的垃圾收集器。
  2. switch表达式:扩展了switch语句,允许它作为表达式使用。

JDK 13

  1. Dynamic CDS Archives:简化应用程序部署,提高启动速度,并优化内存占用。
  2. ZGC和Shenandoah的改进:这两个垃圾收集器都专注于减少GC停顿时间,提高了并发性和适应性。

JDK 14

  1. 文本块(Text Blocks):提高了Java程序中以非Java语言编写的代码的字符串的可读性。
  2. 外部内存访问API(Foreign-Memory Access API):允许Java程序安全、高效地访问Java堆之外的外部内存。

JDK 15

  1. 支持Unicode 13.0:升级了Unicode,支持Unicode 13.0。
  2. CharSequence新增isEmpty方法:给CharSequence新增了isEmpty方法。
  3. TreeMap方法的Specialized Implementations:对TreeMap提供了putIfAbsent, computeIfAbsent, computeIfPresent, compute, merge方法的overriding实现。

JDK 16

  1. 记录类(Record):引入了记录类,提供了一种新的数据载体,简化了数据类的创建。
  2. 模式匹配增强:在switch表达式中进一步增强了模式匹配,简化了代码并提高了可读性。

JDK 17

  1. 密封类和接口:提供了更好的封装性和安全性。
  2. 新的垃圾收集器:引入了ZGC和Shenandoah垃圾收集器,以提供低延迟的垃圾收集。
  3. 模式匹配:增强了instanceof的表达能力。

JDK 18

  1. 集合API增强:新增加或改进的方法,可能包括更方便的创建和操作集合的方式,以及更高效的集合算法。
  2. 输入/输出API改进:对文件I/O和网络I/O进行改进,例如提供更高效的数据读写方式,或是更强大的异步处理能力。

JDK 19

        1. 平台模块系统(Jigsaw项目):这是Java平台模块系统的一个重要更新,旨在使应用程序更加轻量级,并将JDK本身划分为一组模块。

        2. 接口私有方法:允许在接口中创建私有方法,这有助于在非抽象方法之间共享公共代码。

        3. Try-With Resources:对try-with-resources语句进行了增强,允许使用final或等效于final的变量,而无需在try-with-resources语句中声明一个新变量。

        4. @SafeVarargs注释:改进了对泛型代码中潜在不安全操作的警告。

        5. 集合工厂方法:提供了新的集合工厂方法,简化了集合的创建。

        6. Process API改进:对Process API进行了更新,提供了更好的进程管理能力。

        7. 新版本字符串方案:引入了新的版本字符串方案,以支持模块化。

        8. JShell:javashell(REPL):引入了JShell,一个交互式命令行工具,用于探索Java编程语言。

        9. 流API改进:对流API进行了改进,增强了数据处理能力。

        10. 针对Microsoft Windows及更多应用程序的安装程序增强功能:提升了安装程序的用户体验和功能性。

        11. Compact Strings:通过JEP 254引入了Compact Strings,优化了字符串存储,减少了内存占用。

        12. Make G1 the Default Garbage Collector:通过JEP 248将G1垃圾收集器设置为默认垃圾收集器,以提高性能。

        13. Platform Logging API and Service:通过JEP 264引入了平台日志API和服务,提供了一个统一的日志接口。

        14. Reserved Stack Areas for Critical Sections:通过JEP 270引入了为关键部分保留的栈区域,优化了性能。

        15. Indify String Concatenation:通过JEP 280引入了标识字符串连接,优化了字符串拼接的性能。

        16. Spin-Wait Hints:通过JEP 285引入了旋转等待提示,提供了一种机制,通过标准化的方法向底层处理器传达线程处于自旋等待状态。

JDK 20

  1. Scoped Values(作用域值):允许在大型程序中的组件之间安全有效地共享数据,而无需求助于方法参数。
  2. 记录模式(Record Patterns):对record的值进行解构,也就是更方便地从记录类中提取数据。
  3. switch模式匹配:增强了switch语句的模式匹配能力。
  4. 外部函数和内存API:允许Java程序安全、高效地访问Java堆之外的外部内存。
  5. 虚拟线程:提供了一种新的轻量级线程实现,可以显著提高并发程序的性能和可伸缩性。
  6. 结构化并发:提供了一种新的方式来管理并发任务,使得并发编程更加安全和易于管理。
  7. 向量API:提供了一种新的API,用于在支持的CPU架构上进行向量计算。

JDK 21

  1. 字符串模板(String Templates):提供了一种更简洁、更直观的方式来动态构建字符串。
  2. 序列化集合(Sequenced Collections):提供了一种新的集合类型,支持元素的有序序列化。
  3. 分代ZGC(Generational ZGC):对ZGC垃圾收集器进行了优化,提高了性能。
  4. 记录模式(Record Patterns):进一步增强了记录模式,使得从记录类中提取数据更加方便。
  5. switch的模式匹配(Pattern Matching for switch):增强了switch语句的模式匹配能力。
  6. 外部函数和内存API(Foreign Function & Memory API):允许Java程序安全、高效地访问Java堆之外的外部内存。
  7. 虚拟线程(Virtual Threads):提供了一种新的轻量级线程实现,可以显著提高并发程序的性能和可伸缩性。

相关文章:

[java][jdk]JDK各个版本的核心特性

JDK 8至JDK 21的主要新特性概览: JDK 8 Lambda表达式:引入了函数式编程的特性,使得代码更加简洁和灵活。Stream API:提供了一种新的抽象,可以让你以声明性方式处理集合数据。新的日期和时间API:引入了jav…...

双十一”买买买!法官告诉你注意这些法律问题

“双十一”等购物节来临之际,某些电商平台为了吸引消费者提前下单预订商品,通过大力宣传付定金可享受更多优惠等方式开启预售模式。那么,如果消费者在支付定金后,因各种原因最终没有支付尾款,能否要求商家退还定金&…...

PyQt5

基于PyQt5的重绘机制实现加载页面 效果预览代码说明控件初始化超时回调重绘事件缩放事件 代码获取 效果预览 直接看图,效果展现为跟随黑点顺时针转动,且有明暗变化 代码说明 控件初始化 initUI主要用于初始化用户界面(UI)。它创建了一个具有特定样式…...

【Linux】常用命令(2.6万字汇总)

文章目录 Linux常用命令汇总1. 基础知识1.1. Linux系统命令行的含义1.2. 命令的组成 2. 基础知识2.1. 关闭系统2.2. 关闭重启2.3. 帮助命令(help)2.4. 命令说明书(man)2.5. 切换用户(su)2.6.历史指令 3.目录…...

Vue3-06_路由

路由 后台路由是根据请求url,匹配请求处理的后台模块(路径) 前台根据访问路径,决定显示的内容。 路由就是: 访问hash 与内容的对应关系 路由的工作方式 用户点击页面的路由链接导致url地址栏中的Hash值发生了变化前…...

物理验证Calibre LVS | SMIC Process过LVS时VNW和VPW要如何做处理?

SMIC家工艺的数字后端实现PR chipfinish写出来的带PG netlist如下图所示。我们可以看到标准单元没有VNW和VPW pin的逻辑连接关系。 前几天小编在社区星球上分享了T12nm ananke_core CPU低功耗设计项目的Calibre LVS案例,就是关于标准单元VPP和VBB的连接问题。 目前…...

量化分析工具日常操作日记-5-通合科技

使用量化分析微信小程序工具“梦想兔企业智能风险分析助手”日常操作日记-5-军工-通合科技(300491)。 周末国家新政策,要大力支持军工行业,我用工具挖掘了两个低位股,供大家参考。通合科技(300491&#xff…...

windows和linux验证MD5码方式

一、linux linux自带MD5码验证: $ md5sum target_file.txt 二、windows windows自带的MD5码验证: $ certutil -hashfile target_file.txt MD5...

构造函数原型对象语法、原型链、原型对象

目录 一、前言 二、编程思想 面向过程 面向对象 三、构造函数 四、原型对象 constructor 属性 对象原型 原型继承 原型链 一、前言 通过本篇博客,我们将了解面向对象编程的一般特征,掌握基于构造函数原型对象的逻辑封装,掌握基于原…...

鸿蒙UI开发——自定义UI绘制帧率

1、概 述 随着设备屏幕的不断演进,当前主流设备采用LTPO屏幕(可变刷新率屏幕),此类屏幕支持在多个档位之间切换屏幕帧率。 对于快速变化的内容,如射击游戏,交互动画等,显示帧率越高&#xff0…...

鸿蒙基本组件结构

组件结构 1. 认识基本的组件结构 ArkTS通过装饰器Component 和Entry 装饰 struct 关键字声明的数据结构,构成一个自定义组件 自定义组件中提供了一个build函数,开发者需要在函数内以链式调用的方式进行基本的UI描述,UI描述的方法请参考UI描述…...

柔性鞋材振动刀智能视觉裁切机市场报告:未来几年年复合增长率CAGR为5.4%

震动刀切割设备是一种利用振动刀片在各种非金属材料表面上切割的设备,振动刀切割机利用刀片高频振动和360度旋转,能保证每分钟上万次的振动频率,可在平面进行垂直切割,锋利裁剪。震动刀切割设备切割速度快,可以单层切割…...

【计算机网络】基础知识,常识应用知识

局域网使用的是广播技术,广域网使用的是点对点技术,使用的协议不同。局域网工作在数据链路层,可以不要网络层,不存在路由选择问题。1968年6月,世界上最早的计算机网络是ARPAnet服务原语:请求、指示、相应、…...

【Linux进程篇1】认识冯·诺依曼体系结构(引出进程详解)

--------------------------------------------------------------------------------------------------------------------------------- 每日鸡汤: 用这生命中的每一秒,给自己一个不后悔的未来。 -----------------------------------------------…...

使用iviewui组件库的坑

背景 使用view-design组件库的Input组件的时候,按照产品的要求,输入框中只能键入正整数。 使用效果 如果直接使用组件的type属性,设置类型为number时,乍一看没啥问题,但是当我们键入 小数点(.) 或者 e/E 后面没有跟任…...

高级sql使用技巧

窗口函数(Window Functions): 窗口函数可以在结果集的行之间进行计算,例如计算移动平均值、排名等。在使用时,可以使用 OVER() 语句来定义窗口。例如: sql SELECT employee_id,salary,AVG(salary) OVER (P…...

403 Request Entity Too Lager(请求体太大啦)

昨天收到 QA 的生产报障,说是测试环境的附件上传功能报了 403 的错误,错误信息:403 Request Entity Too Lager。我尝试复现问题,发现传个几兆的文件都费劲啊,一传一个失败。不用说,项目用到 ng 代理&#x…...

Flutter 正在切换成 Monorepo 和支持 workspaces

其实关于 Monorepo 和 workspaces 相关内容在之前《Dart 3.5 发布,全新 Dart Roadmap Update》 和 《Flutter 之 ftcon24usa 大会,创始人分享 Flutter 十年发展史》 就有简单提到过,而目前来说刚好看到 flaux 这个新进展,所以就再…...

小白初入Android_studio所遇到的坑以及怎么解决

1. 安装Android_studio 参考:Android Studio 安装配置教程 - Windows(详细版)-CSDN博客 Android Studio超级详细讲解下载、安装配置教程(建议收藏)_androidstudio-CSDN博客 想下旧版本的android_studio的地址(仅供参考&#xf…...

NetCore使用Aop和内存缓存对接口、方法进行数据缓存

通过Aop内存缓存对接口、方法进行缓存 源码地址https://gitee.com/wangbenchi66/nuget 1. nuget包引入 必须引入包 至少在2024.11.7以上 <PackageReference Include"WBC66.Cache.Core" Version"2024.11.7" />必须开启内存缓存 否则后续步骤无法正…...

uniapp 对接腾讯云IM群组成员管理(增删改查)

UniApp 实战&#xff1a;腾讯云IM群组成员管理&#xff08;增删改查&#xff09; 一、前言 在社交类App开发中&#xff0c;群组成员管理是核心功能之一。本文将基于UniApp框架&#xff0c;结合腾讯云IM SDK&#xff0c;详细讲解如何实现群组成员的增删改查全流程。 权限校验…...

Java 语言特性(面试系列2)

一、SQL 基础 1. 复杂查询 &#xff08;1&#xff09;连接查询&#xff08;JOIN&#xff09; 内连接&#xff08;INNER JOIN&#xff09;&#xff1a;返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...

QMC5883L的驱动

简介 本篇文章的代码已经上传到了github上面&#xff0c;开源代码 作为一个电子罗盘模块&#xff0c;我们可以通过I2C从中获取偏航角yaw&#xff0c;相对于六轴陀螺仪的yaw&#xff0c;qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)

概述 在 Swift 开发语言中&#xff0c;各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过&#xff0c;在涉及到多个子类派生于基类进行多态模拟的场景下&#xff0c;…...

ffmpeg(四):滤镜命令

FFmpeg 的滤镜命令是用于音视频处理中的强大工具&#xff0c;可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下&#xff1a; ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜&#xff1a; ffmpeg…...

Cinnamon修改面板小工具图标

Cinnamon开始菜单-CSDN博客 设置模块都是做好的&#xff0c;比GNOME简单得多&#xff01; 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...

生成 Git SSH 证书

&#x1f511; 1. ​​生成 SSH 密钥对​​ 在终端&#xff08;Windows 使用 Git Bash&#xff0c;Mac/Linux 使用 Terminal&#xff09;执行命令&#xff1a; ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" ​​参数说明​​&#xff1a; -t rsa&#x…...

RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill

视觉语言模型&#xff08;Vision-Language Models, VLMs&#xff09;&#xff0c;为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展&#xff0c;机器人仍难以胜任复杂的长时程任务&#xff08;如家具装配&#xff09;&#xff0c;主要受限于人…...

Qemu arm操作系统开发环境

使用qemu虚拟arm硬件比较合适。 步骤如下&#xff1a; 安装qemu apt install qemu-system安装aarch64-none-elf-gcc 需要手动下载&#xff0c;下载地址&#xff1a;https://developer.arm.com/-/media/Files/downloads/gnu/13.2.rel1/binrel/arm-gnu-toolchain-13.2.rel1-x…...

关于uniapp展示PDF的解决方案

在 UniApp 的 H5 环境中使用 pdf-vue3 组件可以实现完整的 PDF 预览功能。以下是详细实现步骤和注意事项&#xff1a; 一、安装依赖 安装 pdf-vue3 和 PDF.js 核心库&#xff1a; npm install pdf-vue3 pdfjs-dist二、基本使用示例 <template><view class"con…...