gpt4 book ai didi

java - 为什么不从下一个 JVM 中删除类型删除?

转载 作者:IT老高 更新时间:2023-10-28 21:15:17 25 4
gpt4 key购买 nike

Java 在 Java 5 中引入了带有泛型的类型删除,因此它们可以在旧版本的 Java 上工作。这是兼容性的权衡。我们已经失去了兼容性 [1] [2] [3]--字节码可以在较新版本的JVM上运行,但不能在较早版本上运行。这看起来是更糟糕的选择:我们已经丢失了类型信息,我们仍然无法在旧版本上运行为新版本 JVM 编译的字节码。发生了什么?

具体来说,我问是否有任何技术原因导致无法在下一版本的 JVM 中删除类型删除(假设,像以前的版本一样,它的字节码无论如何都无法在上一版本上运行)。

[3]:类型删除可以以类似于 retrolambda 的方式向后移植对于那些真正喜欢它的人。

编辑:我认为对向后与向前兼容性定义的讨论掩盖了这个问题。

最佳答案

将来会在某种程度上删除删除project valhalla为值类型启用专门的实现。

或者更准确地说,类型删除实际上意味着没有泛型的类型特化,而 valhalla 将引入对原语的特化。

Specifically I'm asking if there are any technical reasons why type erasure couldn't be removed in the next version of the JVM



表现。您不必为泛型类型的所有组合生成专门的代码,实例或生成的类不必携带类型标记、多态内联缓存和运行时类型检查(编译器生成的 instanceof 检查)保持简单,我们仍然通过编译时检查获得大部分类型安全。

当然也有很多缺点,但已经做出了权衡,问题是什么会激励 JVM 开发人员改变这种权衡。

这也可能是一个兼容性问题,可能有代码执行未经检查的强制转换以通过依赖类型删除来滥用泛型集合,如果强制执行类型约束就会中断。

关于java - 为什么不从下一个 JVM 中删除类型删除?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38055867/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com