當前位置:編程學習大全網 - 源碼下載 - 如何查看java中native方法的實現

如何查看java中native方法的實現

下載JDK源代碼啊,openJDK上有完整的JDK源代碼,JDK源代碼由C++、Java、C、匯編 這四種語言組成。JVM主體是C++寫的,JNI部分是C,工具類是Java寫的,JVM裏混有匯編代碼。路徑:openjdk-7-fcs-src-b147\jdk\src\share\native\java\lang\System.c 找到這個

/* Only register the performance-critical methods */

static JNINativeMethod methods[] = {

{"currentTimeMillis", "()J", (void *)&JVM_CurrentTimeMillis},

{"nanoTime", "()J", (void *)&JVM_NanoTime},

{"arraycopy", "(" OBJ "I" OBJ "II)V", (void *)&JVM_ArrayCopy},

};

方法的實現應該在JVM部分,路徑openjdk-7-fcs-src-b147\hotspot\src\share,不同的操作系統實現不壹樣,應該是在對應的操作系統的包下,我在windows目錄下找到了納秒的實現

jlong os::javaTimeNanos() {

if (!has_performance_count) {

return javaTimeMillis() * NANOS_PER_MILLISEC; // the best we can do.

} else {

LARGE_INTEGER current_count;

QueryPerformanceCounter(&current_count);

double current = as_long(current_count);

double freq = performance_frequency;

jlong time = (jlong)((current/freq) * NANOS_PER_SEC);

return time;

}

}

看到了這個比較有趣的東西。。。

the best we can do.

再詳細的懶得找了。我這沒環境,沒IDE,有環境的話,用IDE幾下子就找到了。最終結論:performance_frequency,QueryPerformanceCounter;

這個就是windows下的C API函數。至於這個函數,可以去google

  • 上一篇:Javagui源代碼
  • 下一篇:如何混淆android代碼以及註意事項
  • copyright 2024編程學習大全網