Java 12 新特性与功能

Java 12是Java SE的第12个版本,于2019年3月19日发布。Java 12的发布背景主要是为了帮助开发人员更加高效的进行编程工作,提高Java的性能和稳定性,并增加新特性和API。

在Java 12发布后,Oracle对该版本的维护包括两个阶段:公共更新和维护更新。公共更新阶段为期6个月,在这个阶段中,Oracle提供安全更新、错误修复和增强功能更新。同时,Oracle还向企业客户提供预览版本以测试新功能,并在下一个长期支持(LTS)版本中进行采纳。

维护更新阶段则针对企业客户,提供长期支持版本的错误修复和安全更新。在此期间,Oracle不会推出新的功能或API,而只会解决已知问题和漏洞。

1. Shenandoah垃圾收集器 (实验版)

Shenandoah垃圾收集器是Java 12引入的一项新功能,它是一种专为大型内存应用程序设计的低延迟、高吞吐量垃圾收集器。Shenandoah使用了一种名为IETF RMT(Improved Efficiency of Transport)协议的分布式预期缩短算法来实现暂停时间缩短。Shenandoah的特点包括:

  • 最低暂停时间:Shenandoah的最低暂停时间可以控制在10毫秒以内。
  • 分布式并发处理:Shenandoah使用分布式算法对垃圾进行处理,可以减少单次GC时暂停应用程序的时间。
  • 全堆操作:Shenandoah无需在单独的年轻代和老年代之间划分内存,可以在整个堆上同时进行垃圾收集。

Shenandoah垃圾收集器在默认情况下未启用,需要通过JVM参数启用。

2. Switch表达式 (预览版)

Switch表达式是Java 12引入的另一项新功能,它使得编写Switch语句时更加简单和灵活。具体而言,Switch表达式允许每个Case分支都使用箭头操作符(->),以及省略break语句并返回一个值。

下面是一个使用Switch表达式的示例:

public class SwitchExpressionExample {public static void main(String[] args) {String fruit = "apple";int price = switch (fruit) {case "apple" -> 2;case "banana" -> 3;case "orange" -> 4;default -> throw new IllegalArgumentException("Unknown fruit: " + fruit);};System.out.println("The price of " + fruit + " is " + price);}
}

在这个示例中,我们使用Switch表达式来计算水果的价格。我们使用箭头操作符(->)将每个Case分支映射到其对应的价格,并在Default分支中抛出异常。运行这个示例会输出The price of apple is 2。

3. 新的字符串方法和增强

Java 12还引入了一些新的字符串方法和增强,使得在处理字符串时更加灵活和方便。具体而言,Java 12提供了indent()、transform()、describeConstable()等方法。

  • indent()方法:该方法可以在字符串开头添加指定数量的空格。
  • transform()方法:该方法可以将字符串进行转换。
  • describeConstable()方法:该方法用于检查字符串是否为常量。

下面是一个使用新的字符串方法和增强的示例:

public class StringExample {public static void main(String[] args) {String text = "   Hello, world!   ";String indentText = text.indent(4);String transformText = text.transform(s -> s.strip().toUpperCase());boolean isConstable = text.describeConstable().isPresent();System.out.println("Original text: " + text);System.out.println("Indented text: " + indentText);System.out.println("Transformed text: " + transformText);System.out.println("Is constable: " + isConstable);}
}

在这个示例中,我们使用新的字符串方法和增强来处理一个字符串。我们使用indent()方法在字符串开头添加四个空格,并使用transform()方法将字符串首尾的空格去掉并转换成大写。我们还使用describeConstable()方法检查字符串是否为常量。

4. 新的Stream方法

Java 12提供了一个新的Stream方法,名为teeing()。该方法可以将两个操作合并为一个,并返回一个结果。这个方法对于需要同时计算多个结果的情况非常有用。

下面是一个使用teeming()方法的示例:

public class StreamExample {public static void main(String[] args) {List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);int result = numbers.stream().collect(Collectors.teeing(Collectors.summingInt(n -> n),Collectors.counting(),(sum, count) -> sum / count));System.out.println("Result: " + result);}
}

在这个示例中,我们使用teeming()方法计算数组中数字的平均值。我们使用Collectors.summingInt()方法计算数组中所有数字的总和,并使用Collectors.counting()方法计算数组中数字的数量。然后,我们使用lambda表达式将两个操作合并为一个,并计算数字的平均值。运行这个示例会输出平均值3。

5. Compact Number格式化

Java 12引入了Compact Number格式化,使得数字可以以更易读的方式显示。具体而言,Compact Number格式化允许数字以K、M或B等单位进行缩写,而不是完全展示它们的位数。这样可以节省空间,并且使得数字更加易于阅读。

下面是一个使用Compact Number格式化的示例:

public class CompactNumberExample {public static void main(String[] args) {double number = 1234567.89;NumberFormat format = NumberFormat.getCompactNumberInstance(Locale.US, NumberFormat.Style.SHORT);System.out.println(format.format(number));}
}

在这个示例中,我们使用Compact Number格式化来格式化一个数字。我们使用NumberFormat.getCompactNumberInstance()方法获取一个Compact Number实例,并使用NumberFormat.Style.SHORT枚举类型设置格式化风格为短格式。运行这个示例会输出1.2M。

6. HTTP Client API增强

Java 11引入了新的HTTP Client API,Java 12进一步增强了这个API。具体来说,Java 12为HTTP Client API添加了新的标头、身份验证功能,并提供方法以设置连接超时时间。

7. 移除项和废弃项

Java 12移除了一些不常被使用的API和工具,包括javah工具、Pack200工具和Nashorn JavaScript引擎。此外,Java 12还废弃了Unsafe类中的一些方法,并且将在未来版本中删除Unsafe类。

8. 应用程序类数据共享

Java 12引入了应用程序类数据共享(ACDS)的初始实现。该功能允许多个虚拟机在启动时共享已经预先构建的类数据,从而加快JVM的启动时间。

9. 微基准测试套件

Java 12引入了微基准测试套件(JMH),它是一个专门用于测试Java代码性能的工具。JMH通过生成随机测试数据并调用被测方法,从而测量不同的代码实现之间的性能差异。

10. 其他改进和修复

Java 12还包括一些其他的改进和修复,例如:

  • 提高了G1垃圾收集器的可用性和性能。
  • 修复了JIT编译器的一些问题,从而提高了代码执行速度。
  • 对比Java 11版本,Java 12版本修复了许多BUG。

Java 12 新特性与功能相关推荐

  1. Java 12 新特性介绍

    Switch 表达式 (JEP 325) 在 Java 12 中,对 Switch 表达式的写法进行了改进,虽然是一个语法糖的改进,也让 Switch 的代码编写变得更加优雅.先看一下在 Java 1 ...

  2. java switch 表达式_尝鲜Java 12新特性:switch表达式

    Java 12将在两个月后(2019/3/19)发布,现已进入RDP1阶段,确定加入8个JEP.其中对Java语法的改进是JEP 325: switch表达式.于是我迫不及待,提前感受一下更先进的语言 ...

  3. Java 9 新特性概述

    转载自 Java 9 新特性概述 Java 9 正式发布于 2017 年 9 月 21 日 .作为 Java8 之后 3 年半才发布的新版本,Java 9 带 来了很多重大的变化.其中最重要的改动是 ...

  4. Java 10新特性

    Java 10新特性 Java 10是其23年历史中最快的java版本.Java因其缓慢的增长和发展而受到批评,但Java 10刚刚破坏了这一概念.Java 10是一个具有许多未来变化的版本,其范围和 ...

  5. 2022年最细Java 17新特性,是真的猛,被征服了!

    SpringBoot 正式支持Java 17,Kafka3.0弃用Java8 Spring Boot 2.5.5是Spring Boot 第一个支持Java 17的版本.现在你已经可以从Spring ...

  6. Java 17新特性,快到起飞?惊呆了!

    都说Java 8 是YYDS,那你注意到 Java 17 也是长期支持版本吗?目前按计划 JDK 19 将于今年 9 月发布 SpringBoot 正式支持Java 17,Kafka3.0弃用Java ...

  7. 七、Java 14 新特性

    七.Java 14 新特性 Java 14 已如期于 2020 年 3 月 17 日正式发布,此次更新是继半年前 Java 13 这大版本发布之后的又一次常规版本更新,即便在全球疫情如此严峻形势下,依 ...

  8. Java 8 新特性之Lambda

    Java 8 新特性之Lambda.Stream.Optional Java 8 新特性之Lambda.Stream.Optional 速度更快 代码更少(增加了新的语法Lambda表达式) 强大的S ...

  9. atitit.Oracle 9 10 11 12新特性attilax总结

    atitit.Oracle 9  10 11  12新特性 1. ORACLE 11G新特性 1 1.1. oracle11G新特性 1 1.2. 审计 1 1.3. 1.   审计简介 1 1.4. ...

最新文章

  1. Linux命令行文本处理工具
  2. 02-线性结构3 Reversing Linked List
  3. jQuery 1.3 for Asp.Net、 CSLA.Net 3.6 for Windows 及 MOSS/WSS 一步一步从入门到精通三个系列的目录...
  4. 爬虫学习--豆瓣top250
  5. Pandas库学习笔记
  6. Codeforces Round #742 (Div. 2) F. One-Four Overload 构造 + 二分图染色
  7. 柳传志退休后拿近1亿薪酬?联想回应了:严重失实
  8. centos后台登录ftp_安卓TikTok无限制版、手游扫码登录更新
  9. 天津西站,大屏幕程序出错啦
  10. 使用监控宝监控php-fpm状态
  11. 1个鼠标和1个键盘控制2台电脑(windows和linux系统)
  12. 网易裁员事件引发的 5 点重要思考
  13. 关于iOS 报Command failed with exit 128: git错误额解决方案
  14. 面试官问你什么是QPS?
  15. 精伦身份证阅读器php_华视CVR-100身份证阅读器BS开发包
  16. 大厂算法面试之leetcode精讲4.贪心
  17. [日推荐] 『雅思口语自练狂』雅思考试神助攻!
  18. iOS(iPhone,iPad))开发(Objective-C)开发库常用库索引
  19. 【配置Hifive1-revB】设备管理器中不识别端口,Can not connect to J-Link via USB的解决办法
  20. 格式化硬盘出现 is apparently in use by the system错误

热门文章

  1. 关于hover失效问题(!important)
  2. spring-retry总结
  3. 达梦数据共享集群(DSC)---搭建过程
  4. 判断点在有向线段的左边还是右边
  5. strongswan常用命令解析(二)
  6. 美国国家民主基金会捐赠数据
  7. html页面嵌入markdown,在页面中插入Markdown编辑器
  8. 安卓通话记录转移到iphone_如何将Android SMS,联系人和通话记录导入iPhone
  9. 造血干细胞培养涉及相关因子总结
  10. Java访问Elasticsearch报错Request cannot be executed; I/O reactor status: STOPPED