スライドショースライドショースライドショー

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

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

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

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

今回は、そんな悩みを解決するために、JVMについてわかりやすく解説します!そもそも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ってなんだっけ?」となったら、この記事を思い出してくださいね!

LINEで送る
Pocket

「プログラミング、右も左もわからない…」という方にオススメ

当プログラミングスクール「侍エンジニア塾」では、これまで6000人以上のエンジニアを輩出してきました。

その経験を通して、プログラミング学習に成功する人は、「目的目標が明確でそれに合わせた学習プランがあること」「常に相談できる人がそばにいること」「自己解決能力が身につくこと」この3つが根付いている傾向を発見しました。

侍エンジニア塾は上記3つの成功ポイントを満たすようなサービス設計に磨きをかけております。

cta_under_bnr

「自分のスタイルや目的に合わせて学習を進めたいな」とお考えの方は、ぜひチェックしてみてください。

cta_under_btn

書いた人

侍テック編集部

侍テック編集部

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説