我对JNI模糊不清,我很想看到java.lang包中某些本机方法的机器特定实现。例如Thread#currentThread()
。
我在[JDK_HOME] / jre / bin中找到了一堆DLL,但就像我说的那样,我试图找到源代码。
有谁知道可以找到原生源代码的位置?它是否可用,或者它是否被Sun分类(oops我的意思是“我们在其中赢得它”Oracle?)
答案 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。