Javaプラットフォーム

**Javaプラットフォーム**（ジャバプラットフォーム、）は、Javaで記述されたプログラムの開発および実行を行うことのできるソフトウェア群の総称である。

## 概要
Javaのプログラムは、オペレーティングシステム (OS) やハードウェアに依存しないバイトコード（中間言語）と呼ばれる抽象的なコードで表現されている。そのため、Javaプログラムの実行に必要な仮想マシン（）や、開発に必要な標準ライブラリセットおよびコンパイラを個々の環境にあわせて作りさえすれば、Javaプログラムはそれら全ての環境で同一に動く。Javaプラットフォームとはこうした実行環境および開発環境のことである。

Javaプラットフォームは、Java、Javaアプレット、Java Runtime Environment、JVM、携帯電話や組み込み機器対応Java (Java ME)、Java Web Start、Java製アプリケーションなども含めてまとめて単純に「**Java**」と呼ばれることがある。

Javaプラットフォームにはいくつかのエディションがあり、PCのスタンドアロンアプリケーションや他のエディションの基礎となるJava Standard Edition (Java SE)が存在する。Java 8までは、WebアプリケーションやWebサービスなどサーバーサイド用のJava Platform, Enterprise Edition (Java EE)、携帯端末向けのJava Platform, Micro Edition (Java ME) が存在した。

2025年9月16日時点で、Javaのメジャーバージョンは25で、バージョン文字列は25.0.0である。

Javaプラットフォームは様々なプログラムから成り立っており、各々はそれ全体の能力から全く異なる一部品を提供する。例えば、JavaソースコードをJavaバイトコードに変換するJavaコンパイラがあり、それはJava Development Kit (JDK) の一部として提供されている。実行環境であるJava Runtime Environment (JRE) は、実行時にバイトコードをネイティブマシンコードに変換するJITコンパイラも実装されている。また、Javaバイトコードにコンパイルされた大規模なライブラリが存在する。他にも、Java Platform Standard Edition 25 Documentationにあるように様々なコンポーネントが存在する。

プラットフォームにある極めて重要なコンポーネントはJavaコンパイラ、ライブラリ、そして仮想マシン仕様で設計されたルールによってJava中間バイトコードを「実行」する実行環境である。

## Java仮想マシン

Javaプラットフォームの本質はJavaバイトコードを実行する「仮想マシン（**）」の発想である。Javaバイトコードは実行プログラムの下にどんなハードウェアやOSがあろうと全く同じである。JITコンパイラはJava仮想マシン (Java virtual machine) で動く。JITコンパイラは実行時にJavaバイトコードをネイティブなプロセッサ命令に翻訳し、プログラム実行中にメモリ上にネィティブコードをキャッシュする。

中間言語としてのバイトコードの使用は、バーチャルマシンが存在する様々なプラットフォーム上でJavaプログラムが走ることを可能にする。JITコンパイラの使用はローディングによる僅かな遅延と、それらが一度にほとんどまたは全てJITコンパイルされ、一度「ウォームアップ」した後で、Javaアプリケーションがネイティブなプログラムと同じくらいの速さで走る傾向があることを意味する。

JREバージョン1.1以降、サン・マイクロシステムズのJava VM実装はインタプリタだけでなく、JITコンパイラも含んでいる。

## クラスライブラリ
最も現代的なOSでは、再利用可能なコードの大きな集まりがプログラマの仕事を容易にした。
このコードは一般的にアプリケーションが実行時に呼び出せる動的読込ライブラリのセットとして提供される。Javaプラットフォームは特定のOSに依存しないため、アプリケーションは既存のライブラリのいくつかに頼ることはできない。それどころか、Javaプラットフォームは多くのものを含む標準クラスライブラリの集合を提供し、多くの現代のOSで一般に見つかる同じく再利用可能な機能の多くを含んでいる。

JavaクラスライブラリはJavaプラットフォームで三つの意図を役立てる。標準コードライブラリのように、それらはプログラマに、よく知られた、品目リストを保持する、複雑な文字列解析を行うというような共通のタスクを成し遂げる機能セットを提供する。その上、クラスライブラリはハードウェアやOSへの強い依存が普通である仕事を果たす抽象インタフェースを提供する。ネットワーク接続とファイルアクセスのようなタスクはよくプラットフォーム特有の能力に強く依存する。Javaのとライブラリは、時には内部に必要不可欠なネイティブコードを実装しており、時にはそれらのタスクを機能するJavaアプリケーションの標準インタフェースを提供する。最終的に、
いくらかの基礎を成すプラットフォームはJavaアプリケーションが期待する特色の全てをサポートするかもしれない。これらの件についていえば、クラスライブラリはどんなに役立つものも使うそれらの特色をエミュレートするか、特別な特色の存在をチェックする一貫した方法提供するかのどちらかを行使できる。

OpenJDKがリリースされるまではJREに含まれているクラスライブラリはサン・マイクロシステムズ所有のソフトウェアだった。かつて開発されていた、GNU Classpathと呼ばれる、互換性のあるフリーライブラリの集合で記述されているFree Software Foundationのプロジェクトがあった。2007年5月に、サン・マイクロシステムズはJavaのソースコードをOpenJDKとしてGNU General Public License, version 2, with the Classpath Exceptionのもとでリリースした。

## 言語
Javaという言葉そのものは、通常、Javaプラットフォームで設計されたJavaプログラミング言語を指す。プログラミング言語は一般的に「プラットフォーム」というフレーズの範囲外にあるにもかかわらず、Javaプログラミング言語はJavaプラットフォームの中心部品であると考えられている。Javaの言語と実行はそれゆえ、通例一単位と考えられている。

それでもやはり、サードパーティーはJavaプラットフォームを対象にしたかなり多くのコンパイラやインタプリタを生み出している。それらのうちいくつかは既存の言語として、他は一方はJava言語自身の拡張として存在する。これらは以下を含む:

### 拡張
* AspectJ - アスペクト指向プログラミングを実現できるJava
*  (GJ) - これはJava SE 5.0で正式にJavaに取り込まれた。
### 言語
* Ceylon
* Clojure - LISP方言の一つ
* Fortress
* Groovy
* JRuby - Rubyインタプリタ
* Jython - Python-Javaバイトコードコンパイラ jythonc を含むPythonインタプリタ
* Kawa - LISP方言の一つであるSchemeのインタプリタ
* Kotlin
* Processing
* Rhino - JavaScript インタプリタ
* Scala

## .NET
Javaの成功とそのコンセプトwrite once, run anywhereは、2002年に現れて以来、.NET Frameworkプラットフォームなど他の類似する取り組みを導き、それらはJavaの成功側面の多くを受けいれた。しかしながら、.NETの完全な実装はMicrosoft Windowsのみに向けたものしか存在しない。一方、Javaは多くのプラットフォームで完全にサポートされている。しかし.NETは、多くの異なるプログラミング言語を共通中間言語へとコンパイルする言語非依存ライブラリのユーザビリティに強い主眼点を置いている。.NETは言語非依存互換性の面ではJavaよりも成功している。しかし、JavaにもScala、Jython、Groovy、JRubyなどJavaVMを実行プラットフォームとする言語処理系が複数存在する。

.NET Frameworkにも2007年までVisual J#というJavaの実装が存在したが、これは本家のJavaとは非互換で、関連するクラスライブラリは殆ど言語バージョンが古いJDK 1.1に基づいていた。これらは、Visual J#が.NETにおける主要な言語として設計されたのではなく、Javaから.NETプラットフォームへ移行するために用意された言語であることに起因する。

その一方で、近年ではオープンソースコミュニティによってIKVM.NETという共通言語ランタイム上で動作するJava仮想マシンが登場し、一方的ではあるが、互換性及び相互利用性は急激に向上している。

## 脚注



## 関連項目

* 共通言語基盤（CLI）
* Dalvik仮想マシン