【プログラミング】機種に依存せずどこでも動く共通命令!「バイトコード(中間コード)」|情報処理問題1000本ノック
基本情報技術者試験、応用情報技術者試験の「プログラミング言語・言語処理系」分野で超頻出の重要キーワード。「バイトコード(Bytecode)」の定義と、コンパイラ方式やインタプリタ方式との実行メカニズムの違いを整理して攻略しましょう。
1. 【 問題 】:テクノロジ系(プログラミング・言語処理系)
【 問題 】 Javaなどのプログラミング言語において、ソースコードをコンパイルした際に作成されるコードに関する記述です。特定のOS(Windows、Mac、Linuxなど)やCPU(x86、ARMなど)の命令セットに依存しない形式に変換された、仮想マシンが解釈して実行するための中間コードはどれか。
(ア)ソースコード(Source Code)
(イ)オブジェクトコード(Object Code)
(ウ)バイトコード(Bytecode)
(エ)ネイティブコード(Native Code)
2. 正解:
正解:(ウ)バイトコード(Bytecode)
3. 解説:「『OSやCPUを選ばない』共通の中間言語!」
バイトコード(Bytecode)は、人間が書いた「ソースコード」と、CPUが直接理解できる「機械語(ネイティブコード)」の中間に位置する汎用的な中間表現(中間コード)です。
バイトコード自体は特定のCPUの命令形式(ネイティブコード)ではないため、各OS用に用意された仮想マシン(Java仮想マシン: JVMなど)が、実行時にその環境に適した機械語へと翻訳・実行(JITコンパイルや解釈実行)します。
| コード種別 | 概要と特徴 | ポータビリティ(可搬性) |
|---|---|---|
| (ア)ソースコード | プログラマがテキスト形式で書いたプログラム命令。 | 人間が読める状態 |
| (ウ)バイトコード (中間コード) |
コンパイラによって生成されるOSやCPUに依存しない形式の中間命令。 | 極めて高い (仮想マシンがあればどこでも動作) |
| (エ)ネイティブコード (機械語/オブジェクト) |
特定ハードウェア(CPU/OS)の命令セットに直接変換された機械語。 | 依存度が極めて高い (別のOSでは動かない) |
1. 理解のコツ:
・「日本語(ソースコード)」を一旦「世界共通の英語(バイトコード)」に直しておき、各国(各OS・CPU)の通訳さん(仮想マシン)にその国の言葉に直して実行してもらう仕組みです。これにより、世界中(どのOS・CPU環境でも)で同じプログラムを動かせるようになります。
2. 試験対策の視点:
・問題文に「OSやCPUに依存しない」「中間コード」「仮想マシン(VM)が解釈」「Javaなどで使用」と来たら、迷わずバイトコードを選択しましょう!
・実行時にバイトコードを瞬時に機械語へ変換して実行速度を上げる技術「JIT(Just-In-Time)コンパイラ」もセットで出題されやすい重要概念です。
4. まとめ
OSやCPUなどのハードウェア環境に依存しない中間形式のプログラムコード。これがバイトコード(中間コード)です。仮想マシンを介して実行することで、高い環境ポータビリティを実現する技術としてしっかり覚えておきましょう!