Я программирую на Java около 8 лет, и я достаточно хорошо знаю язык как разработчик, но моя цель - углубить свои знания внутреннего уровня. Я учился на курсах бакалавриата по дизайну PL, но это были очень широкие академические обзоры (в Scheme, IIRC).
Может кто-нибудь предложить маршрут, чтобы начать углубляться в детали? В частности, есть ли конкретные темы (скажем, сборка мусора), которые могут быть более доступными или хорошей отправной точкой? Есть ли достойная книга высокого уровня о внутренностях JVM и дизайне языка программирования Java? Мой текущий подход заключается в том, чтобы начать со спецификаций JVM и исследований по мере необходимости.
SUPER
самом деле делает флаг в файлах классов? Большая часть этого описана в самой спецификации JVM, но это требует некоторой работы, чтобы вывести ее оттуда и в ваш мозг ;-)Ответы:
Я сделал немного, когда начал работать с Java много лет назад. Мой подход состоял в том, чтобы прочитать спецификацию VM и посмотреть вывод javap -c, который отображает дизассемблированный байт-код класса. Я также попытался создать классы Java с определенным байт-кодом, используя ассемблер Java-байт-кода. Есть ассемблер под названием jasmin , если вы хотите попробовать это.
Возможно, вы также захотите взглянуть на документ перевода лямбда-выражений , который опубликовал Брайан Гетц из Oracle, в котором описывается стратегия, которая будет использоваться для перевода лямбда-выражений (по сути, замыканий), добавляемых в Java 8.
Вы также можете получить исходный код для виртуальной машины Hotspot из OpenJDK и раннюю версию компилятора javac с поддержкой лямбды (hg-репозиторий) для JDK 8, если вам действительно хочется погрузиться в глубокий конец пула.
Заглянуть в сборку мусора, наверное, хорошая идея. Быстрый поиск обнаружил эту статью доктора Доббса о сборщике мусора в Java. Я не знаю, хорошее ли это введение. Я предполагаю, что вы уже знаете о сборщиках мусора и меток; если нет, то сначала вы захотите прочитать об этом.
источник
Некоторые дополнительные идеи:
источник
Если вы еще не знакомы с форматом байт-кода Java, подумайте о написании крошечного компилятора, который создает допустимый байт-код Java (или ассемблер Jasmin) и заставляет его работать правильно.
Просмотр «Hello World» или «4» (с учетом 2 + 2), сгенерированный вашим кодом, очень радует.
источник
В дополнение к тому, что сказали все остальные, проверьте страницу настройки производительности Java . Он содержит много статей по сборке мусора и настройке производительности в целом. Он также содержит список книг по настройке производительности, которые могут быть вам интересны.
источник