体验 JEP 401 值类和对象

💡 原文英文,约1100词,阅读约需4分钟。
📝

内容提要

Valhalla团队发布了早期访问的JDK构建,全面实现了JEP 401:值类和对象(预览)。值对象是仅包含最终字段且没有身份的类实例,使用值类可提升性能,JVM能够优化这些对象。用户可下载体验这一新特性。

🎯

关键要点

  • Valhalla团队发布了早期访问的JDK构建,全面实现了JEP 401:值类和对象(预览)。
  • 值对象是仅包含最终字段且没有身份的类实例,使用值类可提升性能。
  • 用户可以下载体验这一新特性,访问地址为jdk.java.net/valhalla。
  • 在JShell中,可以使用Objects.hasIdentity来区分值对象和常规身份对象。
  • 值对象在大多数方面表现得像身份对象,但==运算符无法判断两个值对象是否相同。
  • 可以使用value关键字声明自己的值类,许多记录声明都是值类的良好候选。
  • 声明值类的一个原因是语义上的简化,避免不必要的复杂性。
  • JVM可以以无法对常规对象进行的方式优化值对象,例如通过堆扁平化技术。
  • 通过使用值对象,可以在性能关键的计算中实现显著的新优化。
  • 这是测试版软件,可能存在一些错误和意外的性能问题,鼓励用户下载并反馈。

延伸问答

JEP 401 的值类和对象有什么特点?

值对象仅包含最终字段且没有身份,使用值类可以提升性能。

如何下载 JEP 401 的早期访问 JDK 构建?

用户可以访问 jdk.java.net/valhalla 下载早期访问的 JDK 构建。

值对象与常规身份对象有什么区别?

值对象没有身份,== 运算符无法判断两个值对象是否相同,而是比较状态是否相等。

为什么要使用值类而不是常规身份类?

使用值类可以避免不必要的复杂性,并允许 JVM 进行更高效的优化。

如何在代码中声明值类?

可以使用 value 关键字声明值类,例如:value record Point(int x, int y) {}。

使用值对象能带来什么性能优化?

值对象允许 JVM 通过堆扁平化技术优化内存使用,从而显著提高性能。

🏷️

标签

➡️

继续阅读