web-dev-qa-db-ja.com

Java / JVM内部へのアプローチ

私はJavaで約8年間プログラミングしており、開発者として言語をよく知っていますが、私の目標は内部の知識を深めることです。PLで学部課程を受講しましたデザイン、しかしそれらは非常に広範な学術的概要でした(Scheme、IIRC)。

誰かが詳細を掘り下げ始めるためのルートを提案できますか?具体的には、より親しみやすい、または良い出発点となる可能性がある特定のトピック(たとえば、ガベージコレクション)がありますか? JVMの内部とJavaプログラミング言語の設計についての適切な高レベルの本はありますか?私の現在のアプローチは JVM仕様 および必要に応じて調査します。

15
spinning_plate

何年か前にJavaを始めたとき、私はこれを少しやりました。私のアプローチは、 VM仕様 を読み取り、クラスの逆アセンブルされたバイトコードを表示するjavap -cの出力を確認することでした。 Java特定のバイトコードのクラスを、Javaバイトコードアセンブラを使用して作成しました。 jasmin 、それを試したい場合。

また、OracleのBrian Goetzが投稿した Lambda Expression Translationドキュメント を参照することもできます。ラムダを変換するために使用される戦略について説明しています。 (本質的にクロージャ)Java 8。

Hotspot VM OpenJDK からのソースコード、および JDK 8のラムダサポート (hgリポジトリ)を備えたjavacコンパイラー。

ガベージコレクションを調べることは、おそらく良い考えです。クイック検索でこれが見つかりました Dr。 JavaのガベージファーストGCに関するDobbsの記事 。それが良い導入かどうかはわかりません。マークアンドスイープと世代別ガベージコレクターについてはすでにご存じだと思います。そうでない場合は、最初にそれらを読みたいと思うでしょう。

13
David Conrad

追加のアイデア:

  • OpenJDKプロジェクトに参加します。一部のソフトウェアの内部をハックして理解することに勝るものはありません。
  • 他のJVM言語(ClojureやScalaなど)がJVMのコードを生成する方法を見てください
  • 興味があり、JVM内部の使用が必要なmini-projectを実行します。おそらく [〜#〜] asm [〜#〜] のようなものを使用してバイトコードを操作します。
3
mikera

Javaバイトコード形式にまだ慣れていない場合は、有効なJavaバイトコード(またはJasminアセンブラ)を作成する小さなコンパイラを作成してそれを作成することを検討してください。正しく実行します。

コードによって生成された「Hello World」または「4」(2 + 2を指定)を確認することは、非常に満足のいくものです。

2
user1249

他の皆が言ったことに加えて、 Java Performance Tuning ページをチェックしてください。一般的なガベージコレクションとパフォーマンスチューニングに関する記事が多数含まれています。 パフォーマンスチューニングブックのリスト も含まれています。

1