值类堆扁平化 - JEP 401 的预期 #JVMLS
💡
原文英文,约400词,阅读约需2分钟。
📝
内容提要
项目Valhalla的初步扁平化依赖于四种属性值类型。随着对值类型的深入理解,发现某些属性不适合。JEP 401定义值类实例为无身份和(大部分)不可变。扁平化提高了内存密度,但也增加了访问成本和代码复杂性。C2编译的扁平数组表现最佳,而其他VM组件处理扁平值时可能导致性能下降。
🎯
关键要点
- 项目Valhalla的初步扁平化依赖于四种属性值类型:无身份、不可变、无空值和非原子性。
- 随着对值类型理解的深入,发现无空值并非值类型固有属性,非原子性在Java语言的首次发布中难以实现。
- JEP 401将值类实例定义为无身份和(大部分)不可变,值类模型也放宽了,允许通过抽象值类进行字段继承。
- 扁平化有助于提高内存密度,但也增加了访问成本和代码复杂性。
- C2编译的扁平数组是实现应用程序性能显著提升的理想场景,字段扁平化初期表现不佳,但其对GC工作负载的影响被测量后有所改善。
- 如果C2能够最大限度地利用扁平值,其他虚拟机组件如解释器、运行时或C1在处理扁平值时可能会面临性能下降的问题,这对保持良好的启动时间是一个需要考虑的方面。
➡️