当前位置: 首页 > ops >正文

java18学习笔记

如约而至,JDK 18 于 2022 年 3 月 22 日发布,即Java10之后规定的每半年发布一版

400:UTF-8 by Default
408:Simple Web Server
413:Code Snippets in Java API Documentation
416:Reimplement Core Reflection with Method Handles
417:Vector API (Third Incubator)
418:Internet-Address Resolution SPI
419:Foreign Function & Memory API (Second Incubator)
420:Pattern Matching for switch (Second Preview)
421:Deprecate Finalization for Removal

JEP 400: UTF-8 by Default

将 UTF-8 指定为标准 Java API 的默认字符集。通过这一更改,依赖默认字符集的 API 将在所有实现、操作系统、区域设置和配置中表现一致。

JEP 408: Simple Web Server

简单web服务器见文章  java18学习笔记-Simple Web Server-CSDN博客

JEP 413: Code Snippets in Java API Documentation

为 JavaDoc 的 Standard Doclet 引入 @snippet 标签,以简化在 API 文档中包含示例源代码。

java18学习笔记-JavaDoc的@snippet注释标签-CSDN博客

JEP 416: Reimplement Core Reflection with Method Handles

java.lang.invoke 重新实现了 java.lang.reflect.Method,Constructor 和 Field 。将方法实现作为反射的底层机制从而降低 java.lang.reflect 和 java.lang.invoke API 的维护和开发成本

核心反射有两个内部机制用于调用方法和构造器。为了快速启动,它使用 HotSpot 虚拟机中的本地方法来执行特定反射方法或构造器对象的最初几次调用。为了更好的峰值性能,在多次调用后,它会为反射操作生成字节码,并在后续调用中使用该字节码。

JEP 417: Vector API (Third Incubator)  

见文章java16学习笔记-Vector API-CSDN博客

JEP 418: Internet-Address Resolution SPI

定义一个主机名和地址解析的服务提供者接口(SPI),以便 java.net.InetAddress 可以使用除平台内置解析器之外的其他解析器。

        InetAddress localHost = InetAddress.getLocalHost();String hostAddress = localHost.getHostAddress();String hostName = localHost.getHostName();var address = localHost.getAddress();String canonicalHostName = localHost.getCanonicalHostName();System.out.println("localHost: " + localHost);System.out.println("hostAddress: " + hostAddress);System.out.println("hostName: " + hostName);System.out.println("address: " + address);System.out.println("canonicalHostName: " + canonicalHostName);InetAddress[] allByName = InetAddress.getAllByName("本机");Stream.of(allByName).forEach(System.out::println);

JEP 419: Foreign Function & Memory API (Second Incubator)

见文章Foreign-Memory Access API外部内存API -CSDN博客

JEP 420: Pattern Matching for switch (Second Preview)

见文章java17学习笔记-switch总结-CSDN博客

JEP 421: Deprecate Finalization for Removal

在未来的版本中弃用终结以供移除。目前终结仍然默认启用,但可以禁用以促进早期测试。在未来的版本中它将默认禁用,在更后的版本中它将被移除。依赖终结的库和应用程序的维护者应考虑迁移到其他资源管理技术,如 try -with-resources 语句和清理器

弃用 try-finally

假设有好几个流try中没有正常关闭,到finally中关闭的时候第一个关闭又抛了异常,那后面的流全都会泄露。java7就引入了try-with-resources,自动关闭实现了 AutoCloseable 或 Closeable 接口的资源(如文件流、数据库连接等),利用try-with-resources可以避免资源泄漏。

弃用标准 Java API 中的终结器

终结化是在 Java 1.0 中引入的,旨在帮助避免资源泄漏。一个类可以声明一个终结化方法——即 protected void finalize() 方法——其主体释放任何底层资源。GC 将在回收不可达对象内存之前调度该对象的终结化方法被调用;反过来, finalize 方法可以执行诸如调用对象的 close 方法等操作。

乍一看,这似乎是一个有效的安全网,用于防止资源泄漏:如果一个包含未关闭资源的对象变得不可达(上述的 input 对象),那么 GC 将安排调用终结器,终结器将关闭该资源。实际上,终结器将垃圾回收的权力用于管理非内存资源(Barry Hayes,《收集器接口中的终结器》,1992 年国际内存管理研讨会)。

终结器的缺陷

不可预测的延迟——一个对象变得不可达和其终结器被调用之间可能经过任意长的时间。事实上,GC 不保证任何终结器会被调用。

无约束的行为——终结器代码可以执行任何操作。特别是,它可以保存正在被终结的对象的引用,从而复活该对象,使其再次变得可达。

始终启用——终结化没有显式的注册机制。带有终结器的类为该类的每个实例启用终结化,无论是否需要。对象的终结化无法取消,即使它不再对该对象有必要。

未指定的线程——终结化在未指定的线程上以任意顺序运行。线程和顺序均无法控制。

这些缺陷早在二十多年前就被广泛认识。早在 1998 年就出现了关于谨慎使用 Java 终结化的建议(Bill Venners,《对象终结化和清理:如何设计类以进行正确的对象清理》,JavaWorld,1998 年 5 月),并在 Joshua Bloch 2001 年的著作《Effective Java》(第 6 条:“避免终结化”)中重点提及。自 2008 年以来,SEI CERT Oracle Java 编码标准已建议不使用终结化。

弃用标准 Java API 中的终结器
  • java.lang.Object.finalize()
  • java.lang.Enum.finalize()
  • java.awt.Graphics.finalize()
  • java.awt.PrintJob.finalize()
  • java.util.concurrent.ThreadPoolExecutor.finalize()
  • javax.imageio.spi.ServiceRegistry.finalize()
  • javax.imageio.stream.FileCacheImageInputStream.finalize()
  • javax.imageio.stream.FileImageInputStream.finalize()
  • javax.imageio.stream.FileImageOutputStream.finalize()
  • javax.imageio.stream.ImageInputStreamImpl.finalize()
  • javax.imageio.stream.MemoryCacheImageInputStream.finalize()
  • java.awt.** 中的另外三个终结器已经被最终弃用,并且独立于这个 JEP 从 Java 18 中移除。)
http://www.xdnf.cn/news/18713.html

相关文章:

  • Nuxt.js@4 中管理 HTML <head> 标签
  • AI 伦理的 “灰色地带”:数据隐私与技术创新如何平衡?
  • 零知开源——基于STM32F103RBT6和ADXL335实现SG90舵机姿态控制系统
  • Coze用户账号设置修改用户头像-前端源码
  • 深度学习之第三课PyTorch( MNIST 手写数字识别神经网络模型)
  • AI创业公司:Freya 金融语音AI Agent
  • 电池分选机:破解电池性能一致性难题的自动化方案|深圳比斯特
  • 【VS2022】背景设置详细教程(背景透明)
  • 智数园区-前台
  • Linux的奇妙冒险———进程信号
  • 算法每日一题 | 入门-分支结构-肥胖问题
  • java 并发编程八股-多线程篇
  • 【iOS】内存管理及部分Runtime复习
  • Kubernetes高可用架构设计:多Master节点部署与etcd集群运维深度指南
  • centos7 安装coze
  • ZYNQ [Petalinux的运行]
  • Pytorch框架的训练测试以及优化
  • 数据结构青铜到王者第三话---ArrayList与顺序表(2)
  • 区块链技术原理(18)-以太坊共识机制
  • 哈夫曼树详解
  • 神经网络|(十五)概率论基础知识-协方差标准化和皮尔逊相关系数
  • 人机协作,温暖升级:有鹿机器人与保洁张阿姨的故事
  • 2025年06月 Python(二级)真题解析#中国电子学会#全国青少年软件编程等级考试
  • Python Day 33 JavaScript BOM 与 DOM 核心笔记整合
  • Linux(从入门到精通)
  • Elasticsearch JVM调优:核心参数与关键技巧
  • 2025生成式引擎优化(GEO)技术研究报告:技术演进、行业应用与服务商能力选择指南
  • 《微服务架构下API网关流量控制Bug复盘:从熔断失效到全链路防护》
  • 解析电商本地生活竞争:从我店模式创新到生态协同的进化路径
  • 基坑监测报警系统方案:实时监测数据联动响应方式