バイトコードとは?

  • Javaの中間表現
  • コンパイルしたら生成されるもの

Javaについて

  • 1996にリリース
  • Write Once, Run AnyWhere
  • アプリケーションが仮想マシン上で実行されるからOSに依存しない

Java仮想(JVN)マシンとは

  • javacとはコマンドで作成されたクラスファイルを実行するコマンド
  • 独自の命名セットを持つ
  • LinuxやMacOS、Windowsなどで動作する

javacコマンドで作成されたクラスファイルを実行する

中間表現とは

特定の環境に依存しない為のデータ構想

  • 抽象構文木
  • 高級言語っぽい形(TypeScriptからJavaScriptにコンパイル)
  • 低級言語っぽい形(Wasm、バイトコードなど)

あらかじめ中間表現にしておいて、そこからプラットフォーム依存形式に変換すると効率が良い

独自の命令セットを持つ

命令セットとは

  • マシンに伝える命令の語彙
    • ロードおよびストア、計算、オペランドストックなど

クラスファイル・バイトコードを覚えるメリット

  • JVNのことがわかる
  • スタックマシンの動作原理に触れられる
  • Javaのクラスファイルをロード時に書き換えることができる
    • マイクラのMOD作成

Java以外のJVM言語

  • Kotlin
  • Scala
  • Clojure

コンパイル方法

javacコマンドでコンパイル

javac ファイル名

実行方法

javaコマンドで実行

java クラスファイル名(拡張子なし)

バイトコード確認

javapコマンドで確認

javap -v クラスファイル名