60 votes

Où trouver le code source des méthodes natives java.lang ?

Je suis vaguement familier avec le JNI et je suis curieux de voir mon implémentation spécifique à la machine pour certaines méthodes natives du paquet java.lang. Thread#currentThread() par exemple.

J'ai trouvé un certain nombre de DLL dans [JDK_HOME]/jre/bin, mais comme je l'ai dit, j'essaie de trouver le code source.

Quelqu'un sait-il où l'on peut trouver le code source natif ? Est-il même disponible, ou est-il classé par Sun (oups je veux dire "We're In It To Win It" Oracle) ?

36voto

Tom Hawtin - tackline Points 82671

Pour JDK6, vous pouvez télécharger la source à partir de java.net . Pour java.lang l'histoire commence à j2se/src/share/native/java/lang/ et ensuite chercher... Le JDK7 réorganise un peu la structure des répertoires.

Certaines méthodes, telles que Object.hashCode peut être mis en œuvre par hotspot à la place ou en plus de JNI/Java.

Le JDK6 fait l'objet d'une licence libre par le biais de la Java Research License (JRL) et de la Java Internal Use License (JIUL). JDK7 et OpenJDK6 sont sous licence GPL 2 avec exception CLASSPATH (en gros, vous pouvez créer un lien vers ces logiciels sans attraper le virus GNU). Je ne suis pas juriste.

( BTW : Les vrais avocats aimeraient souligner que je suis toujours un employé de Sun Microsystems. Sun UK n'est plus. Il est maintenant Oracle.)

Mise à jour (Ajout de l'emplacement pour Thread.c) : http://hg.openjdk.java.net/jdk7/jdk7/jdk/file/9b8c96f96a0f/src/share/native/java/lang/Thread.c

0 votes

En quelque sorte par le biais de HotSpot, mais surtout par le biais de la JVM_* interface (ce que es Cette interface s'appelle ?), qui fournit une couche d'abstraction assez agréable pour la VM elle-même.

0 votes

J'apprécie particulièrement le fait que le vérificateur de bytecode est implémenté en utilisant sólo JNI et le JVM_* sans toucher aux composants internes de HotSpot :-)

12voto

Chris Jester-Young Points 102876

Vous pouvez consulter le code source de OpenJDK (sous licence GPLv2 avec exception Classpath ). C'est probablement la meilleure façon d'étudier les internes de l'implémentation du JDK, à moins que vous ne souhaitiez être lié par la norme Licence de recherche Java Dans ce cas, vous pouvez accéder à l'adresse Source du JDK 6 .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X