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;

Google を使用して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 に答える