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

- システム
エンジニア - JavaVMとはどのようなものなのでしょうか。
- プロジェクト
マネージャー - 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に含まれています。
- システム
エンジニア - JavaVMについてよく理解できました。
- プロジェクト
マネージャー - VMについて理解ができたら、Javaのスキルをあげるために色々と挑戦していきましょう。
JavaVMについて知ろう
大規模システムからIoTまで、Javaは広い分野と様々なプラットフォームで、幅広く使われています。
そんなJavaの特徴である「一度書けばどこでも実行できる」ことを実現するための仕組みであるJava VMについて解説しました。
Java VMの特徴を知って理解を深め、Javaのスキルをあげていきましょう。
FEnetJava・Javaコラムは株式会社オープンアップシステムが運営しています。
株式会社オープンアップシステムはこんな会社です
秋葉原オフィスには株式会社オープンアップシステムをはじめグループのIT企業が集結!
数多くのエンジニアが集まります。

-
スマホアプリから業務系システムまで
スマホアプリから業務系システムまで開発案件多数。システムエンジニア・プログラマーとしての多彩なキャリアパスがあります。
-
充実した研修制度
毎年、IT技術のトレンドや社員の要望に合わせて、カリキュラムを刷新し展開しています。社内講師の丁寧なサポートを受けながら、自分のペースで学ぶことができます。
-
資格取得を応援
スキルアップしたい社員を応援するために資格取得一時金制度を設けています。受験料(実費)と合わせて資格レベルに合わせた最大10万円の一時金も支給しています。
-
東証プライム上場企業グループ
オープンアップシステムは東証プライム上場「株式会社オープンアップグループ」のグループ企業です。
安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。
株式会社オープンアップシステムに興味を持った方へ
株式会社オープンアップシステムでは、開発系エンジニア・プログラマを募集しています。
年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。


Java新着案件New Job
-
官公庁向け業務システム開発/Java/東京都千代田区/【WEB面談可】/テレワーク
月給39万~44万円東京都千代田区(永田町駅) -
販売管理システム開発/Java/東京都中央区/【WEB面談可】/テレワーク
月給49万~55万円東京都中央区(京橋駅) -
生命保険会社向けシステム開発/Java/東京都千代田区/【WEB面談可】/テレワーク
月給42万~48万円東京都千代田区(大手町駅) -
社会保険システムのパッケージ開発/Java/東京都港区/【WEB面談可】/テレワーク
月給42万~48万円東京都港区(新橋駅) -
金融機関向けシステム更改/Java/東京都江東区/【WEB面談可】/テレワーク
月給46万~51万円東京都江東区(豊洲駅) -
大手通信会社者向けWebシステム改修/Java/東京都港区/【WEB面談可】/テレワーク
月給42万~48万円東京都港区(品川駅)