JJUG ナイトセミナ 「Javaのプログラムはどうやって動いているの?」に参加してきました

  • 講師
    • 櫻庭祐一さん
    • @skrb
    • Java in the Boxの方
    • Javaチャンピオン
    • ITpro Hava技術最前線の著者

JVM

JVM

Virtual Machine

Java Virtual Machine

Classファイル

コンパイル

javap

mainを実行するまで

java Test を実行したら

  1. JVM起動
    • JNI_CreateJavaVM()
  2. クラスロード
    • Classファイルの読み込み
    • 使用するクラスを芋づる式にロード
    • java -verbose:class Test
  3. リンク
    • Classファイルが正しいかチェック
      • 改ざん・悪意のあるコードがないか
    • staticフィールドの初期化
      • ただしJavaのコードは実行しない
      • finalでもnullが入る
    • クラス間の関係を解決
      • 継承やら型やら
  4. 初期化
    • staticフィールドの初期化
      • Javaコードも実行
    • staticイニシャライザの実行
  5. main実行

バイトコードの実行

逆ポーランド記法

  • 1 + 2 → 1 2 +
  • (2 + 3) x 5 + (4 - 2) → 2 3 + 5 x 4 2 - +
  • Stack Machineと相性が良い

メモリの状態

  • スレッド毎にStackがある
    • 他にはHeapとMetaspaceがある
    • スタックオーバーフローはStackが溢れた状態

Conclusion

  • Java → Classファイル(バイトコード
  • JVM起動 → クラスロード → リンク → 初期化 → main実行
  • JVM: Stack Machine

 

GC

Why to Use GC

GC (Garbage Collection)

  • メモリの自動管理
  • 不要になったメモリを自動的に回収

Before GC

  • 自前でメモリ管理
  • Cだとmalloc(), calloc(), realloc(), free()

問題点

  • メモリ解放忘れ
  • 二重解放
  • 無効な参照
    • メモリ周りのBUGは修正が難しい

最初のGC

  • 1959: John McCarthy
  • 一般的に使用されだしたのは90年代
    • CPU、Memory性能向上

Mark & Sweep GC

  • 使用中のオブジェクトをマーク
  • マークのないオブジェクトを解放

どうやってマークするか

  • rootから参照を辿る
  • 参照先から参照を辿る
  • 未使用オブジェクトをFree Listへ

    • 次にオブジェクトを配置するときはFree Listから探す
  • compactionでぶつ切れのFree Listを並べる

adv. & dis.

  • adv.
    • 実装がシンプル
    • 参照の書き換えがないため安全 (if not Compaction)
  • Dis.
    • Stop-the-Worldの時間が長い
    • ヒープの断片化がおきやすい (if not Compaction)
    • CompactionをするとStop-the-Worldの時間が長くなる

Copy GC

  • ヒープを二分割
  • 使用する領域は一方のみ
  • 片方から一方へオブジェクトをコピー
  • スイープではなくコピーする

adv. & dis.

  • adv.
  • Dis.
    • ヒープの使用効率が悪い
    • 参照の書き換えがある

世代別GC

Javaで主に使われている

  • 仮説:若いオブジェクトは早く死ぬ
  • 世代別にヒープ管理を行う
    • Young世代:高速なGC → Copy
    • Old世代:安定したGC → Mark & Sweep
  • オブジェクトの年齢:GCを生き延びた回数

特徴

  • M&SとCopyのいいとこどり
  • 領域サイズはチューニングが必要
    • Old世代のGCをなるべく減らす
  • CMS, G1GCなどの派生GCあり

Conclusion

  • M&S、Copy、世代別
    • 60年代から全然変わらない
  • 原理を知って、チューニングに活かす
  • GCと仲良く
  • GCに関しては以下の書籍が詳しい www.amazon.co.jp