Rainbow Engine

IT技術を分かりやすく簡潔にまとめることによる学習の効率化、また日常の気付きを記録に残すことを目指します。

Java

Javaのアーキテクチャ概要やプログラムのコンパイルから実行までの流れ

投稿日:2020年5月24日 更新日:

(0)目次&概説

(1) 記事の目的
 (1-1) 目的
(2) Javaのアーキテクチャ概要・概観
 (2-1) プログラムのコンパイル~実行の流れ
 (2-2) Javaアーキテクチャの特徴
  (2-2-1) プラットフォームに依存しない
  (2-2-2) 他言語でプラットフォーム依存する例
 (2-3) JDK・JRE・JVMについて
  (2-3-1) JVMとは
  (2-3-2) JREとは
  (2-3-3) JDKとは
(3) JVMのアーキテクチャ概要
 (3-1) JVMの概観
 (3-2) JVMの主要サブシステム1:Class Loader
 (3-3) JVMの主要サブシステム2:Runtime Data Area
  (3-3-1) Method Area(メソッド領域)
  (3-3-2) Heap Area(ヒープ領域)
  (3-3-3) Stack Area(スタック領域)
  (3-3-4) Native Stack(ネイティブスタック)
  (3-3-5) Program Counter Register(PCレジスター)
 (3-4) JVMの主要サブシステム3:Execution Engine
  (3-4-1) JIT Compiler(JITコンパイラ)
  (3-4-2) Garbage Collector(ガーベジコレクタ)

(1) 記事の目的

(1-1) 目的

Javaのアーキテクチャの概要レベルを抑える・イメージが湧くことを目標に記述しています。

目次にもどる

(2) Javaのアーキテクチャ概要・概観

(2-1) プログラムのコンパイル~実行の流れ

Javaのプログラムが実行されるまでの過程は、ざっくり下記のような流れになっています。ポイントはJavaの特徴でもある「中間言語」へのコンパイルです。

①バイトコードに変換 [コンパイル時]
「ソースコード(Java)」を「コンパイラ」を用いて「バイトコード(中間言語)」に変換します。バイトコードはJVMのコードで、JVMが解釈可能な形式になっています。

②機械語に変換 [実行時]
「バイトコード(中間言語)」は「JVM」によって「機械語」に変換します。

③JVMによる実行 [実行時]
機械語に変換されたコードはJVMの実行環境にて実行されます。

(図211)プログラム実行の流れ

目次にもどる

(2-2) Javaアーキテクチャの特徴

上記のフローの中で特徴的な部分としては、やはり「ソースコード」が「バイトコード(中間言語)」にコンパイルされる所だと思います。この特徴を生かして、後述の「どのプラットフォームでも動作する」というJavaの強みを生み出しています。

(2-2-1) プラットフォームに依存しない

Javaの有名な言葉で”Write Once Run Anywhere”(一度Javaでプログラムを書けば、どんなプラットフォームでも動作する)がありますが、それを実現しているのがJVMです。JVMがあれば、例えOSがWindowsだろうとLinuxだろうと動作する事ができます。
プラットフォームに依存しない理由はJVMによって「Javaプラットフォーム」を仮想的に作っており、OS等の基盤の差異を吸収しているためです。
ですのでJVMが動作さえすれば、Javaの中間言語であるバイトコード(.class)ファイルを作成する事で、JVMがそれを解釈してプラットフォームに合わせた機械語に変換してくれます。

(2-2-2) 他言語でプラットフォーム依存する例

それに対してCやC++はコンパイル済みの実行可能なバイナリファイルを特定のプラットフォームに対してリンクさせるため、基盤やOSに依存します(特定のプロセッサでの処理を意識した機械語に翻訳されているため)

目次にもどる

(2-3) JDK・JRE・JVMについて

Javaのアーキテクチャを理解する上で、JDK・JRE・JVMの関係性を抑える事が必要と考えます。3っ社の関係性を図で表現すると次のようになります。

(図231)JDK,JRE,JVMの関係性

(2-3-1) JVMとは

JVMは「Java Virtual Machine」の略でJavaのバイトコードを解釈・実行する、JREのエンジン(心臓)であり、プログラム実行する際のmain文のコール等をしています。
VMという言葉からVMwareのような仮想OSをイメージしがちですが、実際はOS等を提供する訳ではなく、どちらかというと「Javaの仮想的な実行環境」という表現が近いかも知れません。

ビジネス観点で見ると、JVMにはOSSから独自製品まで色々な組織による幅広い種類が展開されています。例えば「HotSpot」(Oracle)や「Azul Zing」(Azul Systems)など目的に応じて選択する事ができます。

目次にもどる

(2-3-2) JREとは

Javaの「実行環境」です。コンパイルしたJavaプログラムを必要なライブラリと結合し、JVMを起動して実行します。そのため、JREにはJVMやJavaのクラスライブラリやjavaコマンドやその他インフラ等を含んでいます。ただし、あくまで実行のための環境なので、プログラムの開発には利用できません。

目次にもどる

(2-3-3) JDKとは

Javaの「開発用キット」です。上記のJREに加えて、コンパイラ(javac)、インタープリタ(java)や各種ツール(javadocやjdb=デバッガ)、アーカイバ(jar)なども付属しており、プログラムの開発やコンパイルが可能になります。

(備考)
通常、Javaのプログラムを実行するのみであればJREのみのインストールで良いのですが、場合によっては開発をしないケースでもJDKのインストールが必要となる場合があります。例えば、JSP等を含むWebアプリをサーバにデプロイする場合はJDKが必要となります。その理由はJSPは実行時にサーブレットにされ、そのサーブレット(Javaプログラム)をコンパイルするのにJDKが必要となるためです。

目次にもどる

(3) JVMのアーキテクチャ概要

長くなったので、こちら(JVMのアーキテクチャ概要)の記事にて記載。

目次にもどる

Adsense審査用広告コード


Adsense審査用広告コード


-Java

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

JNDIとは?JDBCとの違いやメリット・デメリットについてもご紹介

<目次> (1) JNDIとは?JDBCとの違いやメリット・デメリットについてもご紹介  (1-1) JDBCとは?  (1-2) JNDIとは?   (1-2-1) 概要   (1-2-2) JND …

Javaのenumでフィールドを複数定義したり、値を取得する方法

<目次> (1) Javaのenumでフィールドを複数定義したり、値を取得する方法  (1-1) enumでフィールドを定義・取得する  (1-2) enumでフィールドを複数定義・取得する (1) …

Javaで実装したLinkedListのサンプルプログラムをご紹介

<目次> (1) Javaで実装したLinkedListのサンプルプログラムをご紹介  (1-1) LinkedListの概要  (1-2) LinkedListの特徴  (1-3) LinkedLi …

JVMの基本アーキテクチャと各サブシステム等の概要説明について

(0)目次&概説 (1) 記事の目的 (2) Javaのアーキテクチャ概要・概観 (3) JVMのアーキテクチャ概要  (3-1) JVMの概観  (3-2) JVMの主要サブシステム1:Class …

JavaのhashCode()で31を掛け算する理由について

<目次> (1) JavaのhashCode()で31を掛け算する理由について  (1-1) ハッシュの計算のソースコード  (1-2) ソースコードに登場する代表的な変数  (1-3) ソースコード …

  • English (United States)
  • 日本語
Top