百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

JDK13正式发布:Switch表达式、GC新垃圾回收算法、低延时GC、ZGC

wxin55 2024-11-02 13:56 15 浏览 0 评论

Java JDK 13于9月17日发布,Java JDK 12于3月19日发布,现在Java的更新速度非常快,每6个月发布一个新的Java版本。

当然现在统计数据来看,绝大部分企业还是Java 8,不会冒险升级,作为企业应用开发,Java8也足够了。

另外企业不用担心Oracle 版本的JDK收费问题。之前的文章也做过介绍。只要我们使用Open JDK代替Oracle JDK就可以了。

我们先来看看Java 12的新特性有哪些?然后再来看看Java 13的新特性有哪些。

Java 12 新特性

对于Java JDK 12 新API功能并不多。大多数增强功能都是内部Java/JVM改进,直接面向Java开发人员的比如Switch语法糖,还有性能测试工具,其他的基本的内部改进,大家做必要的了解即可。

下面是Java 12 的新特性列表:

(1)JEP 325 – Switch 表达式 (预览): 扩展switch语法,以便可以用作语句或表达式,并且两个表单都可以使用“传统”或“简化”作用域和控制流行为。 这些更改将简化日常编码开发工作,并为在交换机中使用模式匹配(JEP 305)做好准备。

(2)JEP 344 – G1可终止混合垃圾回收模式: 如果混合垃圾回收超时,允许终止垃圾回收工作,避免过久的垃圾回收影响性能。

(3)JEP 346 – G1立即返回可未使用已经提交的内存: 增强G1 garbage collector,可以立即返回空闲的Java对内存。

(4)JEP 189 – Shenandoah, 低延迟GC (实验性): 添加新的垃圾收集(GC)算法,通过与正在运行的Java线程同时进行回收工作来减少GC暂停时间。

(5)JEP 230 – 微性能测试套件Microbenchmark Suite: 在JDK源代码中添加一套基本的微基准测试工具,使开发人员可以轻松运行现有的微基准测试并创建新的基准测试工具。

(6)JEP 334 – JVM Constants API: 新增了一个API来模拟关键类文件和运行时工件的名义描述,特别是可以从常量池加载的常量.

(7)JEP 340 – 统一AArch64 Port: 删除与arm64端口相关的所有源代码,同时保留32位ARM端口和64位aarch64端口。

(8)JEP 341 – 默认CDS归档: 在64位平台上使用默认类列表增强JDK构建过程以生成类数据共享(CDS)归档。

此外,JEP 326 - Raw String Literals新特性已从JDK12中移除。但是,此JEP中有2个新的String方法包含在JDK12中。

Java 13 新特性

JDK 13 此版本将是Java SE平台版本13的参考实现,由Java Community Process中的JSR 388指定。

(1)350:Dynamic CDS Archives 动态CDS存档。扩展应用程序类 - 数据共享( application class-data sharing),以允许在Java应用程序执行结束时动态归档类。归档类将包括默认的基础层CDS存档中不存在的所有已加载的应用程序类和库类。

(2)351:ZGC: 增强ZGC以将未使用的堆内存返回给操作系统。

(3)353:重新实现旧版套接字API:维护和调试的更简单,新代码替换java.net.Socket和java.net.ServerSocket API的底层实现。新的实现很容易适应用户模式线程threads。

(4)354:Switch 表达式(预览):JDK12继续迭代。

(5)355:Text Blocks文本块 (预览):将文本块添加到Java语言。文本块是一个多行字符串文字,它避免了对大多数转义序列的需要,以可预测的方式自动格式化字符串,并在需要时让开发人员控制格式。

新特性代码

Switch Expressions

在JDK 12中引入了Switch表达式作为预览特性。JEP 354修改了这个特性,它引入了yield语句,用于返回值。这意味着,switch表达式(返回值)应该使用yield, switch语句(不返回值)应该使用break。

在以前,我们想要在switch中返回内容,还是比较麻烦的,一般语法如下:

在JDK13中使用以下语法:

或者

在这之后,switch中就多了一个关键字用于跳出switch块了,那就是yield,他用于返回一个值。和return的区别在于:return会直接跳出当前循环或者方法,而yield只会跳出当前switch块。

Text Blocks

这个是JDK 13中新增的功能。随着文本块Text Block的引入,即多行字符串文字,字符串可以跨越几行代码,同时避免常见情况下的转义序列。它还增强了Java程序中的字符串可读性。这个还是比较方便的,语法很简单。

这是Java13新特性 文本块测试;
这是Java13新特性 文本块测试;
这是Java13新特性 文本块测试;
这是Java13新特性 文本块测试;
这是Java13新特性 文本块测试;

Dynamic CDS(Class-Data Sharing) Archiving

CDS的功能在进化一步,就是动态CDS功能。说白了,可以在运行期间动态保存类数据,也就是所谓的归档。

应用程序class-data Sharing(AppCDS)再JDK13新版本里已经简化。在应用程序退出时,可以动态存档类数据。动态生成的归档文件将在与正在运行的JDK映像一起打包的默认系统归档文件上创建生成,并保存数据。

我们可以使用选项参数-XX:ArchiveClassesAtExit = 控制程序再退出时生成存档。也可以:SharedArchiveFile = ,来使用动态存档功能。

#创建存档文件
% bin/java -XX:ArchiveClassesAtExit=helloworld.jsa -cp helloworld.jar Hello
# 使用存档文件
% bin/java -XX:SharedArchiveFile=hello.jsa -cp helloworld.jar Hello
# 使用动态存档,在老文档基础上
% bin/java -XX:SharedArchiveFile=<base archive>:helloworld.jsa -cp helloworld.jar Hello

总结

Java 13即将于2019年9月17日发布。第二个候选版本已经于2019年8月22日发布。

我们详细介绍了Java12和13中引入的新功能,并给出了一些关键特性的代码实例。

OpenJDK 13中也将引入相同的功能。注意生产环境,尽量使用Open JDK,学习使用可以了。正式项目,仔细评估,不到万不得已,推荐使用成熟、稳定的Java 8版本。

看完本文有收获?请转发分享给更多人

来源:https://yq.aliyun.com/articles/718128

相关推荐

ES6中 Promise的使用场景?(es6promise用法例子)

一、介绍Promise,译为承诺,是异步编程的一种解决方案,比传统的解决方案(回调函数)更加合理和更加强大在以往我们如果处理多层异步操作,我们往往会像下面那样编写我们的代码doSomething(f...

JavaScript 对 Promise 并发的处理方法

Promise对象代表一个未来的值,它有三种状态:pending待定,这是Promise的初始状态,它可能成功,也可能失败,前途未卜fulfilled已完成,这是一种成功的状态,此时可以获取...

Promise的九大方法(promise的实例方法)

1、promise.resolv静态方法Promise.resolve(value)可以认为是newPromise方法的语法糖,比如Promise.resolve(42)可以认为是以下代码的语...

360前端一面~面试题解析(360前端开发面试题)

1.组件库按需加载怎么做的,具体打包配了什么-按需加载实现:借助打包工具(如Webpack的require.context或ES模块动态导入),在使用组件时才引入对应的代码。例如在V...

前端面试-Promise 的 finally 怎么实现的?如何在工作中使用?

Promise的finally方法是一个非常有用的工具,它无论Promise是成功(fulfilled)还是失败(rejected)都会执行,且不改变Promise的最终结果。它的实现原...

最简单手写Promise,30行代码理解Promise核心原理和发布订阅模式

看了全网手写Promise的,大部分对于新手还是比较难理解的,其中几个比较难的点:状态还未改变时通过发布订阅模式去收集事件实例化的时候通过调用构造函数里传出来的方法去修改类里面的状态,这个叫Re...

前端分享-Promise可以中途取消啦(promise可以取消吗)

传统Promise就像一台需要手动组装的设备,每次使用都要重新接线。而Promise.withResolvers的出现,相当于给开发者发了一个智能遥控器,可以随时随地控制异步操作。它解决了三大...

手写 Promise(手写输入法 中文)

前言都2020年了,Promise大家肯定都在用了,但是估计很多人对其原理还是一知半解,今天就让我们一起实现一个符合PromiseA+规范的Promise。附PromiseA+规范地址...

什么是 Promise.allSettled()!新手老手都要会?

Promise.allSettled()方法返回一个在所有给定的promise都已经fulfilled或rejected后的promise,并带有一个对象数组,每个对象表示对应的pr...

前端面试-关于Promise解析与高频面试题示范

Promise是啥,直接上图:Promise就是处理异步函数的API,它可以包裹一个异步函数,在异步函数完成时抛出完成状态,让代码结束远古时无限回掉的窘境。配合async/await语法糖,可...

宇宙厂:为什么前端离不开 Promise.withResolvers() ?

大家好,很高兴又见面了,我是"高级前端进阶",由我带着大家一起关注前端前沿、深入前端底层技术,大家一起进步,也欢迎大家关注、点赞、收藏、转发。1.为什么需要Promise.with...

Promise 新增了一个超实用的 API!

在JavaScript的世界里,Promise一直是处理异步操作的神器。而现在,随着ES2025的发布,Promise又迎来了一个超实用的新成员——Promise.try()!这个新方法简...

一次搞懂 Promise 异步处理(promise 异步顺序执行)

PromisePromise就像这个词的表面意识一样,表示一种承诺、许诺,会在后面给出一个结果,成功或者失败。现在已经成为了主流的异步编程的操作方式,写进了标准里面。状态Promise有且仅有...

Promise 核心机制详解(promise机制的实现原理)

一、Promise的核心状态机Promise本质上是一个状态机,其行为由内部状态严格管控。每个Promise实例在创建时处于Pending(等待)状态,此时异步操作尚未完成。当异步操作成功...

javascript——Promise(js实现promise)

1.PromiseES6开始支持,Promise对象用于一个异步操作的最终完成(包括成功和失败)及结果值的表示。简单说就是处理异步请求的。之所以叫Promise,就是我承诺,如果成功则怎么处理,失败怎...

取消回复欢迎 发表评论: