0

我正在阅读类路径项目http://fuseyism.com/classpath/doc/中的 Object 类的源代码,并且在 wait() 和其他方法中有对 VMObject 的引用。

public final void wait()
throws IllegalMonitorStateException, InterruptedException {
   VMObject.wait(this, 0, 0);
}

我尝试在 Google 上搜索答案并在#java 频道上提问,但没有人有答案。

4

1 回答 1

1

那么在OpenJDK wait()中看起来是这样的:

public final native void wait(long timeout) throws InterruptedException;

使用谷歌我找到了VMObject的代码

在那里,VMObject.wait()看起来像这样:

static native void wait(Object o, long ms, int ns) throws IllegalMonitorStateException, InterruptedException;

我只是猜测,但我认为 VMObject 是特定于 GNUClassPath 的实现细节,出于某种未知原因,他们决定不直接在“对象”上使用本机调用,而是决定在静态本机调用中增加一层抽象此“VMObject”类中的方法。}

来自Java 语言和虚拟机规范

本机方法是在依赖于平台的代码中实现的,通常用另一种编程语言编写,例如 C、C++、FORTRAN 或汇编语言。本机方法的主体仅以分号形式给出,表示省略了实现,而不是块。

如果您想了解更多关于什么是原生方法,可以阅读这篇文章。

于 2012-07-22T03:41:23.853 回答