プログラマ/開発者向けの JVM 内部に関する正規リファレンス [終了]
-
09-10-2019 - |
質問
タイトルは私の質問をよく捉えています。JVM (HotSpot だけではありませんが、そこから始めるのは明らかです) が特定の機能をどのように実装または処理するかについての質問に適切なリソースや出発点があるかどうか疑問に思っています。そこにあるものを探しているわけではない JLS または JVM仕様 -- まずそこに行くべきだとわかっています。
例えば:パフォーマンスの問題を理解しようとするとき、多くの場合、仕様に記載されている内容ではなく、実際の実装における現代のベスト プラクティスがどのようなものであるかについて会話が始まります。たとえば、「JVMがそのようなことをインラインまたは最適化できるため、Javaで最終クラスのパフォーマンスが向上します」という都市神話がいくつかあります。浮かんでいるこれらの主張を評価するために、私たちが頼ることができる一般的なリソースはありますか?
HotSpot 固有の参考資料を使用して、私自身の質問に対する回答を提供します。他のベンダーの製品についてはどうですか?小規模な JVM に特有のものですか?マルチコアの仕様?違いがあるとしたらプラットフォームの詳細は何ですか?他の JVM 言語に特有のものはありますか?
潜在的な苦情をいくつか回避するために:1) これは時期尚早な最適化を求めることではありません (そして実際、プラットフォームをより深く理解することで、より教育を受けた開発者は思いとどまるはずです!)。2) Java プログラマは、優れた、移植性があり、どこでも実行できるコードに重点を置くべきであることはわかっていますが、私たちの多くにとって、最終的にはプラットフォームの詳細が重要になります。
これは、あるサイトに関するいくつかの有益なコメントに触発されました。 具体的な質問 による トールビョルン ラヴン・アンダーセン. 。人々がなぜこの種のリソースを必要とするのかを動機付けるために、上で引用したもの以外にもさらに役立つ例をいくつか収集したいと思います。
SO に関する興味深い関連質問: JVM での末尾呼び出しの最適化, キラー JVM 機能, 明日には役に立たなくなる最適化, JVM実装間の違い.
編集して追加: 回答は、言及された個人の最も優れた参考文献のいずれかに授与します。 または JVM 実装の知恵と、クライアント言語と開発者に対する実際的な影響を最もよく集中/カタログ化している Web サイト (おそらくこの質問に応じて構築された) へのポインタを提供する人。
解決
- の OpenJDK「JVM内部」wiki HotSpot の出発点です
- オラクルの Java SE 6 パフォーマンス ホワイト ペーパー およびその前任者は多くの洞察を提供しますが、それ自体が私の質問に合わせて整理されているわけではありません
- HotSpot の同期については、私の記事を参照してください。 ここで答えてください.
他のヒント
少し前に簡単にまとめました 上級プログラマが JVM 内部について知っておくべきこと そして同時実行性、GC、JIT などを理解できるように手助けします。より良い。仕様とOpenJDKに基づいた集中的なまとめです。