Java / JVM内部へのアプローチ[終了]


15

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

誰かが詳細な調査を開始するためのルートを提案できますか?具体的には、特定のトピック(ガベージコレクションなど)がありますか?JVMの内部とJavaプログラミング言語の設計に関するまともな高レベルの本はありますか?私の現在のアプローチは、JVM仕様から開始し、必要に応じて調査することです。


2
私の個人的なアプローチは、Javaでの「なぜこのように機能するのか」というごくわずかなケースの本当の理由を見つけることです(そしてそうすることです)。オートボクシングの定義方法、ジェネリック型の動作方法。var-argsはどうですか?何をしないSUPERクラスファイル内のフラグは、実際のですか?そのほとんどはJVM仕様自体に記述されていますが、そこから抜け出して脳に入るにはいくらかの作業が必要です;
Joachim Sauer

回答:


13

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

また、OracleのBrian Goetzが投稿したLambda Expression Translationドキュメントもご覧ください。Java8で追加されるラムダ(本質的にはクロージャー)の翻訳に使用される戦略について説明しています。

Hotspot VMのソースコードをOpenJDKから入手することもできます。プールの奥深くに潜りたい場合は、JDK 8のラムダサポートを備えjavacコンパイラのアーリーアクセスバージョン(hgリポジトリ)も入手できます。

ガベージコレクションを調べることは、おそらく良い考えです。JavaのガベージファーストGCに関するDobbs博士の記事を簡単に検索しました。それが良い紹介かどうかわかりません。マークアンドスイープガベージコレクターについては既にご存知だと思います。そうでない場合は、最初にそれらを読んでください。


3

いくつかの追加のアイデア:

  • OpenJDKプロジェクトに参加してください。一部のソフトウェアの内部をハッキングして理解するのに勝るものはありません!
  • 他のJVM言語(ClojureやScalaなど)がJVMのコードを生成する方法を見てください
  • やるミニプロジェクトをあなたと関心はJVMの内部を使用する必要があること。おそらくASMのようなものを使用してバイトコードを操作します。

2

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

コードによって生成された「Hello World」または「4」(2 + 2を指定)を見るのは非常に満足です。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.