Где найти исходный код для java.lang встроенных методов?

Я смутно знаком с JNI, и мне любопытно увидеть мою специфичную для машины реализацию некоторых собственных методов в java.lang. Thread#currentThread(), например.

Я нашел кучу DLL в [JDK_HOME]/jre/bin, но, как я уже сказал, я пытаюсь найти исходный код.

Кто-нибудь знает, где найти родной исходный код? Является ли это даже доступным или классифицируется Sun (oops Я имею в виду "Мы в нем, чтобы выиграть это" Oracle)?

Ответ 1

Для JDK6 вы можете скачать исходный код с java.net. Для java.lang история начинается с j2se/src/share/native/java/lang/, а затем поиск... JDK7 немного реорганизует структуру каталогов.

Некоторые методы, такие как Object.hashCode, могут быть реализованы горячей точкой вместо или в дополнение к через JNI/Java.

JDK6 свободно лицензируется через Java Research License (JRL) и Java для внутреннего использования (JIUL). JDK7 и OpenJDK6 лицензируются по лицензии GPL 2 с исключением CLASSPATH (грубо говоря, вы можете ссылаться на него без перехвата вируса GNU). Я не юрист.

(Кстати: настоящие юристы хотели бы отметить, что я все еще работаю в Sun Microsystems. Sun UK больше нет. Теперь это Oracle.)

Обновление (добавление местоположения для Thread.c): http://hg.openjdk.java.net/jdk7/jdk7/jdk/file/9b8c96f96a0f/src/share/native/java/lang/Thread.c

Ответ 2

Вы можете посмотреть исходный код OpenJDK (лицензирован под GPLv2 с исключением Classpath). Вероятно, лучший способ изучить внутренние реализации JDK, если вы не хотите, чтобы связанный Java Research License, и в этом случае вы можете получить доступ к фактическому источник JDK 6.