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

时间:2014-04-13 09:28:55

标签: java intrinsics

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

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

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

3 个答案:

答案 0 :(得分:10)

根据wikiIntrinsic函数的定义如下:

  

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

进一步说,这对您的问题很重要且相关:

  

实现内部函数的编译器通常会启用它们   只有当用户请求优化时,才会回退到   语言运行时环境提供的默认实现   否则。

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

此外,请检查此discussion,这可以很好地解释示例代码。

答案 1 :(得分:5)

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

答案 2 :(得分:-2)

在编译器理论中,固有函数是可用于给定编程语言的函数,其实现由编译器专门处理。通常,它将一系列自动生成的指令替换为原始函数调用,类似于内联函数。

https://en.wikipedia.org/wiki/Intrinsic_function