体验 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 通过堆扁平化技术优化内存使用,从而显著提高性能。
➡️