在哪里可以findjava.lang本地方法的源代码?
我对JNI非常熟悉,我很好奇地看到我的机器特定的实现java.lang包中的一些本地方法。 例如, Thread#currentThread()
。
我在[JDK_HOME] / jre / bin中发现了一堆DLL,但就像我说的,我试图find源代码。
有谁知道本地源代码可以find的地方? 它是否可用,还是由Sun分类(哎呀,我的意思是“我们就是为了赢得它”Oracle)?
对于JDK6,您可以从java.net下载源代码。 对于java.lang
,故事从j2se/src/share/native/java/lang/
,然后search… JDK7稍微重新安排目录结构。
一些方法,比如Object.hashCode
,可以通过热点来实现,或者通过JNI / Java来实现。
JDK6通过Java研究许可(JRL)和Java内部使用许可(JIUL)免费获得许可。 JDK7和OpenJDK6在GPL 2下获得CLASSPATH例外许可(粗略地说,你可以链接到它,而不会捕获GNU病毒)。 我不是律师。
( 顺便说一下,真正的律师们想指出,我仍然是Sun Microsystems的雇员, Sun UK 不在了 , 现在是Oracle)。
更新(为Thread.c添加位置): http : //hg.openjdk.java.net/jdk7/jdk7/jdk/file/9b8c96f96a0f/src/share/native/java/lang/Thread.c
您可以查看OpenJDK的源代码(在带有Classpathexception的GPLv2下获得许可)。 可能是研究JDK实现内部机制的最佳方式,除非您想受Java Research License的约束,在这种情况下,您可以访问实际的JDK 6源代码 。