web-dev-qa-db-ja.com

Java.langネイティブメソッドのソースコードはどこにありますか?

私は [〜#〜] jni [〜#〜] について漠然と精通しており、Java.langパッケージのいくつかのネイティブメソッドのマシン固有の実装を知りたいと思っています。 Thread#currentThread()など。

[JDK_HOME]/jre/binに多数のDLLを見つけましたが、私が言ったように、ソースコードを見つけようとしています。

ネイティブソースコードがどこにあるか知っている人はいますか?それは利用可能ですか、それともSunによって分類されていますか?

55
Ben Simmons

JDK6の場合、ソースを Java.net からダウンロードできます。 Java.langの場合、ストーリーはj2se/src/share/native/Java/lang/で始まり、次に検索します... JDK7はディレクトリ構造を少し並べ替えます。

Object.hashCodeなどの一部のメソッドは、JNI/Javaの代わりに、またはそれに加えて、ホットスポットによって実装される場合があります。

JDK6は、Java Research License(JRL)およびJava Internal Use License(JIUL)を通じて自由にライセンスされます。)JDK7およびOpenJDK6は、GPATH 2の下でCLASSPATH例外でライセンスされています(大まかに言えば、GNUウイルスを捕まえることなくリンクすることができます。)私は弁護士ではありません。

ところで:本当の弁護士は、私がまだSun Microsystemsの従業員であることを指摘したいと思います。 Sun UKはもうありません。これはnowOracleです。)

更新(Thread.cの場所を追加): http://hg.openjdk.Java.net/jdk7/jdk7/jdk/file/9b8c96f96a0f/src/share/native/Java/lang/Thread.c

34

OpenJDK のソースコードを見ることができます( GPLv2 with Classpath Exception でライセンスされています)。 Java Research Licence に縛られたくない場合を除き、JDK実装の内部を研究するための最良の方法です。この場合、実際の JDK 6ソース にアクセスできます。

11