web-dev-qa-db-fra.com

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

Je connais vaguement le JNI , et je suis curieux de voir mon implémentation spécifique à la machine pour certaines méthodes natives dans le package Java.lang. Thread#currentThread(), par exemple.

J'ai trouvé un tas 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ù se trouve le code source natif? Est-il même disponible, ou est-il classé par Sun (oups je veux dire "nous sommes là pour le gagner" Oracle)?

55
Ben Simmons

Pour JDK6, vous pouvez télécharger la source depuis Java.net . Pour Java.lang l'histoire commence à j2se/src/share/native/Java/lang/, puis recherchez ... JDK7 réorganise un peu la structure du répertoire.

Certaines méthodes, telles que Object.hashCode, peut être implémenté par hotspot à la place ou en plus via JNI/Java.

JDK6 est sous licence libre via les licences Java Research License (JRL) et Java Internal Use License (JIUL). JDK7 et OpenJDK6 sont sous licence GPL 2 avec l'exception CLASSPATH (en gros, vous pouvez y accéder sans attraper le virus GNU). Je ne suis pas avocat.

(BTW: Les vrais avocats voudraient souligner que je suis toujours un employé de Sun Microsystems. Sun UK n'est plus. C'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

34
Tom Hawtin - tackline

Vous pouvez consulter le code source de OpenJDK (sous licence GPLv2 avec exception Classpath ). Probablement la meilleure façon d'étudier les composants internes de l'implémentation JDK, sauf si vous voulez être lié par la Java Research License , auquel cas vous pouvez accéder à la --- source JDK 6 .

11
Chris Jester-Young