gpt4 book ai didi

java - JVM 什么时候使用内部函数

转载 作者:IT老高 更新时间:2023-10-28 20:58:26 25 4
gpt4 key购买 nike

为什么在 JVM 内部类中存在的某些代码模式被转换为内部函数,而从我自己的类中调用的相同模式却不是。

例子:

bitCount 函数,当从 Integer.bitCount(i) 中调用时,将变成一个内在函数。但是,当复制到我的类(class)然后被调用时,将需要更长的时间来执行。

比较

Integer.bitCount(i) 
MyClass.bitCount(i)


public static int bitCount(int i) {
// HD, Figure 5-2
i = i - ((i >>> 1) & 0x55555555);
i = (i & 0x33333333) + ((i >>> 2) & 0x33333333);
i = (i + (i >>> 4)) & 0x0f0f0f0f;
i = i + (i >>> 8);
i = i + (i >>> 16);
return i & 0x3f;
}

最佳答案

答案很简单:以这种方式定义内部函数是因为存在一种获取函数结果的更快、本地的方式,并且由于指定的映射而应用它。

这根本与编译无关。 Integer.bitCount 的特殊之处在于实现被标记为可替换为原生 asm 指令 POPCNT .基本上,在使用 Integer.bitCount 函数(如果 CPU 支持该指令)时会使用此 native 指令,当您声明自己的函数副本时,将使用正常实现。

为什么JVM能够识别出可以优化的功能?因为它是硬编码的 somewhere在JDK中,这与代码的相似性无关。

关于java - JVM 什么时候使用内部函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19892322/

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