刚刚,Java16正式发布。Java16正式发布主要特性VectorAPI(孵化),提升Java在CPU向量计算方面的性能,支持大规模张量计算,提升Java在AI领域的能力。启用新的C++功能允许在JDK的C++源代码中使用C++14的新功能。从Mercurial迁移到GitGit已经成为代码版本管理领域的绝对统治者,现在Java也顺势而为,使用Git进行源代码管理。迁移到GitHubOpenJDK的代码现在托管在GitHub上。ZGCGarbageCollector用于并发线程堆栈处理的垃圾收集器。Unix域套接字通道Unix域套接字支持ServerSocketChannel和SocketChannel。AlpineLinuxPort使用x64和AArch64架构上的muslC库将JDK移植到AlpineLinux和其他Linux发行版。ElasticMetaspaceHotspot大大改进了它对类元数据(metaspace-metaspace)的处理。占用空间已减少,未使用的内存现在可以更快地回收到操作系统。Windows/AArch64Port将JDK移植到Windows/AArch64平台。ForeignLinkerAPI(incubating)引入了一种API,它提供对本机代码的静态类型、纯Java访问。这个API与外部内存API(JEP393)一起,将大大简化绑定到本地库的容易出错的过程。基于值的类的警告将原始包装类指定为*基于值的类*并弃用其构造函数以将其删除,从而提示新的弃用警告。提供有关在Java平台中对任何基于值的类的实例进行不正确同步尝试的警告。PackagingTool提供了用于打包独立Java应用程序的jpackage工具。支持原生打包格式,为最终用户提供自然的安装体验。这些格式包括Windows上的msi和exe,MacOS上的pkg和dmg,以及Linux上的deb和rpm。允许在打包时指定启动时间参数。可以直接从命令行调用或通过ToolProviderAPI以编程方式调用。Foreign-MemoryAccessAPI(ThirdIncubation)引入了一种API,允许Java程序安全有效地访问Java堆之外的外部内存。instanceof的PatternMatchingforinstanceof之前在Java中://先判断类型if(objinstanceofString){//然后转换Strings=(String)obj;//然后就可以使用了}在自动匹配模式中:if(objinstanceofStrings){//If如果类型匹配,直接使用}else{//如果类型不匹配,则不能直接使用}Records类终于正规了,Java类不再又臭又长。原来是这样的:(Objecto){if(this==o)returntrue;if(o==null||getClass()!=o.getClass())returnfalse;Rangerange=(Range)o;returnmin==range.min&&max==range。最大限度;}@OverridepublicinthashCode(){returnObjects.hash(min,max);}@OverridepublicStringtoString(){return"Range{"+"min="+min+",max="+max+'}';}}现在可以简化to:publicrecordRange(intmin,intmax){}之前的文章有详细的介绍。JEP359:Records(Preview),Java14新特性,默认对JDK进行严格封装,提高JDK的安全性和可维护性,与普通开发者无关。SealedClasses密封类,简而言之,就是被final修饰的类。密封类不能被继承,防止恶意派生。此外,甲骨文发文感谢参与JDK16贡献的公司和个人。Oracle感谢为ARM、SAP、RedHat和腾讯等组织工作的开发人员做出的杰出贡献。我们也很高兴看到AmpereComputing、Bellsoft、DataDog、Microdoc等小型组织和独立开发人员的贡献,他们共同贡献了Java16中3%的修复。我们同样感谢许多审查提议更改的经验丰富的开发人员、尝试早期访问版本并报告问题的早期采用者,以及在OpenJDK邮件列表上提供反馈的专业人士。JDK16处理相关组织Issues本文转载自微信公众号“码农小胖哥”,可通过以下二维码关注。转载本文请联系码农小胖公众号。
