Наближення внутрішніх служб Java / JVM [закрито]


15

Я програмував на Java близько 8 років, і я досить добре знаю мову як розробник, але моя мета - поглибити свої знання про внутрішні справи. Я брав курси бакалавра з дизайну ПЛ, але вони були дуже широкими академічними оглядами (у Схемі, ІІРК).

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


2
Мій особистий підхід мав би бути (і є) знайти справжню причину для всіх тих маленьких випадків "чому саме так працює" у Java. Як визначається автоматичний бокс, як працюють загальні типи. А що з var-args? Що насправді робить SUPERпрапор у файлах класу? Більшість цього описується в специфікації JVM, але це потребує певної роботи, щоб дістати її звідти та у ваш мозок ;-)
Йоахім Зауер

Відповіді:


13

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

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

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

Переглянути збирання сміття - це, мабуть, хороша ідея. Швидкий пошук знайшов цю статтю доктора Доббса про сміттєвий GC, що спочатку перебуває на Java. Я не знаю, чи це хороший вступ. Я припускаю, що ви вже знаєте про збирачі сміття та покоління сміття; якщо ні, то ви хочете прочитати їх першими.


3

Деякі додаткові ідеї:

  • Приєднуйтесь до проекту OpenJDK . Нічого не перемагає розуміння внутрішніх програм деяких програм, взломавши його!
  • Подивіться, як інші мови JVM (наприклад, Clojure або Scala) генерують код для JVM
  • Зробіть міні-проект, який вас цікавить і вимагає використання внутрішніх програм JVM. Можливо, використовуючи щось на зразок ASM для маніпулювання байт-кодом ..

2

Якщо ви ще не знайомі з форматом байт-коду Java, то спробуйте створити крихітний компілятор, який створює дійсний байт-код Java (або асемблер Jasmin) і змусить його правильно працювати.

Бачити "Hello World" або "4" (дано 2 + 2), створені вашим кодом, дуже задовольняє.


1

Окрім сказаного всім, перегляньте сторінку Настроювання продуктивності Java . Він містить багато статей про збирання сміття та налаштування продуктивності загалом. Він також містить список книг про налаштування ефективності, які можуть бути цікавими і для вас.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.