前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >​JDK 18新特性简报

​JDK 18新特性简报

作者头像
御剑
发布2022-06-07 19:19:44
6870
发布2022-06-07 19:19:44
举报
文章被收录于专栏:微言码道微言码道

JDK 18已经在今年的3月22日正式发布了。它是一个非长期支持版的JDK。

我在这篇文章将简述一下JDK 18中有哪些新特性,以供大家参阅与了解。

由于JDK 18不是LTS版本的SDK,所以你可能不会真正去使用它,但做为Java程序员,我们仍然有义务去了解它有哪些新特性。

LTS与非LTS

在开始之前,我希望再解释一个JDK中的LTS版本与非LTS版本的概念。因为很多Java程序员还是在使用JDK 8,所以对后续JDK发行机制变更并不一定清楚。

2017年的时候,Oralce公司对JDK的发行做了变更,由以前的每三年发行一个JDK版本,修改为每三年发行一个LTS的JDK版本,而每半年发行一个非LTS的JDK版本。(后续Oracle已经提议将每三年一个LTS版本修改为每二年发行一个LTS版本)

这样的好处显而易见,可以让JDK更快的加入新特性并让程序员使用与体验到,加速JDK的改进与优化。

JDK 9是第一个非LTS的JDK版本,JDK 11是之后的第一个LTS JDK版本,JDK 17是当前最新的LTS版本。

JDK 18的新特性

所以,现在你应该清楚了,JDK 18是个非LTS版本,通常情况下,我们只会使用JDK LTS版本。但知道非LTS版本有哪些新特性,对我们Java程序员来说,也是非常有必要的。

JDK 18的新特性列表如下:

  • 1. UTF-8 by Default 默认使用UTF-8字符编码
  • 2. Simple Web Server 简单Web服务器
  • 3. Code Snippets in Java API Documentation API文档支持代码片断
  • 4. Reimplement Core Reflection with Method Handles 重构反射的实现
  • 5. Vector API (Third Incubator) 向量API(孵化第三版)
  • 6. Internet-Address Resolution SPI 网络地址解析 SPI
  • 7. Foreign Function & Memory API (Second Incubator) 外部函数&内存API (孵化第二版)
  • 8. Pattern Matching for switch (Second Preview) switch模式自动匹配(预览第二版)
  • 9. Deprecate Finalization for Removal 将Finalization标记为过期

以下对每个特性的简述

本篇文章只是简述,我只会简单的描述这个特性是什么以及为什么需要这个特性,不会用代码详细的展示如何使用这个新特性。

1. UTF-8 by Default

它是什么

将JDK中的字符集编码,默认设置为UTF-8

为什么需要这个特性

过往,JDK的一些API中,比如读取文件使用的字符集依赖于操作系统。那就意味着在不同的操作系统,同一个API得到预期不一致的结果。

举例说明,很多国内Java程序员,都可能遇到过中文乱码问题,这种情况下我们会指定UTF-8做为编码集,以规避这个问题,但前提是你记得指定UTF-8编码。

现在,JDK 18解决了这个预期不一致的现象,这意味着在不指定编码集的情况下,不同的操作系统的代码仍然使用的是同一个字符集。这样强化了Java的可移植性。

2. Simple Web Server

它是什么

JDK 18提供了一个简单的WEB服务,支持静态网站的访问。它不支持JSP或Servlet等,也不支持访问权限控制,授权等任何高级特性。它只是一个简单的Web服务器

为什么需要这个特性

主要支持程序员用于原型展示,测试等场景的。

举例说明,我在编写后端API的同时,会使用OpenApi来编写标准的API文档给前端或移动端人员参考。在vert.x中,由于支持static router,所以我可以把这个API文档一同打包进JAR中,启动JAR就能访问到这个API文档,非常方便。

但在JDK中,以前是做不到的,只能另外将其部署到nginx中,现在有了这个特性,一样也能做到了。还是挺方便的。

不过要记住,它不能取代nginx,也不能取代tomcat等生产用的服务器。

3. Code Snippets in Java API Documentation

它是什么

在Java doc中,以往你可以使用 @code来嵌入一些代码片断,但它有一些不足。于是JDK 18提供了更好的@snippet标签来让你在java doc中嵌入代码。

为什么需要这个特性

@code有一些不足,比如不支持语法高亮;不被IDE识别为代码无法基于代码模式来编辑它,只被认为是普通文本;不支持HTML标签等。而@snippet就是为了改善这些不足而出的。

4. Reimplement Core Reflection with Method Handles

它是什么

JDK 18重新实现了反射API背后的实现机制。这个特性是隐藏式特性,也就是你在JDK 18中使用反射的API, API并没有任何变化,但背后的实现更简洁与高效了

为什么需要这个特性

因为过往JDK对反射的实现并不优雅,JDK反射内部机制复杂,有三种不同的内部实现来支撑:

  • • 使用VM native methods来实现反射
  • • 使用动态生成的字节码来实现反射
  • • 使用Method handles来实现反射

这导致在添加一些新的特性时,比如Record,Sealed Class时,修改与支持它们的反射变得困难及麻烦。

因此,在JDK 18中,对反射的内部实现进行了重构,并且提高了性能。

5. Vector API (Third Incubator)

它是什么

Java Vector API (向量API)是用于支持计算机的矢量计算。

为什么需要这个特性

这个特性是Java支持向量处理。向量处理是一种更高效的系统级别的处理方式,它以流水线结构为主的进行并行处理,因此更高效。

6. Internet-Address Resolution SPI

它是什么

提供了对Java中网络地址解析自实现。比如InetAddress::getByNameInetAddress::getAllByName这些方法。

为什么需要这个特性

JDK对于网络地址解析,是通过查询系统的解析来实现的。在大多数场景下这已经足够了,但一些特别的场景下这会带来不可预知的问题。提供一套自实现的网络解析,这样某些业务场景下你可以编写更可靠的网络解析。

7. Foreign Function & Memory API (Second Incubator)

它是什么

提供了一套新的与外部程序打交道的API,用于替换过往的Java Native Interface(JNI)

为什么需要这个特性

当然是过往的JNI有很多缺点或不足了。简而言之,使用这套机制,它的优势在于:

  • • 更易于使用
  • • 足够的性能
  • • 更通用
  • • 更安全

如果你需要调用系统原生程序,过往你可能使用JNI来实现,未来你可以考虑这个特性。

8. Pattern Matching for switch (Second Preview)

它是什么

模式自动匹配对switch语句与表达式的支持。

为什么需要这个特性

JDK 17引进了Pattern Matching模式匹配,我在Java 8 之后的那些新特性(八):模式匹配 Pattern Matching讲述到这个特性。

但模式匹配的正式特性,JDK 17中只适用instanceof。所以,这个特性就是在switch语句以及表达式中,你也能用上匹配自动匹配了。

9. Deprecate Finalization for Removal

它是什么

Object对象有一个方法是finalize,它的作用是用于销毁当前对象所持有的资源。但这个方法有非常多的问题与缺点。因此JDK计划在未来移除掉它。JDK 18将其标记为Deprecate,以便未来某个版本能移除掉它。

为什么需要这个特性

根据JDK的建议,任何资源释放,应该使用try-with-resources statementcleaners两种机制来实现,它们是更可靠与更易维护的实现方式。

以上就是JDK 18所有的新特性,现在你应该对JDK 18有大致的了解了吧。

JDK的进步是我们一点一滴都能感受到的。

关于我

我是御剑,一个致力于追求,实践与传播编码之道的程序员。

访问微言码道(https://taoofcoding.tech)以阅读更多我写的文章;

访问myddd(https://myddd.org)以了解我在维护的全栈式领域驱动开源框架。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-05-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 微言码道 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • LTS与非LTS
  • JDK 18的新特性
    • 1. UTF-8 by Default
      • 2. Simple Web Server
        • 3. Code Snippets in Java API Documentation
          • 4. Reimplement Core Reflection with Method Handles
            • 5. Vector API (Third Incubator)
              • 6. Internet-Address Resolution SPI
                • 7. Foreign Function & Memory API (Second Incubator)
                  • 8. Pattern Matching for switch (Second Preview)
                    • 9. Deprecate Finalization for Removal
                    • 关于我
                    领券
                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档