质量推广预警 - Java 数组元素对齐:某些方法保证的弱化?

OpenJDK 质量组正在推广使用 OpenJDK 构建来测试 FOSS 项目,以此作为提高版本整体质量的一种方式。此预警是发送给相关项目的定期通信的一部分。要了解有关该计划的更多信息以及如何加入,请在此查看。

Java 数组元素对齐:某些方法保证的弱化?

某些方法对 Java 数组元素对齐做出了过于严格的承诺。目前正在考虑更改MethodHandles::byteArrayViewVarHandleMethodHandles::byteBufferViewVarHandleByteBuffer::alignedSliceByteBuffer::alignmentOffset的实现(以及规范),以弱化它们对 Java 数组元素对齐做出的保证,以便与任意 JVM 实现做出的保证保持一致。

有关更多详细信息,请务必查看JDK-8320247和相关的拉取请求,但简而言之,新行为将是

  • MethodHandles::byteArrayViewVarHandle返回的VarHandle仅支持getset方法,所有其他访问方法都将抛出异常。
  • MethodHandles::byteBufferViewHandle返回的VarHandle仅在使用堆缓冲区时支持getset访问方法,并且在与堆缓冲区一起使用时,所有其他访问方法都将抛出异常。直接字节缓冲区将继续以相同的方式工作。
  • 如果缓冲区是堆缓冲区,并且给定的unitSize大于 1,则ByteBuffer::alignmentOffsetByteBuffer::alignedSlice方法将抛出异常。

如果您对这一潜在更改有相关的反馈,请务必将其提交到core-libs-dev邮件列表,或在拉取请求中留下评论。

~