【发布时间】:2011-07-02 13:40:45
【问题描述】:
我花了一些时间学习什么是 Java 原生方法,以及它们是在依赖于平台的代码(主要是 C)中实现的。
但是我在哪里可以找到 Java 的那些本机实现?例如: Thread 类的 sleep(long millis) 方法是本机的。但是它的实现代码在哪里???
【问题讨论】:
标签: java
我花了一些时间学习什么是 Java 原生方法,以及它们是在依赖于平台的代码(主要是 C)中实现的。
但是我在哪里可以找到 Java 的那些本机实现?例如: Thread 类的 sleep(long millis) 方法是本机的。但是它的实现代码在哪里???
【问题讨论】:
标签: java
本机代码在 JVM(Java 虚拟机)中实现。 Java 开发人员不应该担心他们的实现,因为它们与虚拟机的内部工作有关。但是,您可以使用 JNI 编写自己的本机方法,或者查看它们是如何为特定 JVM 实现的。
【讨论】:
但我在哪里可以找到 Java 的那些本机实现?
您必须下载某些 JDK 的完整源代码。例如,在 OpenJDK 中,您会发现很多与线程相关的文件:
./jdk/src/share/native/java/lang/Thread.c
【讨论】:
您可以在 JRE 的源代码中找到这些函数的实现。例如。 OpenJDK 6的源代码是here。
【讨论】:
每个 JVM 都有自己的实现。你可以在这里找到 OpenJDK 的实现:http://openjdk.java.net/
【讨论】:
这些代码的实现在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
参考
【讨论】: