JVM を読む - はじめに
はじめまして。こちらは Peyang (ぺやんぐ)です。
私は Java や JVM 関連の技術が大変大好きで,日々 JVM の仕組みや Java 言語の特性を遊びながら学んでいます。
ここでは,その中で得られた知見を記事として執筆し,また共有しながら皆々様とわいわいできればと思います。
Java って? JVM との関係は?
Java 言語は組み込み向けのプログラミング言語として 90 年代に確立されたオブジェクト指向型の言語です。
当時としては画期的な「専用仮想マシン上で動作する仕組み」を取り入れ,「Write Once, Run Anywhere」(一度書けばどこでも動く)などと謳い広く広まりました。
さらに人気を加速させた理由として,ガベージ・コレクションによる自動メモリ管理やセキュリティを意識した実行環境,マルチスレッドの標準サポートなど,
当時の C や C++ にはなかった高レベルなハイテク機能を備えたことで,世の開発者たちに強いインパクトを与えました。
さて,「専用仮想マシン」といいましたが,これは Java Virtual Machine(JVM) のことを指します。
Java 厨の皆々様なら,もちろんご存知だと思いますが,実は Java で書かれたプログラムは直接ハードウェアでは動きません。
というのも Java のコードをコンパイルするとバイトコードが作成されます。これを JVM が食べることで機械語に翻訳して実行をしています。
流れをまとめますと:
- Java ソースコード(.java)をコンパイルすると…
- JVM バイトコード(.class) になり…
- JVM がバイトコードを解釈して機械語にして実行する
というわけでございます。
つまり Java 言語は JVM 上で動作するプログラミング言語であり,JVM が Java の実行環境を提供しているというわけです。
JVM は Java 言語だけでなく Scala や Kotlin などの他の言語もサポートしており,Java エコシステム全体を支える重要なコンポーネントとなっています。
なぜこのようなことができるのでしょうか,皆様も興味津々だと思いますので,今後の記事で詳しくその理由だったりを解説します。
JVM の仕組みを学ぶ
JVM の仕組みを学ぶことは Java 言語の特性を理解する上で非常に重要です。
JVM の内部構造や動作原理を知ることで Java のパフォーマンスやセキュリティ,或いはメモリ管理の仕組みを深く理解できます。
でもお高いんでしょう?と思われるか方が居るかも分かりませんが,安心してください。
JVM の仕様は The Java® Virtual Machine Specification で公開されていますから, 皆々様これを理解すれば晴れて誰でも Java/JVM 名人というわけでございます。
しかしながらこの仕様書は英語で書かれており,さらに英検3級の私にとって難解な技術的な内容が多く含まれています。
そこで,次の2書を種本として,この仕様書を一緒に読み解いていきたいと思います。
-
Mastering the Java Virtual Machine - Otavio Santana 著
この本は JVM の基本的な概念を解説しており,JVM のアーキテクチャやメモリモデル,ガベージコレクションなどのトピックを扱っています。
隅から隅まで学び尽くしたい方にはあまりおすすめできませんが,JVM の全体像を把握するには最適な入門書です。 -
デコンパイリング Java - Godfrey Nolan 著,松田晃一 訳
この本は Java のデコンパイル技術を解説しており,JVM のバイトコードやクラスファイルの構造を理解するのに役立ちます。
実践的な例やツールの使い方も紹介されており,JVM の内部動作を深く掘り下げられます。
特に日本語で書かれているという点が大変素晴らしく,これもまたおすすめの入門書です。
この記事群の方針
なおこの記事は,実際の JVM の仕様書を読み解くためのガイドとして構成する予定です。(途中で挫折するやもしれませんが…)
なので JVM 仕様書のセクション分けと対応して記事を分けつつ,大事なところは視覚的に図解しながら説明を試みます。
また JVM の仕様書は非常に長大で難解な内容が多いため,各セクションごとに要点をまとめていきます。
さらに実際の JVM の動作を確認するためのサンプルコードや実行結果も掲載し,読者が実際に手を動かしながら学べるようにします。
注意事項
特にここで述べておかなければならない,重要なことが一つございます。
それは私は日本語話者で,この記事や今後の記事も日本語で書くということです。 (こんなに嬉しいことがあるでしょうか!)
しかし,英語の仕様書を私なりに解釈し,それを日本語に再翻訳するというわけでございますから
そこにはもちろん解釈の違いがあったり,人力翻訳エンジンのバグがあったりして実際の仕様と食い違ってしまう部分があるかもしれません。
ですから,あくまでもこの記事は仕様書を読み解くためのガイドであり,正確な仕様書の代わりにはなりません。
(もちろん間違いは都度訂正していきますので,ドシドシご指摘いただければ幸いです。)
ではみなさま,(いくつまで続くか分かりませんが)JVM の世界を一緒に旅していきましょう!
次の記事:
記事リンク
- JVM を読む - はじめに - この記事のことです。
第一章 Introduction
- JVM を読む - 導入 - JVM の基本的なアーキテクチャとコンポーネントを解説します。
第二章 The Structure of the Java Virtual Machine
- JVM を読む - JVM の構造その1 - JVM のクラスフォーマットのなかでも特に型について解説します。
- JVM を読む - JVM の構造その2 - JVM の実行時のデータ領域について解説します。
- JVM を読む - JVM の構造その3 - JVM のフレームについて解説します。
- JVM を読む - JVM の構造その4 - JVM のオブジェクトの表現と浮動小数点数の計算について解説します。
- JVM を読む - JVM の構造その5 - JVM の特別なメソッドと例外処理について解説します。
- JVM を読む - JVM の構造その6 - JVM の命令セットと型の関係について解説します。
- JVM を読む - JVM の構造その7 - JVM のオブジェクトの作成と操作,オペランド・スタックの管理について解説します。
- JVM を読む - JVM の構造その8 - JVM のクラス・ライブラリとメソッドの呼び出しについて解説します。
第三章 Compiling for the Java Virtual Machine
- JVM を読む - JVM をハックする その1 - JVM の命令を手打ちするための環境を構築します。
- JVM を読む - JVM をハックする その2 - JVM の命令を手打ちするための基本的な知識を学びます。
- JVM を読む - JVM をハックする その3 - 制御変数の使い方や,定数の扱いについて学びます。
- JVM を読む - JVM をハックする その4 - 算術演算の方法と,実行時定数プールの使い方について学びます。
- JVM を読む - JVM をハックする その5 - 制御変数の様々な扱い方について学びます。
まとめ
いかがでしたか?
この記事では JVM の基本的な概念と,JVM の仕様書を読み解くためのガイドとしての位置付けを説明しました。
今後の記事では JVM の各コンポーネントや動作原理を詳しく解説していきますので,ぜひお楽しみに!
Discussion