0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

JVMの仕組み

0
Posted at

はじめに

私はかれこれ4年近く Kotlin を触ってきました。
しかし、ふとした時に JVM で書いたプログラムが実行される仕組みについて、他の人にうまく説明できないことに気づきました。

そのため、この記事では自分の言語化と、知識の再取得を兼ねてJVMの仕組みについてまとめます。

コンパイル

Javaのコードはコンパイルすることによって、 .class ファイルに変換されます。これはバイトコードと呼ばれ、JVMが解釈して実行するために作られた中間表現です。

実行の流れ

  1. JVM起動
  2. ロード(クラスローダーが必要な .class ファイルを読み込む)
  3. リンク(クラスが破損していないかの検証や参照の解決)
  4. 初期化(static フィールドの初期化など)
  5. main メソッド実行

覚えておきたいこと

  • バイトコードは1行ずつ実行される
    • つまり、インタプリタ実行
  • これを改善するために「JITコンパイラ」というのがある
    • 実行時にコンパイルを行い、処理を最適化する
    • Javaは javac によるクラスファイルへのコンパイルと、この実行時のコンパイルがある
  • JVMはスタックマシン
    • 「スタック」と呼ばれる領域に命令を Push / Pop しながらプログラムを実行していく

JVM には種類がある

  • JVM の仕様は Java 仮想マシン仕様によって規定されているが、抽象的
    • .class ファイルを読み込んで正しく実行できればOK
    • あとはJVMの実装者次第
  • 各種ベンダが独自 JVM を提供している
    • e.g.
      • Oracle HotSpot VM -> HotSpot という JIT コンパイラを採用
      • Oracle Graal VM -> Graal という JIT コンパイラを採用。AOT コンパイルでのネイティブイメージ化もされている

AOT コンパイルとは

  • 事前コンパイル
    • JITコンパイルと異なり、 JVM 起動前にネイティブバイナリ( = OS が解釈できるコード)にコンパイル
  • HotSpot VM でも Java 9 から実験的に導入

JVM のメモリ管理(HotSpot VM Java8 の場合)

Pasted image 20260515235846.png

生成されたオブジェクトはすべて Heap で管理される。
Java では変数はオブジェクトそのものではなく参照を保持している。逆に参照されていないオブジェクトは削除される。これがGCである。

GC

  • GC はとてもコストがかかる
  • GC 用のスレッドが必要
  • GC 対象のアプリケーションスレッドを止めてしまう
    • これがまさに Garbage Collection TIme!!
  • GCにより長時間アプリケーションが泊まる現象を Stop the World (STW)と呼ぶ
  • GC にはいろいろなアルゴリズムがある
    • Mark & Sweep
    • Copy
    • 世代別
  • HotSpotVM での GC の種類は様々…だけどほぼすべて「世代別」が基本となっている
    • シリアル型
    • パラレル型
    • CMS
    • G1

Heap の Young領域と Old 領域

  • Heapには Young 領域Old 領域 がある
  • オブジェクトはまず Young 領域に作られる
  • Young 領域がいっぱいになってきたら、 Young 領域だけ GC が実行される
    • これを マイナーGC という
  • GCされずに削除されなかった回数はカウントされる
  • マイナーGCを繰り返す中でいつまでも残り、カウントが多くなったオブジェクトは、 Old 領域 に移動する
  • もし、Old 領域もいっぱいになってきた場合、 Heap 全域にGCが走る
    • これを *メジャー(Full) GC という

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?