Java最高

使用Spring 5和Spring Boot 2开始,通过学习的春天课程:

>>查看课程

1.概述

2019年9月,JDK 13发布了,按照Java的新发布周期为6个月。在本文中,我们将看看这个版本中引入的新特性和改进。

2.预览开发人员功能

Java 13已经引入了两种新语言功能,尽管预览模式。这意味着这些功能完全实现了用于评估的开发人员,但也不是生产的。此外,它们可以在基于反馈的未来版本中删除或永久删除或永久。

我们需要指定-Enable-preview.作为命令行标志以使用预览功能。让我们深入了解一下它们。

2.1。切换表达式(JEP 354)

我们最初看到了switch表达式JDK 12.java 13的开关表达式在以前的版本的基础上添加一个新的收益率声明。

使用收益率,我们现在可以有效地从switch表达式返回值

@test @suppresswarnings(“preview”)public void whenswitchingonoperationsquareme_thenwillreturnsquare(){var me = 4;var操作=“squareme”;var结果=切换(操作){case“doubleme” - > {产量我* 2;}案例“squareme” - > {得到我*我;}默认 - >我;};assertequals(16,结果);}

正如我们所看到的,现在很容易实现战略模式使用新的开关。

2.2。文本块(中355

第二个预览功能是文本块对多行细绳例如,嵌入式JSON, XML, HTML等。

早些时候,在我们的代码中嵌入JSON,我们会将其声明为一个细绳文字:

字符串json_string =“{\ r \ n”+“\”name \“:\”baeld金宝搏188体育ung \“,\ r \ n”+“\”网站“:\”https://www.%s.com/“\ r \ n”+“}”;

现在让我们使用相同的JSON使用细绳文本块:

字符串TEXT_BLOCK_JSON  = """ { " 名称”:“Baeldu金宝搏188体育ng”、“网站”:“https://www.%s.com/“}””;

显然,不需要转义双引号或添加回车。通过使用文本块,嵌入的JSON编写起来更简单,阅读和维护起来也更容易。

而且,所有细绳功能可用:

@Test public void whenTextBlocks_thenStringOperationsWorkSame() {assert (TEXT_BLOCK_JSON.contains("Bael金宝搏188体育dung")). itrue ();为了(TEXT_BLOCK_JSON.indexOf(“www”)).isGreaterThan (0);为了(TEXT_BLOCK_JSON.length ()) .isGreaterThan (0);}

同时,现在有三种新方法来操纵文本块:

  • tiblindent()- 模仿编译器以删除附带的空白空间
  • translateescapes()- 翻译逃生序列,如“t \ \”“t \”
  • 格式化()- 与之一样字符串::格式,但是对于文本块

让我们快点看看字符串::格式化例子:

assertthat(text_block_json.formatted(“金宝搏188体育baeldung”)。包含(“www.soft30t.com”))。Istrue();asserthat(string.format(json_string,“b金宝搏188体育aeldung”)。包含(“www.soft30t.com”))。Istrue();

由于文本块是预览功能,并且可以在将来的版本中删除,因此这些新方法标记为弃用。

3.动态CDS档案(JEP 350)

类数据共享(CDS)一直是Java Hotspot VM的突出功能。它允许类元数据以不同的JVM共享,以减少启动时间和内存占用空间。JDK 10通过添加应用程序CD来扩展此功能(AppCDS) -让开发者能够在共享存档中包含应用程序类。JDK 12进一步增强了这个特性默认的CDS档案

但是,归档应用程序类的过程令人疑惑。要生成存档文件,开发人员必须尝试运行其应用程序以先创建类列表,然后将其转储到存档中。之后,该存档可用于共享JVM之间的元数据。

动态存档JDK 13简化了这个过程。现在我们可以在应用程序退出时生成一个共享存档。这消除了对试运行的需求。

要启用应用程序在默认系统存档的顶部创建动态共享存档,我们需要添加一个选项- xx: ArchiveClassesAtExit并指定存档名称作为参数:

java -XX:ArchiveClassesAtExit= -cp  AppName . exe

然后,我们可以使用新创建的存档来运行相同的应用程序- xx: SharedArchiveFile选择:

java -XX:SharedArchiveFile= -cp  AppName . zip

4.ZGC: Uncommit Unused Memory (JEP 351)

Z垃圾收集器在Java 11中引入了一个低延迟垃圾收集机制,使得G​​C暂停时间从未超过10毫秒。但是,与其他热点VM GCS(如G1和Shenandoah)不同,它没有配备将未使用的堆内存返回到操作系统。Java 13添加了此功能动作。

我们现在可以获得减少的内存足迹以及性能改进。

从Java 13开始默认情况下,ZGC现在将未提交的内存返回给操作系统,直到达到指定的最小堆大小。如果我们不想使用此功能,我们可以通过以下方式返回Java 11路:

  • 使用选项- xx: -ZUncommit,
  • 设置相同的最小值(-XMS.)和最大值(-XMX.)堆大小

此外,ZGC现在支持的最大堆大小为16TB。早些时候,4TB是极限。

5.重新实现旧的Socket API (JEP 353)

我们已经看到了Socket (java.net.Socketjava.net.serversocket.自Java诞生以来,api就一直是Java不可或缺的一部分。然而,在过去的二十年里,他们从未实现现代化。它们是用遗留的Java和C编写的,既麻烦又难于维护。

Java 13折扣了这一趋势替换了底层实现使API与未来的用户模式线程保持一致。而不是PlainSocketImpl,提供者接口现在指向nioscoptimpl。这个新编码的实现基于与nio

再次,我们确实有办法回去使用PlainSocketImpl。我们可以使用系统属性启动JVM-djdk.net.useplatesocketimpl.设置真正的使用旧的实现。默认值是nioscketimpl。

6.各种各样的变化

除了上面列出的JEPS之外,Java 13给了我们一些值得注意的变化:

  • nio- 方法文件系统。newFileSystem(路径,Map < String, ? >)添加
  • java.time.添加了新的日本官方纪元名
  • javax.crypto-支持MS加密下一代(CNG)
  • javax.security.——属性jdk.sasl.disablemberisms.添加以禁用SASL机制
  • javax.xml.crypto- 新的细绳为表示规范XML 1.1 uri而引入的常量
  • javax.xml.parsers.parsers.- 添加了使用名称空间支持的DOM和SAX工厂的新方法
  • Unicode支持升级到版本12.1
  • 增加了对Kerberos主体名规范化和跨领域引用的支持

此外,几个API是提出了取消。其中包括以下三种细绳上面列出的方法,以及javax.security.certAPI。

在删除中包括rmic.工具和javadoc工具的旧功能。Pre-JDK 1.4SocketImpl也不再支持实现。

7.结论

在本文中,我们看到了Java 13实施的所有五个JDK增强建议。我们还列出了一些其他值得注意的补充和删除。

像往常一样,源代码可用在GitHub

Java底部

使用Spring 5和Spring Boot 2开始,通过学习的春天课程:

>>查看课程
本文评论关闭!