Java中的本机实现是什么?

2022-09-01 06:32:02

如果我们看一下Java Object类,那么我们可以找到一些方法,例如:

public native int hashCode()
protected native Object clone()

这些本地人是什么,这些方法是如何工作的?


答案 1

这些方法要么是内部的,要么是在Java外部用“本机”代码编写的,也就是说,特定于给定的机器。

您提到的是Intrinsic和JDK的一部分,但您也可以使用Java Native Interface(JNI)自己编写本机方法。这通常使用C来编写方法,但是许多其他语言(例如python)允许您相当轻松地以这种方式编写方法。以这种方式编写代码要么是为了性能,要么是因为它需要访问特定于平台的基础架构,而这在普通java中是无法完成的。

在 的情况下,这是由 JVM 实现的。这是因为哈希码通常与只有JVM知道的东西有关。在早期的JVM上,这与对象在内存中的位置有关 - 在其他JVM上,对象可能会在内存中移动,因此可以使用更复杂(但仍然非常快)的方案。hashcode()


答案 2

大多数本机方法是使用 JNI 实现的,如其他答案中所述。

但是,性能关键型方法(如)通常作为内部函数实现。当字节码被编译成机器码时,Java编译器会识别方法调用并直接内联适当的代码。这显然比通过JNI进行简单的方法要快得多。Object.hashCode

许多人会声称这将返回内存中对象表示的地址。在现代实现中,对象实际上在内存中移动。相反,对象标头的一个区域用于存储值,该值可能是在首次请求值时从内存地址中延迟派生的。Object.hashCode


推荐