Каноническая справка по внутренним компонентам JVM для программистов / разработчиков
Название довольно хорошо отражает мой вопрос. Мне интересно, есть ли хороший ресурс или точка отсчета для вопросов о том, как JVM (не только HotSpot, но это, очевидно, место для старта) реализует или обрабатывает определенную функциональность? Я не ищу вещи, которые есть в JLS или JVM Spec - я знаю, чтобы пойти туда первым.
Например: пытаясь понять проблемы производительности, мы часто вступаем в разговоры не о том, что говорит спецификация, а о том, как выглядят современные лучшие практики в практических реализациях. Например, существует некоторая городская мифология, которая говорит, что "конечные классы работают лучше в Java, потому что JVM может встроить или иным образом оптимизировать такие вещи". Есть ли общий ресурс, к которому мы можем обратиться, чтобы оценить эти заявления?
Я предлагаю ответ на свой собственный вопрос, со ссылками на HotSpot. А как насчет предложений других поставщиков? Специфика для маленьких JVM? Многоядерная специфика? Специфика платформ, если они имеют значение? Специфика к другим языкам JVM?
Просто чтобы предотвратить пару потенциальных жалоб: 1) Речь идет не о поиске преждевременных оптимизаций (и на самом деле, лучшее понимание платформы должно отговорить более образованного разработчика!); и 2) я знаю, что Java-программисты должны сосредоточиться на хорошем, переносимом, выполняемом везде коде, но для многих из нас особенности платформы в конечном итоге имеют значение!
Это было вдохновлено некоторыми полезными комментариями по конкретному вопросу Thorbjørn Ravn Andersen. Я рад собрать еще несколько более полезных примеров, помимо того, что я привел выше, чтобы мотивировать, почему люди могут хотеть такие виды ресурсов.
Некоторые интересные вопросы по SO: оптимизация вызова хвоста в JVM, функции Killer JVM, оптимизации, которые завтра будут бесполезны, различия между реализациями JVM.
Отредактировано, чтобы добавить: я присуждаю ответ либо лучшей упомянутой индивидуальной ссылке, либо кому-то, кто предоставляет указатель на веб-сайт (возможно, созданный в ответ на этот вопрос), который лучше всего концентрирует / каталогизирует мудрость реализации JVM и практические последствия для клиентские языки и разработчики.
2 ответа
- Вики OpenJDK "JVM Internals" - это место для начала HotSpot
- Техническая документация Oracle SE 6 Performance и ее предшественники дают много полезного, хотя для моего вопроса и не организованы.
- О синхронизации для HotSpot смотрите мой ответ здесь.
Некоторое время назад я собрал краткое резюме о том, что должен знать продвинутый программист о внутренностях jvm и помочь ему лучше понять параллелизм, gc, jit и т. Д. Это концентрированное резюме, основанное на спецификации и OpenJDK.