在哪里找到java.lang本地方法的源代码?

63
我对JNI有些了解,我想看看在java.lang包中一些本机方法的机器特定实现。例如Thread#currentThread()
我在[JDK_HOME]/jre/bin中找到了一堆DLL文件,但是像我所说的,我正在尝试寻找源代码。
有人知道本机源代码在哪里可以找到吗?它是否可用,或者被Sun(哦,我是说“我们要赢”Oracle)归类了?
2个回答

36
对于JDK6,您可以从java.net下载源代码。对于java.lang,故事始于j2se/src/share/native/java/lang/,然后搜索...... JDK7稍微重新排列了目录结构。
一些方法(例如Object.hashCode)可能是由hotspot实现的,而不是或同时通过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

主要是通过 JVM_* 接口(这个接口叫什么名字呢?)来实现,虽然也有一些是通过 HotSpot 实现的,但它为 VM 本身提供了一个相当不错的抽象层。 - C. K. Young
我特别喜欢的是,字节码验证器仅使用 JNI 和 JVM_* 接口来实现,而不会触及任何 HotSpot 内部。 :-) - C. K. Young

12

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接