为什么java内部函数仍然有代码?

use*_*579 8 java intrinsics

Java API中有许多内在函数的方法,但在查看源代码时仍然有与它们相关的代码.

例如,Integer.bitCount()是一个内在函数,但如果打开Integer类文件,则可以看到它的代码.

如果编译器/ jvm不一定使用此代码,那么该代码可以用于什么目的?

sak*_*ura 10

根据wiki,IntrinsicFunction 的定义如下:

在编译器理论中,内部函数是可用于给定编程语言的函数,其实现由编译器专门处理.通常,它会替换原始函数调用的一系列自动生成的指令,类似于内联函数.与内联函数不同,编译器对内在函数有深入的了解,因此可以更好地集成它并针对这种情况对其进行优化.这在许多语言中也称为内置函数.

此外,它说,重要和与您的问题相关:

实现内部函数的编译器通常仅在用户请求优化时启用它们,否则回退到由语言运行时环境提供的默认实现.

因此,这意味着在大多数情况下都会使用默认实现,直到不请求或不可能进行优化(这取决于运行JVM的计算机/配置).JVM可以将整个Integer.bitCount()代码替换为优化的机器代码指令.

此外,请查看此讨论,其中使用示例代码很好地解释了这一点.


per*_*cia 5

如果不可能使用内在版本,即在没有提供内在版本的平台上运行,则提供默认实现.