【Java入門】JVMとは?わかりやすく解説!

Javaのプログラムを動かす上で必須となるのがJVMです。

しかし、JVMについて詳しく知っている方は、意外と少ないのではないでしょうか?

JVMって何?
JVMで何ができるの?
JVMの仕組みが知りたい
JVMの構成が知りたい

今回は、そんな悩みを解決するために、JVMについてわかりやすく解説します。

また、次の記事ではそもそもJavaとはどんなプログラミング言語なのか、その特徴やできることをわかりやすく解説しているので良ければ参考にしてください。

Javaとは?初心者向けに言語の特徴や用途をわかりやすく解説

目次

JVMとは

JVMとはJava Virtual Machineの略で、Javaのプログラムを動かすために必要なソフトウェアです。

しかし、Javaは一度プログラムを書けば、どのマシンでもJavaが動くことを思想として作られた言語です。そのため、JVMのような中間コードをプラットフォーム別に、命令文を変換する仮想マシンが実装されました。JVMは「Java仮想マシン」「JavaVM」とも言われています。

JVMの仕組み

JVMがあればJavaプログラムを解釈し、対象のOSで実行可能な形式のコードに変換して動かすことができます。Javaで作ったプログラムをプラットフォームに依存しないで動かすためには、JVM上でJavaを動かすことは必須となります。

JVMとは

画像:JVMの仕組み

図のように、Javaで作ったプログラムはOSではなく、JVMとやりとりするので、OSごとに特別な設定などは不要です。JVMがあれば、OSがWindows、Mac、Linuxなど、環境に依存せずに動かせることがわかりますね!

Javaのプログラムを動かすためには

Javaを動かすには、エディタなどで記述したプログラムをコンパイルしてJavaプログラムを生成します。プログラミング言語は一般的に、プラットフォームやOSごとにコンパイラが用意されていて、特定の環境でしか動かすことができません

しかし、Javaプログラムは前述したようにプログラムとOSの間にJVMを仲介させて動作します。

そのため、Javaのコンパイルは他のプログラミング言語と違い、JVMが理解できるJavaバイナリコードと呼ばれるマシン語に変換されます。(Javaバイナリコードは、中間的なコードという意味で中間コードとも言います)

JVMとは2

画像:動く仕組み

仮想マシンはバイナリコードを読み込んで、OS上でJavaプログラムを実行するために、ネイティブコードと呼ばれるコードに変換されます。

JVMの構成

ここでは、JVMの構成について説明します。JVMには大きく分けて3つ領域が存在し、それぞれOSのメモリ領域を割り当てられて、管理されています。
JVMとは3

画像:JVMの構成

ヒープとは、OSやアプリケーションなどの、システムが利用するメモリ領域のことを指します。JVMのヒープ領域はオブションで自由に設定することが可能です。3つの領域にはそれぞれ役割があります。以下に各領域の役割について説明します。

Permanent領域(非ヒープ領域)

Permanent領域にはJavaプログラムのクラスやメソッドなど情報が格納されます。そのため、規模の大きいプログラムでJVMにクラスを大量にロードする場合は、Permanent領域のメモリサイズを大きくする必要があります。

New領域(ヒープ領域)

New領域は、さらに3つの領域に分割されており、オブジェクトがインスタンス化された際にまずEden領域に配置されます。Eden領域のメモリがいっぱいになると、オブジェクトを退避するためFrom領域とTo領域に格納されます。

このような処理はScavenge GCと呼ばれています。New領域がいっぱいになるとScavenge GCが頻繁に行われます。

Old領域(ヒープ領域)

New領域に格納されているオブジェクトで、使用期間が長い情報が管理されます。
Old領域がいっぱいになるとFull GCと呼ばれる処理が頻繁に行われます。Full GCは重い処理のため、実行されている間はシステムが止まってしまいます

JVMについてもっと詳しく知りたい方へ

JVMの概要やインストール、設定方法については、以下の記事にまとめていますので、ぜひ参考にしてくださいね!

まとめ

ここでは、JavaにおけるJVMの役割や仕組み、JVMの構成などを説明しました。マルチプラットフォームであるJavaのプログラムを動かす上で、JVMが重要な役割を果たしていることが、理解いただけたのではないでしょうか?

もし、「JVMってなんだっけ?」となったら、この記事を思い出してくださいね!

この記事を書いた人

侍エンジニア塾は「人生を変えるプログラミング学習」をコンセンプトに、過去多くのフリーランスエンジニアを輩出したプログラミングスクールです。侍テック編集部では技術系コンテンツを中心に有用な情報を発信していきます。

目次