Javaコラム Javaエンジニアのためのお役立ちコラム

JavaVMとは?仕組みと構成やJavaVM環境で動く言語6つを紹介

2021年03月08日
SE
JavaVMとはどのようなものなのでしょうか。
PM
Java Virtual Machineの略で、Java仮想マシンとも言われます。

Javaとは?

Javaとは、オブジェクト指向を特徴とするプログラミング言語の1つです。1996年にリリースされて以来、現在まで、世界中で広く使用されています。

Javaの特徴として、「Write once, run anywhere」という言葉があります。これは、プログラムを一度書けば、どこでも実行できるという意味で、OSやマシン環境といったプラットフォームにプログラムコードが依存しないことを意味しています。

Javaでできること

Javaでは、幅広い分野のプログラムを開発することが可能です。

WebアプリやWebサービスでJavaを使用している例としては、TwitterやEVERNOTEなどのサービスがあります。また、OpenOfficeなどのデスクトップアプリ、ゲームなどでもJavaが使われます。また、スマホのAndroidアプリでは、Javaが多く使われています。

家電やIoTなど、組み込み用途でもJavaの採用が多くなっています。

JavaVMとは?

Java VMは、Java Virtual Machineの略で、Java仮想マシンとも言われます。Javaプログラムの実行に必要なソフトウェアです。

Javaの特徴である「一度書けばどこでも実行できる」ことを実現するために、仮想マシン上でプログラムを実行するための仕組みがJava VMといえます。

JavaVMの仕組み

Javaで記述されたソースコードは、コンパイラにより、バイトコードと呼ばれる中間コードに変換されます。

JavaVMはこのバイトコードを、WindowsやmacOS、Linuxなど、OSやプロセッサの環境に応じたコードに変換します。

このように、JavaVMが実行環境に合わせたネイティブコード(機械語)に変換して実行するので、1つのソースコードをどこでも実行できるようになります。

JavaVMの用途

JavaVMによって、WindowsやLinuxといった様々な環境でJavaプログラムが利用できます。

またJavaVMは、JVM言語と呼ばれる様々な言語でも利用されます。他のプログラム言語でも、Javaと同じ仕様の中間コードに変換することで、JVMを利用して様々な環境での実行を実現できます。

JavaVMのメリットとデメリット

JavaVMのメリットは、OSに依存しないマルチプラットフォームを実現できることです。コンパイル済みのプログラムを、様々なプラットフォーム上で動かすことができます。

デメリットとしては、C言語のようなコンパイラがネイティブコードを生成する言語と比較すると、実行速度が遅くなることがあります。また、ハードウェアを直接制御するような用途には使用できません。

JavaVMの構成4つ

Java VMのアーキテクチャは、大きく分けると、4つのシステムで構成されています。

コード実行のExecution Engine、データ配置のRuntime Data Area、ヒープメモリ管理のGarbage Collector、クラスロードのClass Loaderです。各機能の概要について、以下で説明します。

JavaVMの構成1:Execution Engine

Execution Engineでは、コードを実行します。与えられたクラスファイルのバイトコードをネイティブコード(機械語)に変換し、命令語の単位で実行します。

コードの実行は、インタープリター方式で命令語をひとつずつ実行する方法と、JITコンパイラを利用する方法があります。

JavaVMの構成2:Runtime Data Area

Runtime Data AreaはJavaVMのメモリ領域で、Javaアプリケーションを実行する際に使用するデータを配置します。

クラス毎の情報管理に利用するメソッド領域、インスタンスとインスタンスのメンバーフィールドを管理するヒープ領域、ローカル変数などスレッド毎のデータを管理するスタック領域などに、分けられています。

JavaVMの構成3:Garbage Collector

Garbage Collectorは、ヒープメモリの管理システムです。ヒープの空き容量が少なくなると、ヒープメモリ領域のオブジェクトを探索し、参照されていないオブジェクトを削除します。また、不要になった領域は、再利用可能となります。

プログラムを実行するJavaコマンドでヒープ領域のサイズを指定することで、Garbage Collectorの動作を制御することができます。

JavaVMの構成4:Class Loader

Javaのソースコードは、コンパイラによりバイトコードに変換され、クラスのバイナリファイル(.class)が生成されます。Class Loaderは、このクラスのファイルをロード、リンク、初期化します。

ロードは、ブートストラップクラスローダ、エクステンションクラスローダ、アプリケーションクラスローダの3つで構成されています。

リンクは、検証、準備、解決の3つのプロセスから成ります。

JavaVM環境で動く言語6つ

Java以外にも、Java VMを利用して実行するように設計されたプログラミング言語があります。バイトコードは、元々Javaの中間コードとして開発されましたが、他の言語でもバイトコードに変換することで、Java VMを利用して様々な環境で実行することができます。

Java VM環境で動く言語の代表的なものを以下に紹介します。

JavaVM環境で動く言語1:Java

Java VM環境で動く言語の代表は、Java言語でしょう。Java VMは元々、Javaの「プログラムを一度書けば、どこでも実行できる」という思想を実現するために、開発されました。

Javaは、企業システム、Webサービス、ゲーム、家電、IoTなど、世界中の幅広い分野で使われている言語です。

オブジェクト指向、強い静的型付け、ガーベージコレクション、マルチスレッドなどを特徴としています。

JavaVM環境で動く言語2:JRuby

JRubyは、JavaVM上でRuby言語を動作させるソフトウェアです。オープンソースで開発されています。

Rubyというのは、日本で開発されたオブジェクト指向スクリプト言語で、Webアプリケーションで多く使われている言語です。

JRubyでは、JavaやRubyの多様なライブラリを利用可能で、両方の言語の機能を兼ね備えています。

JavaVM環境で動く言語3:Jython

Jythonは、スクリプト言語PythonをJavaVM上で動作させるソフトウェアです。Pythonというのは、シンプルな文法と豊富な基本ライブラリが特徴のオブジェクト指向スクリプト言語です。

JythonはPythonの標準ライブラリをほとんど含んでいます。また、Javaライブラリが利用可能です。Javaと違い、コンパイルせずに実行できるので、迅速に開発できます。

JavaVM環境で動く言語4:Scala

Scalaという名前は、スケーラブル言語(scalable language)を意味しています。近年普及してきたJava VMで動く言語です。

オブジェクト指向プログラミングと関数型プログラミングの2つのパラダイムを組合わせたマルチパラダイムの言語です。

静的型付け言語のため、コンパイル時に型に関するエラー検出がしやすいです。

JavaVM環境で動く言語5:Groovy

Groovyは、動的型付けのプログラミング言語で、Java VMで動く言語です。オープンソースとして2003年から開発されました。

Groovyの文法はJavaとよく似ています。概念や機能についてはRubyの影響を受けており、Java派生のRubyライクな言語とも言われています。

スクリプト言語の機能もあり、Rubyのようなシンプルさもあって、Javaよりも簡潔でわかりやすい特徴があります。また、GrailsというWebアプリケーションフレームワークを利用することもできます。

JavaVM環境で動く言語6:Kotlin

Kotlinは、JetBrains社が2011年に発表したJava VMで動く言語で、2012年にオープンソース化されています。Java言語をより簡潔で安全に改良した産業用汎用言語として開発されました。

ScalaやGroovyの構文や機能を採用しています。コンパイルや動作は、Java同様に速いと言われています。

Kotlinは、Androidの開発言語として公式認定され、Android Studioで簡単に環境構築でき、シェアを広げています。また、ポータルサイトなどのWebサービスでも利用されています。

名前が似ているJava用語5つ

Javaなんとかという名前の用語は、APIだったり環境だったり色々あり、慣れないうちは混乱することも多いでしょう。用語の概念を正しく把握することが重要です。

ここではよく使われるJava用語のうち、Java EE、Java ME、Java SE、JRE、JDKの概要を説明します。

名前が似ているJava用語1:Java EE

JavaEEは、「Java Platform, Enterprise Edition」の略です。大規模システム向けの開発プラットフォームです。企業システムの開発などに使われます。

JavaEEは、標準機能を提供するJava SEの拡張機能の位置づけですので、JavaSEと共に使う必要があります。サーバー起動などの機能を提供しています。

名前が似ているJava用語2:Java ME

Java MEは、「Java Platform, Micro Edition」の略です。家電や携帯電話など、モバイルおよび組み込み機器で主に使用されるAPIをまとめたものです。

メモリ容量などの資源が限られる小型デバイス上向けに、Javaを実行するためのAPIと仮想マシンを提供します。

名前が似ているJava用語3:Java SE

Java SEは、「Java Platform, Standard Edition」の略です。Javaの標準的な機能を提供するAPIをまとめたものです。

Stringクラスのような基本的なクラスなどが、Java SEに含まれています。デスクトップアプリケーションなど、基本的なシステムを開発する際に使用します。

名前が似ているJava用語4:JRE

JREは、Java Runtime Environmentの略で、Java実行環境やJavaランタイムと呼ばれています。

JREをOSにインストールすることによって、Javaアプリケーションが実行可能となります。アプリケーションはJVM上で実行されますが、JREにはJVMが含まれています。

名前が似ているJava用語5:JDK

JDKは、Java Development Kitの略で、Java開発環境と呼ばれています。Javaプログラムの開発や実行に必要なプログラムを提供しています。

Javaソースコードのコンパイルやデバッグを行うためには、JDKをインストールする必要があります。例えば、Javaソースプログラムをコンパイルするときに使うコマンドjavacも、JDKに含まれています。

SE
JavaVMについてよく理解できました。
PM
VMについて理解ができたら、Javaのスキルをあげるために色々と挑戦していきましょう。

JavaVMについて知ろう

大規模システムからIoTまで、Javaは広い分野と様々なプラットフォームで、幅広く使われています。

そんなJavaの特徴である「一度書けばどこでも実行できる」ことを実現するための仕組みであるJava VMについて解説しました。

Java VMの特徴を知って理解を深め、Javaのスキルをあげていきましょう。


Javaでのキャリアアップをお考えの方は、現在募集中の求人情報をご覧ください。

また、直接のエントリーも受け付けております。

エントリー(応募フォーム)

Search

Popular

recommended

Categories

Tags