2010-02-18 13 views
50

Ho vagamente familiarità con lo JNI e sono curioso di vedere la mia implementazione specifica della macchina per alcuni metodi nativi nel pacchetto java.lang. Thread#currentThread(), ad esempio.Dove trovare il codice sorgente per i metodi nativi di java.lang?

Ho trovato un sacco di DLL in [JDK_HOME]/jre/bin, ma come ho detto sto cercando di trovare il codice sorgente.

Qualcuno sa dove è possibile trovare il codice sorgente nativo? È anche disponibile, o è classificato da Sun (oops intendo "We Are In It To Win It" Oracle)?

risposta

32

Per JDK6 è possibile scaricare la sorgente da java.net. Per java.lang la storia inizia da j2se/src/share/native/java/lang/, quindi cerca ... JDK7 riorganizza un po 'la struttura delle directory.

Alcuni metodi, come Object.hashCode, possono essere implementati dall'hotspot o in aggiunta a tramite JNI/Java.

JDK6 è concesso in licenza liberamente tramite la Licenza di ricerca Java (JRL) e la Licenza d'uso interno Java (JIUL). JDK7 e OpenJDK6 sono concessi in licenza con GPL 2 con eccezione CLASSPATH (in linea di massima è possibile collegarsi ad esso senza catturare il virus GNU). Non sono un avvocato.

( BTW: I veri avvocati vorrebbero far notare che io sono ancora un dipendente della Sun Microsystems Sun nel Regno Unito non è più E 'ora Oracle...)

Update (Aggiunta posizione per Thread.c): http://hg.openjdk.java.net/jdk7/jdk7/jdk/file/9b8c96f96a0f/src/share/native/java/lang/Thread.c

+0

Sort-of tramite HotSpot, anche se principalmente attraverso l'interfaccia 'JVM_ *' (cosa viene chiamata _ questa interfaccia?), Che fornisce un livello di astrazione piuttosto piacevole per la VM stessa. –

+0

Apprezzo in particolare il fatto che il verificatore del bytecode sia implementato usando _only_JNI e l'interfaccia 'JVM_ *', senza toccare alcun interno di HotSpot. :-) –

Problemi correlati