Java语言专题系列Java新特性5Java新特性6Java7新特性Java8新特性Java9新特性10Java新特性11Java新特性12Java新特性13Java新特性14特性Java新特性15Java新特性16Java新特性17Java新特性18Java新特性19Java新特性20Java新特性21新特性前言-22OpenJDK运行环境(build18+36-2087)OpenJDK64-BitServerVM(build18+36-2087,mixedmode,sharing)从版本信息可以看出是build18+36的featurelistJEP400:UTF-8BeforebyDefaultjava18,Charset.defaultCharset()是根据操作系统、用户区域设置等,导致不同操作系统的默认字符集不同。这次,它被更改为UTF-8。要统一成UTF-8,java18需要-Dfile。encoding=UTF-8设置如果还是想用之前的判断方式,可以使用-Dfile.encoding=COMPAT设置JEP408:SimpleWebServer提供了一个类Python的SimpleHTTPServer(python-mSimpleHTTPServer[port])开箱即用的HTTP文件服务器可以通过jwebserver-p9000启动,默认绑定到环回。对于所有接口,使用“-b0.0.0.0”或“-b::”。在127.0上提供/tmp和子目录。0.1端口9000URLhttp://127.0.0.1:9000/也可以在代码中自定义,启动jshell>varserver=SimpleFileServer.createFileServer(newInetSocketAddress(8080),...>Path.of("/some/path"),OutputLevel.VERBOSE);jshell>server.start()JEP413:CodeSnippetsinJavaAPIDocumentationformerly要通过javadoc显示代码,您可以使用@code如下
{@codelinesofsourcecode}但它的缺点是必须用pre包裹,所以fragment不能包含html标签,缩进不是很灵活这次javaDoc引入了@snippet标签,不需要转义html标签/***下面的代码显示如何使用{@codeOptional.isPresent}:*{@snippet:*if(v.isPresent()){*System.out.println("v:"+v.get());*}*}*/也可以直接引用源码,避免javadoc代码与实际代码脱节/***以下代码展示如何使用{@codeOptional.isPresent}:*{@snippetfile="ShowOptional.java"region="example"}*/JEP416:ReimplementCoreReflectionwithMethodHandlesReimplementjava.lang.reflectviaMethodHandles.Method,Constructor和Field用于替换字节码生成的Method::invoke,Constructor::newInstance、Field::get、Field::set,方便Valhalla项目的实施,降低未来扩容成本。JEP417:矢量rAPI(ThirdIncubator)JDK16引入JEP338:VectorAPI(Incubator)提供jdk.incubator.vector用于向量计算JDK17用于改进并作为第二轮incubatorJEP414:VectorAPI(SecondIncubator)JDK18用于改进并作为第三轮孵化器JEP418:Internet-AddressResolutionSPI提供解析网络地址的SPI,即java.net.spi包的InetAddressResolverProvider,方便为项目loom做准备(目前InetAddress的API会被屏蔽在系统调用),也方便定制和测试JEP419:ForeignFunction&MemoryAPI(SecondIncubator)JEP370:Foreign-MemoryAccessAPI(Incubator)ofJDK14引入Foreign-MemoryAccessAPI作为孵化器JEP383:Foreign-MemoryAccessAPI(SecondIncubator)ofJDK15)Foreign-MemoryAccessAPI作为第二轮孵化器JEP393:Foreign-MemoryAccessAPI(ThirdIncubator)ofJDK16作为第三轮,引入了ForeignLinkerAPIJDK17引入了JEP412:ForeignFunction&MemoryAPI(Incubator)作为第一轮孵化器JDK18是第二轮孵化器JEP420:PatternMatchingforswitch(SecondPreview)instanceof的模式匹配在JDK14中作为预览,在JDK15中作为预览,在JDK16中作为预览。staticStringformatterPatternSwitch(Objecto){返回开关(o){caseIntegeri->String.format("int%d",i);caseLongl->String.format("long%d",l);caseDoubled->String.format("double%f",d);caseStrings->String.format("String%s",s);默认->o.toString();};}JDK17介绍JEP406:PatternMatchingforswitch(Preview)JDK18是第二轮预览JEP421:DeprecateFinalizationforRemoval放弃finalize方法方便后续去除细节项。解释上面的列表是一般特征。此外,还有一些API更新和弃用。主要看JDK18ReleaseNotes,这里举几个例子添加项SerialGC、ParallelGC、ZGC支持StringDeduplication可以使用-XX:+UseStringDeduplication打开Element到其JavaFileObject的Map添加Elements.getFileObjectOf(Element)映射到JavaFileObjectConfigurableCardTableCardSizeJDK-8272773可以使用-XX:GCCardSizeInBytes设置卡表大小允许G1堆区域最大512MB移除Google的GlobalSign根证书移除java.desktop模块中的空finalize()方法JDK-8273102移除java.desktop模块中空的finalize()方法移除impl.prefixJDK系统属性使用FromInetAddressJDK-8274227Removedimpl.prefix属性,转而使用InetAddressResolver这个spiRemovalofSupportforPreJDK1.4DatagramSocketImplImplementationsJDK-8260428移除jdk1.4之前的DatagramSocketImplRemovalofLegacyPlainSocketImplandPlainDatagramSocketImplImplementationsJDK-8253119移除java.net.SocketImpl及java.net.DatagramSocketImplPlainSocketImpl、PlainDatagramSocketImpljdk.net.usePlainDatagramSocketImpl属性的旧实现也被删除。有关已弃用项目的完整列表,请参阅弃用列表已弃用的Subject::doAs用于移除JDK-8267108已弃用的javax.security.auth.Subject::doAs已弃用用于移除sun.misc.UnsafeMethodsThatReturnOffsetsJDK-8277863objectFieldOffset、staticFieldOffset和sun.misc.Unsafe中的staticFieldBase方法被丢弃最终弃用Thread.stopJDK-8277861DeprecatedThread.stopPrepare用于后续删除XX:G1RSetSparseRegionEntriesJDK-8017163Deprecated-XX:G1RSetRegionEntriesand-XX:G1RSetSparseRegionEntriesKnownIssuesStartedExtendedDelayDriveBeforeJDKExe8274002在Windows11和WindowsServer2022ephemeral上,从映射的网络安装驱动器启动时,提取速度可能会很慢,安装程序仍会运行,但可能会有暂时的延迟。小结Java18主要有以下几个特性JEP400:默认为UTF-8JEP408:简单的Web服务器JEP413:JavaAPI文档中的代码片段JEP416:使用方法句柄重新实现核心反射JEP417:VectorAPI(第三个孵化器)JEP418:Internet-地址解析SPIJEP419:外部函数和内存API(第二次孵化器)JEP420:开关的模式匹配(第二次预览)JEP421:删除文档的弃用定稿JDK18特性JDK18发行说明合并的JDK18发行说明JavaSE18deprecated-listJava18JDK的到来18G1/并行/串行GC更改