【问题标题】:Native methods in JavaJava中的本机方法
【发布时间】:2011-07-02 13:40:45
【问题描述】:

我花了一些时间学习什么是 Java 原生方法,以及它们是在依赖于平台的代码(主要是 C)中实现的。

但是我在哪里可以找到 Java 的那些本机实现?例如: Thread 类的 sleep(long millis) 方法是本机的。但是它的实现代码在哪里???

【问题讨论】:

标签: java


【解决方案1】:

本机代码在 JVM(Java 虚拟机)中实现。 Java 开发人员不应该担心他们的实现,因为它们与虚拟机的内部工作有关。但是,您可以使用 JNI 编写自己的本机方法,或者查看它们是如何为特定 JVM 实现的。

【讨论】:

  • 到jihedamine ...我可以编写自己的本地方法??????多么令人兴奋……你能给我演示一个示例本机方法实现吗?
  • @killerCoder:查看 Google 以获取有关 JNI(Java 本机接口)或可能更好(在我看来)JNA(Java 本机访问)的链接。
【解决方案2】:

但我在哪里可以找到 Java 的那些本机实现?

您必须下载某些 JDK 的完整源代码。例如,在 OpenJDK 中,您会发现很多与线程相关的文件:

./jdk/src/share/native/java/lang/Thread.c

【讨论】:

    【解决方案3】:

    您可以在 JRE 的源代码中找到这些函数的实现。例如。 OpenJDK 6的源代码是here

    【讨论】:

      【解决方案4】:

      每个 JVM 都有自己的实现。你可以在这里找到 OpenJDK 的实现:http://openjdk.java.net/

      【讨论】:

        【解决方案5】:

        这些代码的实现在OpenJDK的源代码中,位于github.com/openjdk/jdk

        java.lang.Runtime 的示例:

        垃圾回收方法的原生代码System.gc()

        JNIEXPORT void JNICALL
        Java_java_lang_Runtime_gc(JNIEnv *env, jobject this)
        {
            JVM_GC();
        }
        
        JVM_ENTRY_NO_ENV(void, JVM_GC(void))
          JVMWrapper("JVM_GC");
          if (!DisableExplicitGC) {
            Universe::heap()->collect(GCCause::_java_lang_system_gc);
          }
        JVM_END
        

        参考

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-07-05
          • 1970-01-01
          • 2014-08-17
          • 1970-01-01
          • 1970-01-01
          • 2019-12-04
          • 2012-11-23
          • 1970-01-01
          相关资源
          最近更新 更多