ネイティブコードと仮想機械の違い
プロセッサが直接動かすか、中間の層をはさむか
- ネイティブコードと仮想機械は、どちらもアプリケーションを動かす方法ですが、プロセッサとの間に中間の層があるかどうかが違います。
- ネイティブコードは、プロセッサが直接実行できる機械語の記述で、プロセッサや OS ごとに異なり、実行が速い反面、そのままでは別の環境で動きません。仮想機械(VM)は、ハードウェアや OS を抽象化して違いを吸収する中間の層で、一度作れば様々な環境で動かせる反面、ネイティブコードより遅くなります。
- 速さを取るのがネイティブコード、移植しやすさを取るのが仮想機械と結び付けます。
ネイティブコードとは
ネイティブコードは、アプリケーションなどのプログラムを、プロセッサが直接実行できるように変換した機械語の記述です。人間が読む言語のソースコードや、中間の形式である中間言語・バイトコードとは違い、プロセッサがそのまま実行できます。
間に別の層をはさまないので、実行は高速です。一方、機械語はプロセッサの種類ごとに異なり、特定のプロセッサや OS に依存します。そのため、あるプロセッサ向けのネイティブコードは、異なるプロセッサや OS ではそのまま動作しません。
仮想機械(VM)とは
アプリケーションの下に、ハードウェアや OS を抽象化した仮想的な環境を、中間の層として設ける技術を仮想化といい、この中間の層を仮想機械(VM)と呼びます。プロセッサや OS の違いを吸収する役割があります。
仮想機械はソフトウェアの層で実現するので、専用のハードウェアは必要ありません。仮想機械向けに作ったアプリケーションは、仮想機械が移植されたプロセッサと OS であればそのまま動作するので、一度開発すれば様々な環境で動かせる(ポータビリティが高い)のが強みです。一方、中間コードを読み解く処理が挟まるため、ネイティブコードより実行は遅くなります。
Android では、Java 言語で書いたソースコードを中間言語に変換して実行します。初期の Android の実行環境だった Dalvik 仮想マシンは、省メモリの環境向けです。
違いを表で比べる
| 比べること | ネイティブコード | 仮想機械(VM) |
|---|---|---|
| 何か | プロセッサが直接実行できる機械語の記述 | ハードウェアや OS を抽象化し、違いを吸収する中間の層 |
| 実行の速さ | 速い(プロセッサが直接実行する) | 中間コードを読み解く処理が入るため、遅い |
| 移植のしやすさ | プロセッサや OS に依存し、別の環境ではそのまま動かない | 仮想機械が移植された環境なら、そのまま動く(ポータビリティが高い) |
| 専用のハードウェア | — | 不要(ソフトウェアの層) |
| 取り違えやすい誤り | 異なるプロセッサや OS でも変更なしに動作する、仮想機械上より遅い | 専用のハードウェアが必要、ネイティブコードより速い |
試験での問われ方
モバイルシステム技術検定2級では、第8章「モバイル端末のソフトウェア技術」で出ます。もちこ道場の第8章の問題では、次のような問われ方をしています。
- 穴埋め(ネイティブコード): 「プログラムを、プロセッサが直接実行できるように変換した機械語の記述」の空欄にネイティブコードを選ぶ。選択肢にはソースコード・中間言語・バイトコードが並びます。
- 穴埋め(仮想機械): 「ハードウェアや OS を抽象化し、違いを吸収する中間の層」の空欄に仮想機械(VM)を選ぶ。選択肢にはネイティブコード・シェル・ミドルウェアが並びます。
- 組み合わせ: 「プロセッサが直接実行可能な記述の [1] と、中間の層の [2]」にネイティブコードと仮想機械を選ぶ。
- 長文の空欄補充: Android の実行環境の説明の中で、仮想機械やネイティブコードの空欄を選ぶ。JIT や AOT の空欄も出ます。
- 記述を選ぶ: 「ネイティブコードは異なるプロセッサや OS でも変更なしに動く」「仮想機械上のアプリはネイティブコードより速い」「仮想機械は専用のハードウェアが必要」のような誤りを見抜く。
覚え方
- ネイティブコードは「直接」、仮想機械は「間にはさむ」と、まず結び付けます。直接実行するので速く、間に層があるので遅くなる、と速さの違いが決まります。
- 移植のしやすさは、仮想機械の側です。ハードウェアや OS の違いを中間の層が吸収してくれるので、一度作れば様々な環境で動きます。
- 誤りの記述は、速さと移植しやすさを入れ替えていることが多いので、「速いのはネイティブ、移しやすいのは仮想機械」と確かめます。
第8章のほかの用語は「第8章 モバイル端末のソフトウェア技術の要点」にまとめています。
第8章の問題を2問、解いてみる
もちこ道場の第8章の問題です。演習画面と同じ解説(図解・選択肢ごとの解説)を付けています。
問1
アプリケーションなどのプログラムを、プロセッサが直接実行できるように変換した機械語の記述を1という。
答えと解説を見る
正解は 1(ネイティブコード)です。
【概要】
プロセッサがプログラムを実行する形式に関する問題である。人間が理解する言語からプロセッサが直に実行できる機械語へ変換される。
【図解】実験的機能
図解は実験的機能です。内容を簡略化しているため、公式テキストの記載と異なることがあります。
【各選択肢の解説】
- 1. ネイティブコード正解あなたの解答 ネイティブコードはプロセッサが直接実行可能な機械語の記述であるため空欄(1)の記述と一致する。
- 2. ソースコードあなたの解答 ソースコードはプログラミング言語で記述された人間が理解しやすいプログラムであり、機械語を示す空欄(1)に合わない。
- 3. 中間言語あなたの解答 中間言語は仮想機械等で処理するために変換される形式であり、プロセッサが直接実行可能な機械語の空欄(1)に合わない。
- 4. バイトコードあなたの解答 バイトコードは仮想実行環境等で読み解く中間形式のコードであり、プロセッサが直接解釈する空欄(1)には合わない。
問2
Android 7.0以降のOSでは、アプリケーションのインストール時間の短縮と処理の高速性を両立させるため、JITと1の両方を動作させるハイブリッド方式が用いられている。
答えと解説を見る
正解は 3(AOT)です。
【概要】
Android OSにおけるアプリ実行環境のコンパイル方式に関する問題である。インストール時間短縮と高速実行を両立させる。
【図解】実験的機能
図解は実験的機能です。内容を簡略化しているため、公式テキストの記載と異なることがあります。
【各選択肢の解説】
- 1. ARTあなたの解答 ARTはAndroidの実行環境全体を指す用語であり、コンパイル方式を示す空欄(1)に合致しない。
- 2. Dalvikあなたの解答 Dalvikは初期の実行環境であり、コンパイル方式を示す空欄(1)に合致しない。
- 3. AOT正解あなたの解答 AOTは事前コンパイル方式であり、JITとの併用で空欄(1)の記述に合致する。
- 4. SDKあなたの解答 SDKはアプリ開発に必要な開発キットであり、実行時のコンパイル方式を示す空欄(1)に合致しない。
第8章は約140問。いま解いた問題と同じ形で、選択肢ごとの解説と図解が付いています。まずは登録なしで、第1章の142問から解き方を試せます(第2章からはプランで解けます)。
よくある質問
ミドルウェアは、仮想機械と同じものですか?
別のものです。ミドルウェアは、複数のアプリケーションに共通する機能をまとめたソフトウェアで、OS とアプリケーションの中間に位置します。あらかじめ用意したライブラリと、そこから提供される API を使って、効率よく開発するためのものです。ハードウェアや OS の違いを吸収する中間の層は、仮想機械です。
JIT と AOT は、どう違いますか?
どちらも Android アプリのコンパイル方式です。JIT は実行時に並行してコードを変換する方式で、パフォーマンスが低下する欠点がありました。AOT は実行前に機械語へ事前に変換する方式で、実行は速くなりますが、インストールに時間がかかります。Android 7.0 以降は、両方を動かすハイブリッド方式で、高速な処理とインストール時間の短縮を両立しています。
iOS のアプリは、仮想機械の上で動きますか?
iOS はネイティブ実行で、Android の初期の実行環境だった Dalvik 仮想マシンは搭載していません。開発言語は、ネイティブ実行できて高速に処理できる Objective-C と、スクリプト言語の簡易性を持つ Swift があります。
もちこ道場
章ごとの問題と本番形式の模擬試験で、合格の力を確かめる
公式テキストの全13章から作ったオリジナルの予想問題を、スマホ・PC で解ける Web 演習サービスです(運営者が作っています)。
500円
31日間・買い切り・自動更新なし
- 全13章 1,804問○
- 選択肢ごとの解説○
- 全問の解説に図解○
- 模擬試験(100問・100分)なし
1,000円
31日間・買い切り・自動更新なし
- 全13章 1,804問○
- 選択肢ごとの解説○
- 全問の解説に図解○
- 模擬試験(100問・100分)○
無料体験は登録不要です。
次に読む
記事の確認問題と同じく、選択肢ごとの解説と図解が付いた問題を、スマホ・PC で続けて解けます。
モバイルシステム技術検定2級の第8章「モバイル端末のソフトウェア技術」で問われる用語を、6つのまとまりと取り違えやすい組み合わせで整理しました。第8章の問題を2問、その場で解いて確かめられます。
モバイルシステム技術検定2級の勉強時間は、公式の目安がありません。合格した人の体験談と解説サイトの目安を集めた平均(約60時間)と、1日2時間で1か月の計画を週ごとにまとめました。
出題範囲は、2026年11月6日にMCPC の公式ページで確認しました。用語の説明は、もちこ道場の問題と解説をもとにまとめたものです。