当前位置: 首页 > 后端技术 > Java

Java13新特性及代码示例

时间:2023-04-01 14:07:09 Java

大家好,我是大洋。Java13于2019年9月17日发布。在本文中,我们将介绍一些新增功能以及一些代码示例。Java13的主要更新如下:switch表达式改进的文本块改进的动态CDS存档ZGC:取消提交未使用的内存重新实现LegacySocketAPI杂项1.switch表达式改进使用yield,我们现在可以从switch表达式中高效地返回值,并启用更容易实施策略模式。packagecn.dayangshuo.collectors;/***@authorDAYANG*/publicclassSwitchTest{publicstaticvoidmain(String[]args){varme=4;varoperation="平方";varresult=switch(operation){case"double"->{yieldme*2;}case"square"->{yieldme*me;默认->我;};System.out.println(结果);}}2。文本块改进第二个预览功能是多行字符串的文本块,例如嵌入的JSON、XML、HTML等。早些时候,为了在我们的代码中嵌入JSON,我们将其声明为字符串文字:StringJSON_STRING="{\r\n"+"\"name\":\"Baeldung\",\r\n"+"\"网址\":\"https://www.dayangshuo.cn/\"\r\n"+"}";现在让我们使用字符串文本块编写相同的JSON:StringTEXT_BLOCK_JSON="""{"name":"Baeldung","website":"https://www.dayangshuo.cn/"}""";显然,不需要转义双引号或添加回车。通过使用文本块,嵌入式JSON更易于编写、更易于阅读和维护。3.动态CDS归档类数据共享(CDS)一段时间以来一直是JavaHotSpotVM的一个显着特征。它允许在不同的JVM之间共享类元数据,以减少启动时间和内存占用。JDK10通过添加应用程序CDS(AppCDS)扩展了此功能——使开发人员能够将应用程序类包含在共享档案中。JDK12通过默认包含CDS存档进一步增强了此功能。但是,提交申请类别的过程很繁琐。要生成存档文件,开发人员必须首先测试运行他们的应用程序以创建一个类列表,然后将其转储到存档中。然后可以使用此存档在JVM之间共享元数据。通过动态归档,JDK13简化了这个过程。现在我们可以在应用程序退出时生成共享存档。这消除了试运行的需要。为了使应用程序能够在默认系统存档之上创建动态共享存档,我们需要添加一个选项-XX:ArchiveClassesAtExit并将存档名称指定为参数:java-XX:ArchiveClassesAtExit=-cpAppName然后,我们可以使用带有-XX:SharedArchiveFile选项的新创建的存档运行相同的应用程序:java-XX:SharedArchiveFile=-cpAppName4.ZGC:取消提交未使用的内存Java11ZGC作为低延迟垃圾收集机制引入,因此GC暂停不会超过10毫秒。然而,与G1和Shenandoah等其他HotSpotVMGC不同,它不具备将未使用的堆内存返回给操作系统的能力。我们现在减少了内存占用并提高了性能。从Java13开始,ZGC现在默认将未提交的内存返回给操作系统,直到达到指定的最小堆大小。如果我们不想使用此功能,我们可以通过使用选项-XX:-ZUncommit或设置相等的最小(-Xms)和最大(-Xmx)堆大小来回退到Java11方式。此外,ZGC现在支持的最大堆大小为16TB。早些时候,限制是4TB。5.重新实现遗留的SocketAPI自从Java出现以来,我们就将Socket(java.net.Socket和java.net.ServerSocket)API视为Java的一个组成部分。然而,在过去的二十年里,它们从未进行过现代化改造。它们是用遗留的Java和C编写的,既麻烦又难以维护。Java13逆势而上,取代了底层实现,并使API与未来的用户模式线程保持一致。提供者接口现在指向NioSocketImpl而不是PlainSocketImpl。这个新的编码实现基于与java.nio相同的内部基础结构。同样,我们确实有办法回到使用PlainSocketImpl的方式。我们可以通过将系统属性-Djdk.net.usePlainSocketImpl设置为true来启动JVM以使用旧的实现。默认是NioSocketImpl。6.其他除了上面的列表,Java13还给我们带来了一些更显着的变化:)javax.security-添加属性jdk.sasl.disabledMechanisms以禁用SASL机制javax.xml.crypto-引入新的字符串常量来表示规范XML1.1URIjavax.xml.parsers-添加新方法以实例化具有命名空间支持的DOM和SAX工厂Unicode支持升级到版本12.1添加了对Kerberos主体名称规范化和跨领域引用的支持