Приближение к внутренним компонентам Java / JVM [закрыто]

15

Я программирую на Java около 8 лет, и я достаточно хорошо знаю язык как разработчик, но моя цель - углубить свои знания внутреннего уровня. Я учился на курсах бакалавриата по дизайну PL, но это были очень широкие академические обзоры (в Scheme, IIRC).

Может кто-нибудь предложить маршрут, чтобы начать углубляться в детали? В частности, есть ли конкретные темы (скажем, сборка мусора), которые могут быть более доступными или хорошей отправной точкой? Есть ли достойная книга высокого уровня о внутренностях JVM и дизайне языка программирования Java? Мой текущий подход заключается в том, чтобы начать со спецификаций JVM и исследований по мере необходимости.

spinning_plate
источник
2
Мой личный подход состоял бы в том, чтобы найти реальную причину для всех тех маленьких «почему именно так работает» в Java. Как определяется автобокс, как работают универсальные типы. Что насчет вар-аргов? Что на SUPERсамом деле делает флаг в файлах классов? Большая часть этого описана в самой спецификации JVM, но это требует некоторой работы, чтобы вывести ее оттуда и в ваш мозг ;-)
Joachim Sauer

Ответы:

13

Я сделал немного, когда начал работать с Java много лет назад. Мой подход состоял в том, чтобы прочитать спецификацию VM и посмотреть вывод javap -c, который отображает дизассемблированный байт-код класса. Я также попытался создать классы Java с определенным байт-кодом, используя ассемблер Java-байт-кода. Есть ассемблер под названием jasmin , если вы хотите попробовать это.

Возможно, вы также захотите взглянуть на документ перевода лямбда-выражений , который опубликовал Брайан Гетц из Oracle, в котором описывается стратегия, которая будет использоваться для перевода лямбда-выражений (по сути, замыканий), добавляемых в Java 8.

Вы также можете получить исходный код для виртуальной машины Hotspot из OpenJDK и раннюю версию компилятора javac с поддержкой лямбды (hg-репозиторий) для JDK 8, если вам действительно хочется погрузиться в глубокий конец пула.

Заглянуть в сборку мусора, наверное, хорошая идея. Быстрый поиск обнаружил эту статью доктора Доббса о сборщике мусора в Java. Я не знаю, хорошее ли это введение. Я предполагаю, что вы уже знаете о сборщиках мусора и меток; если нет, то сначала вы захотите прочитать об этом.

Дэвид Конрад
источник
3

Некоторые дополнительные идеи:

  • Примите участие в проекте OpenJDK . Ничто не сравнится с пониманием внутренних возможностей некоторого программного обеспечения, взломав его!
  • Посмотрите, как другие языки JVM (например, Clojure или Scala) генерируют код для JVM
  • Сделайте мини-проект, который вас интересует и требует использования внутренних компонентов JVM. Возможно, использовать что-то вроде ASM для манипулирования байт-кодом ..
mikera
источник
2

Если вы еще не знакомы с форматом байт-кода Java, подумайте о написании крошечного компилятора, который создает допустимый байт-код Java (или ассемблер Jasmin) и заставляет его работать правильно.

Просмотр «Hello World» или «4» (с учетом 2 + 2), сгенерированный вашим кодом, очень радует.


источник
1

В дополнение к тому, что сказали все остальные, проверьте страницу настройки производительности Java . Он содержит много статей по сборке мусора и настройке производительности в целом. Он также содержит список книг по настройке производительности, которые могут быть вам интересны.

Андреас Йоханссон
источник