Java
 Computer >> コンピューター >  >> プログラミング >> Java

Androidアプリはなぜ標準のJava APIとJVMを使わないのか?Dalvik仮想マシンの仕組みを解説

標準のJava APIとJava仮想マシン(JVM)は、主にデスクトップPCやサーバーシステム向けに設計されています。そのため、メモリやバッテリー容量が限られるモバイルデバイスとの相性は必ずしも良くありません。こうした背景から、Googleはモバイル環境向けに独自のAPIと仮想マシンを開発しました。それが「Dalvik仮想マシン(DVM)」です。

Dalvik仮想マシンはAndroidランタイムの中核を担うコンポーネントであり、Android向けに特別に開発されたJVM(Java Virtual Machine)の一部です。DVMは、メモリ管理やマルチスレッド処理といったJavaの重要な機能を活用しています。Javaで書かれたプログラムは、まずJVM向けのバイトコードにコンパイルされ、その後DVM用のバイトコードへと変換されます。

以下では、JVMとDVMそれぞれの仕組みについて詳しく解説します。

Java Virtual Machine(JVM)とは

Java Virtual Machine(JVM)は、Javaバイトコードを実行するためのランタイム環境を提供するアプリケーションです。バイトコードを機械語(ネイティブコード)に変換する役割を担っており、コードのロード、検証、実行、ランタイム環境の提供など、複数の処理を実行できます。

JVMの動作を示した図は以下の通りです。

Androidアプリはなぜ標準のJava APIとJVMを使わないのか?Dalvik仮想マシンの仕組みを解説

Dalvik Virtual Machine(DVM)とは

Dalvik Virtual Machine(DVM)は、スマートフォンなどの低消費電力のハンドヘルドデバイス向けに最適化されたJVMの実装です。DVMは、バッテリー寿命、メモリ使用量、そして全体的なパフォーマンスの観点から、モバイルシステムを最適化するように設計されています。

Android向けのプログラムは、まずJavaで記述され、JVM用のバイトコードにコンパイルされます。その後、このバイトコードはDalvikバイトコードへと翻訳され、.dexファイルおよび.odexファイルとして保存されます。それぞれ「Dalvik実行可能ファイル」「最適化済みDalvik実行可能ファイル」と呼ばれるものです。

DVMの動作を示した図は以下の通りです。

Androidアプリはなぜ標準のJava APIとJVMを使わないのか?Dalvik仮想マシンの仕組みを解説

補足:ART(Android Runtime)への移行

なお、Dalvik仮想マシンはAndroid 5.0(Lollipop)以降、後継となる「ART(Android Runtime)」に置き換えられました。ARTはAOT(Ahead-of-Time)コンパイル方式を採用しており、アプリの起動速度やバッテリー効率をさらに向上させています。ただし、.dex形式のバイトコードという基本的な考え方は引き継がれており、DVMで確立された設計思想は現在のAndroidにも受け継がれています。

  1. Android Camera2 API徹底解説 – 写真・動画を撮影するアプリの作り方

    スマートフォンのカメラは、私たちが最も頻繁に使う機能の一つです。中には、カメラ機能をアプリに組み込んでいるケースも数多くあります。カメラとの連携には、標準的な方法と、カスタマイズされた高度な方法の2つがあります。この違いを理解することは非常に重要であり、そこで登場するのがCamera2 APIです。Camera2とは?Camera2 APIはAPIレベル21から利用可能になっていますが、開発者が扱うアーキテクチャの中でも特に複雑な部類に入ります。このAPIとその前身となるAPIは、開発者がアプリケーション内からカメラを操作できるようにするために用意されました。マイクや音量を操作できるのと同じよ

  2. 【Windows 10/11】「Java仮想マシンを作成できませんでした」エラーの対処法

    Javaは、ゲームやアプリケーション、サーバーサイドプログラムの開発に広く使われている優れた開発ツールの一つです。Javaで書かれたゲームやアプリケーションを実行するには、Java Virtual Machine(JVM:Java仮想マシン)の環境が必要です。 しかし、Javaで開発されたゲームやアプリケーションは、さまざまな理由により予期せずクラッシュしたり、起動に失敗したりすることがあります。その際に表示されるのが、「Could Not Create the Java Virtual Machine. Error: A fatal exception has occurred. Progr