Red de conocimiento informático - Material del sitio web - Cómo ver la implementación de métodos locales en java

Cómo ver la implementación de métodos locales en java

Descargue el código fuente de JDK. El código fuente de JDK completo está disponible en openJDK. El código fuente de JDK consta de cuatro lenguajes: C++, Java, C y ensamblador. El cuerpo principal de la JVM es C++, la parte JNI es C++, las clases de herramientas están escritas en Java y la JVM está mezclada con código ensamblador. Ruta: openjdk-7-fcs-src-b147\jdk\src\share\native\java\lang\System.c Encuentre esto

/* Registre solo los métodos críticos para el rendimiento */

métodos estáticos JNINativeMethod[] = {

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

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

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

};

La implementación del método debe estar en la parte JVM, la ruta es openjdk -7-fcs-src-b147\hotspot\src\share, la implementación de diferentes Los sistemas operativos son diferentes, debería estar en el correspondiente En el paquete del sistema operativo, encontré la implementación de nanosegundos en el directorio de Windows

jlong ​​​​os::javaTimeNanos() {

if (!has_ performance_count) {

return javaTimeMillis() * NANOS_PER_MILLISEC; // lo mejor que podemos hacer.

} else {

LARGE_INTEGER current_ count;

QueryPerformanceCounter(¤t_count) ;

doble corriente = as_long(current_count);

doble frecuencia = rendimiento _frecuencia;

jlong ​​​​tiempo = (jlong)((actual/frecuencia) * NANOS_PER_SEC );

tiempo de retorno;

}

}

Esto es más interesante de ver.

Esto es lo mejor que podemos hacer

Soy demasiado vago para buscar más detalles. No tengo un entorno aquí, no hay IDE. , si hay alguno, puedo encontrarlo con unos pocos clics. Conclusión final: performance_frequency,QueryPerformanceCounter;

Esta es una función API de Windows C. En cuanto a esta función, busque en Google