2010-02-18 11 views
50

Estoy vagamente familiarizado con el JNI, y tengo curiosidad por ver la implementación específica de mi máquina para algunos métodos nativos en el paquete java.lang. Thread#currentThread(), por ejemplo.¿Dónde encontrar el código fuente de los métodos nativos de java.lang?

He encontrado un montón de archivos DLL en [JDK_HOME]/jre/bin, pero como he dicho, estoy tratando de encontrar el código fuente.

¿Alguien sabe dónde se puede encontrar el código fuente nativo? ¿Está incluso disponible, o está clasificado por Sun (me refiero a Oracle, "estamos en ello para ganarlo")?

Respuesta

32

Para JDK6 puede descargar la fuente desde java.net. Para java.lang, la historia comienza en j2se/src/share/native/java/lang/, y luego busca ... JDK7 reorganiza un poco la estructura del directorio.

Algunos métodos, como Object.hashCode, pueden implementarse mediante un punto de acceso en su lugar o además a través de JNI/Java.

JDK6 se licencia libremente a través de la licencia de investigación de Java (JRL) y la licencia de uso interno de Java (JIUL). JDK7 y OpenJDK6 tienen licencia bajo GPL 2 con la excepción CLASSPATH (en términos generales, puede vincularse sin capturar el virus GNU). Yo no soy un abogado.

( BTW: Los abogados reales le gustaría señalar que todavía soy un empleado de Sun Microsystems Sun Reino Unido ya no existe Es ahora Oracle...)

Update (Adición de ubicación para Thread.c): http://hg.openjdk.java.net/jdk7/jdk7/jdk/file/9b8c96f96a0f/src/share/native/java/lang/Thread.c

+0

Tipo de HotSpot a través de HotSpot, aunque principalmente a través de la interfaz 'JVM_ *' (¿a qué se llama esa interfaz?), Que proporciona una capa de abstracción bastante buena para la propia máquina virtual. –

+0

Me gusta especialmente el hecho de que el verificador de bytecode se implemente usando _only_ JNI y la interfaz 'JVM_ *', sin tocar ningún elemento interno de HotSpot. :-) –

Cuestiones relacionadas