当前位置: 首页 > Web前端 > HTML

JavaSE13新特性

时间:2023-04-02 17:37:37 HTML

新版Switch用法switch语句增加了yield关键字来表示返回值。该特性是JavaSE13中的预览特性,在JavaSE14中正式引入,代码如下:注意:如果使用JavaSE12运行以上代码,需要指定--enable-preview参数。如果你使用IntellijIDEA,参考包git.snippets.jdk13;/***切换yield函数*jdk13实验函数*给jdk14官方使用*@author灰色*@date2021/11/29*@since13*/publicclassSwitchYield{publicstaticvoidmain(String[]args){Stringt=test("apple");System.out.println(t);Stringm=test("abc");System.out.println(m);}privatestaticStringtest(Stringc){returnswitch(c){case"apple","Apple":yield"apple";case"banana":yield"香蕉";默认值:yield“无法识别”;};}}输出结果appleisnotrecognizedTextblocks(previewfunction)为了定义多行字符串,我们习惯使用转义序列来处理字符串中包含的换行符和双引号。例如,一条SQL语句看起来像这样"{\n"+"\"upperSummary\":null,\n"+"\"sensitiveTypeList\":null,\n"+"\"gmtModified\":\"2011-08-0510:50:09\",\n"+"\"lowerGraph\":null,\n"+"\"signature\":\"\",\n"+"\"appName\":\"xxx\",\n"+"\"lowerSummary\":null,\n"+"\"gmtCreate\":\"2011-08-0510:50:09\",\n"+"\"类型\":\""呼叫\",\n"+"\"name\":\"xxxx\",\n"+"\"subType\":\"yyy\",\n"+"\"id\":1,\n"+"\"projectId\":1,\n"+"\"status\":1\n"+"}";JDKEnhancementProposal355允许我们以更易读的方式编写这样的字符串Stringsql="""SELECTid,firstName,lastNameFROMEmployeeWHEREdepartmentId="IT"ORDERBYlastName,firstName""";Stringcontent2="""{"upperSummary":null,"sensitiveTypeList":null,"gmtModified":"2011-08-0510:50:09","lowerGraph":null,"signature":"","appName":"xxx","lowerSummary":null,"gmtCreate":"2011-08-0510:50:09","type":"CALL","name":"xxxx","subType":"yyy","id":1,"projectId":1,"status":1}""";文本块是JavaSE13中的预览功能,SocketAPI的新实现在JavaSE15中正式启用。java.net.Socket和java.net.ServerSocket类早在Java1.0它从Java13开始引入。Java代码和C语言代码的混合实现非常难以维护和调试;而且这种实现方式存在并发问题,有时很难排查。因此,引入了新的Java13。实现方法使用新的实现NioSocketImpl来替代旧的PlainSocketImpl实现。用户可以随时通过-Djdk.net.usePlainSocketImpl参数切换回旧实现,以兼容突发情况。代码如下packagegit.snippets.jdk13;importjava.io.IOException;importjava.net.ServerSocket;importjava.net.Socket;/***新版本的SocketAPI使用了NioSocketImpl的新实现来替换PlainSocketImpl的旧实现。*需要添加-XX:+TraceClassLoading参数**@author灰色*@date2022/8/20*@since13*/publicclassNewSocketAPI{publicstaticvoidmain(String[]args){try(ServerSocketserverSocket=newServerSocket(8000)){booleanrunning=true;while(running){SocketclientSocket=serverSocket.接受();//用clientSocket做点什么}}catch(IOExceptione){e.printStackTrace();}}}用Java13运行,通过参数-XX:+TraceClassLoading跟踪加载的类,在log中可以看到NioSocketImpl。[0.099s][info][class,load]java.util.Properties$LineReader来源:共享对象文件[0.099s][info][class,load]java.io.FileInputStream$1来源:共享对象文件[0.100s]][信息][类,加载]sun.net.PlatformSocketImpl来源:jrt:/java.base[0.100s][信息][类,加载]sun.nio.ch.NioSocketImpl来源:jrt:/java.base[0.100s][info][class,load]sun.nio.ch.NativeDispatcher来源:jrt:/java.base[0.100s][info][class,load]sun.nio.ch.SocketDispatcher来源:jrt:/java.base但在Java12中并不是NioSocketImpl。[0.120s][info][class,load]java.util.concurrent.ConcurrentSkipListMap$Node来源:共享对象文件[0.120s][info][class,load]java.net.SocketImpl来源:jrt:/java。base[0.120s][info][class,load]java.net.AbstractPlainSocketImpl来源:jrt:/java.base[0.120s][info][class,load]java.net.PlainSocketImpl来源:jrt:/java.base[0.120s][info][class,load]java.net.SocksSocketImplsource:jrt:/java.baseZGC:UncommitunusedmemoryZGC是JavaSE11中引入的实验性垃圾收集器,它承诺实现停止世界10毫秒或更短。JDKEnhancementProposal351扩展了ZGC的功能,可以在一定时间后将未使用的堆内存返回给操作系统。使用-XX:ZUncommitDelay,您可以指定时间(以秒为单位),在此之后ZGC返回未提交的内存。默认情况下,此值为300秒。此功能默认启用,可以使用-XX:-ZUncommit禁用。ZGC将在JavaSE15中达到生产状态。动态CDS存档JavaSE10引入了应用程序类数据共享——一种允许创建所谓的共享存档文件的功能。该文件包含平台的JVM所需的二进制形式的应用程序类。该文件通过内存映射I/O映射到JVM的内存中。到目前为止,创建此文件相对复杂。首先,我们必须在应用程序的测试运行期间转储类列表。只有在第二步,我们才能从这个列表中生成共享档案。java-Xshare:off-XX:+UseAppCDS-XX:DumpLoadedClassList=helloworld.lst-cptarget/helloworld.jareu.happycoders.appcds.Mainjava-Xshare:dump-XX:+UseAppCDS-XX:SharedClassListFile=helloworld.lst-XX:SharedArchiveFile=helloworld.jsa-cptarget/helloworld.jarJDKEnhancementProposal350简化了这个过程。从JavaSE13开始,您可以指定-XX:ArchiveClassesAtExit参数以在应用程序执行结束时生成共享存档。不再需要额外的参数-Xshare:on和-XX:+UseAppCDS。java-XX:ArchiveClassesAtExit=helloworld.jsa-cptarget/helloworld.jareu.happycoders.appcds.Main还创建了一个比以前小得多的共享存档。因为它现在只包含应用程序的类。从JavaSE13开始,共享归档的使用如下。java-XX:SharedArchiveFile=helloworld.jsa-cptarget/helloworld.jareu.happycoders.appcds.Main欢迎关注我的公众号:敲代码的老贾,回复“收到”送《Java面试》信息、阿里、腾讯、字节跳动、美团、饿了么等。