哪里可以找到java.lang本机方法的源代码?

时间:2010-02-18 22:13:36

标签: java java-native-interface native

我对JNI模糊不清,我很想看到java.lang包中某些本机方法的机器特定实现。例如Thread#currentThread()

我在[JDK_HOME] / jre / bin中找到了一堆DLL,但就像我说的那样,我试图找到源代码。

有谁知道可以找到原生源代码的位置?它是否可用,或者它是否被Sun分类(oops我的意思是“我们在其中赢得它”Oracle?)

2 个答案:

答案 0 :(得分:34)

对于JDK6,您可以从java.net下载源代码。对于java.lang,故事从j2se/src/share/native/java/lang/开始,然后搜索... JDK7稍微重新排列目录结构。

某些方法,例如Object.hashCode,可以通过热点实现,也可以通过JNI / Java实现。

JDK6通过Java研究许可证(JRL)和Java内部使用许可证(JIUL)免费许可。 JDK7和OpenJDK6在GPL 2下获得CLASSPATH异常许可(粗略地说,您可以链接到它而不会捕获GNU病毒)。我不是律师。

BTW:真正的律师想指出我仍然是Sun Microsystems的员工。 Sun UK已不复存在。现在现在 Oracle。)

更新(为Thread.c添加位置): http://hg.openjdk.java.net/jdk7/jdk7/jdk/file/9b8c96f96a0f/src/share/native/java/lang/Thread.c

答案 1 :(得分:11)

您可以查看OpenJDK的源代码(在GPLv2 with Classpath Exception下获得许可)。可能是研究JDK实现内部的最佳方法,除非您希望受Java Research Licence的约束,在这种情况下,您可以访问实际的JDK 6 source