JEP 草案:不能为null的值类型

💡 原文中文,约1400字,阅读约需4分钟。
📝

内容提要

该文章讨论了Java平台中值类类型的堆扁平化问题,并提出了一种新的类型,该类型的值集中不包含null,从而使存储更紧凑,并在运行时进行其他优化目标。

🎯

关键要点

  • Java 目前有类和记录引用类型,计划添加值记录和值类型。
  • C# 引入值类型已有 20 多年,动机是缺乏标识的特殊对象。
  • 堆扁平化是一种优化方法,可以减少内存占用和提高定位性。
  • 值类类型的堆扁平化效率不高,因为需要考虑空引用。
  • 封装 Integer 需要额外的位用于空标志,导致内存占用增加。
  • 值类的扁平化受到对象和引用完整性要求的限制。
  • 原始类型的字段在创建时被隐式初始化为零值,避免了空值问题。
  • 如果有一种类型表示值类实例的引用但不表示 null,可以减少存储空间占用。
  • 新类型的值集中不包含 null,支持自动创建默认值。
  • 较大的值类可以选择不存储 null 的字段和数组中的非原子编码。
  • 支持现有类的兼容迁移,将这些属性应用于 Java 平台中的值类。
➡️

继续阅读