ä¸è½½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(¤t_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
温馨提示:答案为网友推荐,仅供参考