gpt4 book ai didi

performance - 破解 JVM 以避免不必要的边界检查和强制转换

转载 作者:行者123 更新时间:2023-12-03 15:10:08 26 4
gpt4 key购买 nike

有一些语言支持足够强大的类型系统,它们可以在编译时证明代码不会在其边界之外寻址数组。我的问题是,如果我们要将这样的语言编译到 JVM,是否有某种方法可以利用它来提高性能并删除每次访问数组时发生的数组边界检查?

1) 我知道最近的 JDK 支持一些数组边界检查消除,但是因为我在编译时知道某些调用是安全的,所以我可以更安全地删除。

2)有些人可能认为这不会对性能产生太大影响,但肯定会影响性能,尤其是在诸如科学计算之类的数组/计算繁重的应用程序中。

关于类型转换的同样问题。我知道某些东西是某种类型,但 Java 不知道,因为它的类型系统有限。有什么方法可以告诉JVM“相信我”并跳过任何检查?

我意识到可能没有办法做到这一点,因为 JVM 通常是分布式的,使用此功能修改 JVM 是否合理?这是已经完成的事情吗?

这是将更强大的类型语言编译到 JVM 中的一个挫折,它仍然受到 Java 限制的阻碍。

最佳答案

原则上,如果没有 proof-carrying code,这无法以安全的方式完成。 (PCC) 基础设施。 PCC 将允许您将您的安全推理嵌入 class文件。您的嵌入证明在类加载时进行检查。如果证明中存在缺陷,则不会加载该类。

如果 JVM 允许您在不需要正式证明的情况下放弃运行时检查,那么,正如 SecurityMatt 所说,它将违背 Java 作为安全平台的原始理念。

JVM 使用一种特殊形式的 PCC 来对方法中的局部变量进行类型检查。类加载机制使用所有局部变量类型信息来检查其正确性,但之后将其丢弃。但这是 JVM 中使用的 PCC 概念的唯一实例。据我所知,JVM 没有通用的 PCC 基础设施。

我曾经听说 JavaCard 平台存在一个支持 Java 的一小部分的平台。不过,我不确定这是否对您的问题有帮助。

关于performance - 破解 JVM 以避免不必要的边界检查和强制转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13272543/

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