5分钟了解Java 12 八大新特性_高可用架构的博客-程序员宅基地

导读:Java 12 终于发布了,我们一起来看一看 Java 12 中的新特性。通过本文可以在5分钟内快速了解 Java 12 新特性。

1 Switch 表达式

使用Java 12,switch不仅可以作为语句也可以作为表达式。 无论作为语句或者作为表达式,switch都可以使用传统/简化的作用域和控制流行为。 这将有助于简化代码,并为在switch中使用模式匹配铺平道路。

Java开发人员正在增强Java编程语言,以使用模式匹配来解决当前switch语句的几个问题。 这包括:switch块的默认控制流行为,switch块默认作用域(被视为单个作用域的块)和switch仅作为语句。

在Java 11中,switch语句追随C和C++,默认情况下使用fall-through语义。 虽然传统的控制流程在编写低级代码时很有用,但随着switch在更高级别的环境中采用,易出错会盖过其灵活性。

Java 11 

640?wx_fmt=png

Java 12

640?wx_fmt=png

2 默认CDS归档

通过在64位平台上的默认类列表的帮助下生成CDS归档来改进JDK构建过程,从而有效地消除了运行java -Xshare:dump。 此功能的目标包括:1。)改进开箱即用的启动时间,以及2.)摆脱使用-Xshare:dump。

3 Shenandoah GC

Shenandoah是一种垃圾收集(GC)算法,旨在保证低延迟(10 - 500 ms的下限)。 它通过在运行Java工作线程的同时执行GC操作减少GC暂停时间。 使用Shenandoah,暂停时间不依赖于堆的大小。 这意味着无论堆的大小如何,暂停时间都是差不多的。

这是一个实验性功能,不包含在默认(Oracle)的OpenJDK版本中。

4 JMH 基准测试

此功能为JDK源代码添加了一套微基准测试(大约100个),简化了现有微基准测试的运行和新基准测试的创建过程。 它基于Java Microbenchmark Harness(JMH)并支持JMH更新。

此功能使开发人员可以轻松运行当前的微基准测试并为JDK源代码添加新的微基准测试。 可以基于Java Microbenchmark Harness(JMH)轻松测试JDK性能。 它将支持JMH更新,并在套件中包含一组(约100个)基准测试。

5 JVM 常量 API 

JEP 334引入了一个API,用于建模关键类文件和运行时artifacts,例如常量池。 此API将包括ClassDesc,MethodTypeDesc,MethodHandleDesc和DynamicConstantDesc等类。此 API 对于操作类和方法的工具很有帮助。

6 G1的可中断 mixed GC

此功能通过将Mixed GC集拆分为强制部分和可选部分,使G1垃圾收集器更有效地中止垃圾收集过程。通过允许垃圾收集过程优先处理强制集,g1可以更多满足满足暂停时间目标。

G1是一个垃圾收集器,设计用于具有大量内存的多处理器机器。由于它提高了性能效率,g1垃圾收集器最终将取代cms垃圾收集器。

G1垃圾收集器的主要目标之一是满足用户设置的暂停时间。G1采用一个分析引擎来选择在收集期间要处理的工作量。此选择过程的结果是一组称为GC集的区域。一旦GC集建立并且GC已经开始,那么G1就无法停止。

如果G1发现GC集选择选择了错误的区域,它会将GC区域的拆分为两部分(强制部分和可选部分)来切换到处理Mix GC的增量模式。如果未达到暂停时间目标,则停止对可选部分的垃圾收集。

7 G1归还不使用的内存

此功能的主要目标是改进G1垃圾收集器,以便在不活动时将Java堆内存归还给操作系统。 为实现此目标,G1将在低应用程序活动期间定期生成或持续循环检查完整的Java堆使用情况。

这将立即归还未使用的部分Java堆内存给操作系统。 用户可以选择执行FULL GC以最大化返回的内存量。

8 移除多余ARM64实现

Java 12将只有一个ARM 64位实现(aarch64)。 目标是删除所有与arm64实现相关的代码,同时保留32位ARM端口和64位aarch64实现。

这将把重点转移到单个64位ARM实现,并消除维护两个实现所需的重复工作。 当前的JDK 11实现中有两个64位ARM实现。


原文地址:

https://stackify.com/java-12-new-features-and-enhancements-developers-should-know/

本文作者JAZMINE LLAGUNO,由方圆翻译。转载本文请注明出处,欢迎更多小伙伴加入翻译及投稿文章的行列,详情请戳公众号菜单「联系我们」。GIAC全球互联网架构大会深圳站将于2019年6月举行,届时将有Java等专题深入探讨相关话题,敬请期待。

640?wx_fmt=png

参考阅读:

技术原创及架构实践文章,欢迎通过公众号菜单「联系我们」进行投稿。转载请注明来自高可用架构「ArchNotes」微信公众号及包含以下二维码。

高可用架构

改变互联网的构建方式

640?wx_fmt=jpeg
长按二维码 关注「高可用架构」公众号

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_45583158/article/details/100143531

智能推荐

不同格式证书导入keystore方法_peterwanghao的博客-程序员宅基地

简介 Java自带的keytool工具是个密钥和证书管理工具。它使用户能够管理自己的公钥/私钥对及相关证书,用于(通过数字签名)自我认证(用户向别的用户/服务认证自己)或数据完整性以及认证服务。它还允许用户储存他们的通信对等者的公钥(以证书形式)。 keytool 将密钥和证书储存在一个所谓的密钥仓库(keystore)中。缺省的密钥仓库实现将密钥仓库实现为一个文件。它用口令来保护私钥...

Android socket高级用法(自定义协议和Protocol Buffer使用)_weixin_34162401的博客-程序员宅基地

前提之前写过两篇关于socket的文章,但是,只是简单的介绍了一下关于socket Tcp和Udp的简单使用。如果没有看过的朋友可以去看看Android Socket编程(tcp)初探 和 Android Socket编程(udp)初探。相信很多朋友在公司使用socket开发的时候都会自定义协议来传递信息。一方面是为了安全排除脏数据,另一个方面是为了更加高效的处理自己所需要的数据。今天就来介绍一...

Ubuntu 12.04 64bit 无法识别交叉编译器解决办法_yimiyangguang1314的博客-程序员宅基地

最近在U错误信息:Html代码  [email protected]:~$ sudo apt-get install ia32-libs  Reading package lists... Done  Building dependency tree         Reading state information... Done

mysql隔离级别和死锁_MySQL RR隔离级别死锁问题剖析_weixin_39819661的博客-程序员宅基地

本案例在RR隔离级别下,模拟数据如下:CREATE TABLE `ty` (`id` int(11) NOT NULL AUTO_INCREMENT,`a` int(11) DEFAULT NULL,`b` int(11) DEFAULT NULL,PRIMARY KEY (`id`),KEY `idxa` (`a`)) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT...

linux arm toolchain 开源,Linux系统下编译FFmpeg生成arm平台下动态连接库_罗结义的博客-程序员宅基地

FFmpeg为开源音视频编解码库,市面上的播放器很多都是基于FFmpeg开发的,可以说学会了FFmpeg,音视频开发的所有功能都可以实现。FFmpeg使用c语言编写,makefile工具编译,因此选择在linux平台下编译。而我们需要生成arm平台下的so库,需要使用到ndk1.ndk下载和安装https://developer.android.google.cn/ndk/downloads/在安...

flash actionscript3.0加载外部swf资源包_dengxiao9180的博客-程序员宅基地

加载外部swf资源包编程是一个编写as3.0非常不错的美工与程序分离的方法。有很多人比较喜欢给Flash弄一个文档类,然后ctrl+enter,我曾经也是这种人。讨厌外部加载资源包,直接一个swf就全部搞定。对于as3.0初碰,这也很正常,因为有很多中文版的书箱就是这么教的。如果你也已经把as3.0摸出感觉了,不如试试外部加载资源包的方法。专门生成一个没有程序,没有文档类的swf资源包。...

随便推点

zencart复制其他人模板的方法整理 _佐佐吉牧的博客-程序员宅基地

<br />这里以zencart或者osc的模板为例,其他的模板也是同样的方法。<br />1. 首先在你的模板目录下,建立一个新的模板,例如:/includes/templates/mytemplate/<br />复制/includes/templates/template_default下的所有目录和文件到新的目录中<br />2. 用文本编辑器修改/includes/templates/mytemplate/template_info.php,修改其中的名称、版本、作者等

云计算运维平台ubuntu环境配置_weixin_30344995的博客-程序员宅基地

python环境安装首先在项目目录下面生成python虚拟环境,使用pip工具下载安装virtualenv,命令如下:pip install virtualenvcd 项目目录virtualenv 环境文件夹名称将需要导入的python模块文件放在项目目录下,运行:pip install -r ./requirement.txt下面为./requ...

【MyCpp_2.1】多态浅窥——运算符重载_Reflection_的博客-程序员宅基地

简而言之,父类的指针指向子类。“一口多用”。简洁+运算符重载

2021HTML源码,2021表格HTML代码一览表.docx_weixin_39626131的博客-程序员宅基地

表格HTML表格HTML弋码一览表html特效代码html表格制作表格算不上什么特效,但在空间却很有用处。 如果使用专门的工具, 制作一张表格是轻而易举的事,但这类工具一下子不容易学会,下面介绍html表格如何手工制作。1、最基本的表格第1行第1列第1行第2列第2行第1列第2行第2列第3行第1列第3行第2列代码: 第1行第1列 第1行第2列 第2行第1列 第2行第2列 第3行第1列 第3行第2列 ...

数据库第四讲查询笔记_派狼不派的博客-程序员宅基地

数据库笔记第四讲 数据查询--创建数据库CREATE DATABASE StudentSys;GO--创建表USE StudentSys;CREATE TABLE student (sno CHAR(6) PRIMARY KEY,sname VARCHAR(8) not null...

对于单片机时钟树的理解_宽容人厚载物的博客-程序员宅基地_单片机时钟树

时钟源一般分为2大类1.内部时钟:系统启动默认时钟2.外部时钟:精度稳定性更高内外部又分为高速与低速高速时钟 芯片的主时钟低速时钟 实时时钟及看门狗时钟运行机制芯片启动后默认使用内部高速时钟作为启动时钟源,启动后再选择使用外部时钟,外部时钟首先经过倍频放大再通过内部开关确认系统主时钟频率再分频给时钟线上其他外设外设基本有3类1.主频时钟:内核时钟/存储器/DMA2.副频时钟:与主频同步且独立,可作为主频休眠时的时钟依据,例如休眠唤醒中断等3.外设时钟:通信驱动器/TIM/ADC/GPI