【问题标题】:Where to find source code for java.lang native methods? [closed]在哪里可以找到 java.lang 本机方法的源代码? [关闭]
【发布时间】:2011-01-18 13:20:16
【问题描述】:

我对@9​​87654321@ 有点熟悉,我很想看看java.lang 包中一些本机方法的特定于机器的实现。以Thread#currentThread() 为例。

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

有谁知道在哪里可以找到本机源代码?它甚至可用,还是被 Sun 分类(哎呀,我的意思是“我们在它中赢得它”Oracle)?

【问题讨论】:

    标签: java java-native-interface native


    【解决方案1】:

    对于 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 在 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

    【讨论】:

    • 通过 HotSpot 进行排序,尽管主要通过 JVM_* 接口(该接口叫什么?),它为 VM 本身提供了一个相当不错的抽象层。
    • 我特别喜欢字节码验证器是使用 JNI 和JVM_* 接口实现的,而不涉及任何HotSpot 内部结构。 :-)
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-02-23
      • 1970-01-01
      • 2012-08-19
      • 1970-01-01
      • 2010-10-01
      • 2012-07-06
      相关资源
      最近更新 更多