gpt4 book ai didi

java - HotSpot 能否在不内联它们的情况下优化掉对纯方法的冗余调用?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:24:35 25 4
gpt4 key购买 nike

Pure methods是那些没有副作用的:它们的唯一作用是返回一个值,该值是其参数的函数。

使用相同的参数对同一个纯方法的两次调用将返回相同的值。那么,假设两次调用具有相同参数的纯方法,HotSpot 是否可以优化掉第二次调用,简单地重新使用第一次调用的值?

例如:

int add(int x, int y) {
return x + y;
}

int addTwice(int x, int y) {
return add(x, y) + add(x, y);
}

如果 HotSpot 没有在 addTwice 中内联 add 它是否理解 addpure 并因此调用添加一次,返回值加倍?

当然,这样一个微不足道的 [mcve] 不太可能引起直接兴趣,但由于内联、发散控制流、自动生成代码等原因,在实践中可能会出现类似情况。

最佳答案

HotSpot 目前还不能做到这一点。

如果没有内联,方法调用对于 JIT 编译器来说通常是不透明的。很难进行跨方法优化。原因之一是方法入口点是易变的,即由于 JIT 编译、重新编译、反优化、JVMTI 调用等,它可以在运行时同时更改。当 HotSpot 进行显式方法调用时,它不知道目标方法是否被解释或编译,是否收集 JIT 统计信息,是否正在调试,内部是否有断点,是否启用了 JVMTI 方法事件。

另一方面,即使存在这样的优化,也不会太有用。纯方法的功能非常有限,因此它们通常短小精悍,并且有很多机会被内联。内联后,JIT 更容易在同一编译范围内进行优化。

关于java - HotSpot 能否在不内联它们的情况下优化掉对纯方法的冗余调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48047139/

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