🖥️ Javaの実行環境とメモリ管理

1. JVM (Java Virtual Machine) の役割

Javaの最大の特徴は「WORA (Write Once, Run Anywhere)」という思想です。これを実現しているのが JVM (Java Virtual Machine:Java仮想マシン) です。

  • 仮想化: Javaのコードは、コンパイルされると「バイトコード」という中間言語になります。JVMは、このバイトコードを解釈し、実行環境(Windows, macOS, Linuxなど)に合わせて適切な機械語に変換して実行します。
  • プラットフォーム非依存性: どのOSでもJVMさえインストールされていれば、同じバイトコードを実行できるため、OSの違いを意識せずにプログラムを動かせます。
  • 実行環境の提供: メモリの割り当てや、プログラムの安全性を保つための実行環境を提供します。

2. メモリ領域の基本

JVMがプログラムを実行する際、メモリは大きく分けて以下の領域に分けられます。

  • スタック領域 (Stack): 主にメソッドの実行や、プリミティブ型の変数(int, booleanなど)、参照型変数(オブジェクトへの「住所」)が格納されます。メソッドの呼び出しや終了に伴ってデータが自動で出し入れされます。
  • ヒープ領域 (Heap): 主にオブジェクト(インスタンス)の本体が格納される領域です。newキーワードで作成されたデータはすべてここに置かれ、プログラムが実行されている間、共有されます。

3. ガベージコレクション (Garbage Collection: GC)

ヒープ領域に作成されたオブジェクトは、いつか誰もそのオブジェクトを参照しなくなる(つまり、不要になる)時が来ます。C言語などの場合、不要になったメモリはプログラマが手動で解放しなければなりませんが、Javaではこれが自動で行われます。

  • 定義: ガベージコレクション (GC) は、ヒープ領域の中で**「どの参照型変数からも参照されなくなった(到達不可能になった)オブジェクト」**を自動的に探し出し、そのメモリを解放する仕組みです。
  • メリット: メモリ管理の手間や、メモリ解放のし忘れによる「メモリリーク」を防ぎ、プログラマはアプリケーションのロジックに集中できます。
  • 動作: GCはJVMが適切なタイミング(メモリが不足してきたときなど)で自動的に実行されます。GCが実行されている間、プログラムの処理が一時停止することがあり、これを「ストップ・ザ・ワールド」と呼びます。

Javaの学習を始める上での主要なトピックはこれで網羅されました。これらの概念を組み合わせることで、複雑なプログラムを作成し、その動作原理を深く理解できるようになります。