回答:
数年前にJavaを使い始めたときに、このことを少ししました。私のアプローチは、VM仕様を読み、クラスの逆アセンブルされたバイトコードを表示するjavap -cの出力を調べることでした。また、javaバイトコードアセンブラーを使用して、特定のバイトコードを持つjavaクラスを作成してみました。試してみたい場合は、jasminというアセンブラがあります。
また、OracleのBrian Goetzが投稿したLambda Expression Translationドキュメントもご覧ください。Java8で追加されるラムダ(本質的にはクロージャー)の翻訳に使用される戦略について説明しています。
Hotspot VMのソースコードをOpenJDKから入手することもできます。プールの奥深くに潜りたい場合は、JDK 8のラムダサポートを備えたjavacコンパイラのアーリーアクセスバージョン(hgリポジトリ)も入手できます。
ガベージコレクションを調べることは、おそらく良い考えです。JavaのガベージファーストGCに関するDobbs博士の記事を簡単に検索しました。それが良い紹介かどうかわかりません。マークアンドスイープガベージコレクターについては既にご存知だと思います。そうでない場合は、最初にそれらを読んでください。
Javaバイトコード形式にまだ慣れていない場合は、有効なJavaバイトコード(またはJasminアセンブラー)を作成して正常に実行させる小さなコンパイラーの作成を検討してください。
コードによって生成された「Hello World」または「4」(2 + 2を指定)を見るのは非常に満足です。
他の皆が言ったことに加えて、Java Performance Tuningページをチェックしてください。一般的なガベージコレクションとパフォーマンスチューニングに関する多くの記事が含まれています。また、あなたにとっても興味深いかもしれないパフォーマンスチューニングブックのリストが含まれています。
SUPER
クラスファイル内のフラグは、実際のですか?そのほとんどはJVM仕様自体に記述されていますが、そこから抜け出して脳に入るにはいくらかの作業が必要です;