Javaとは(定義):オラクル買収・JVM・LTSを含む概要と特徴
Javaの定義からオラクル買収の影響、JVMやLTSの仕組みまでわかりやすく解説。特徴や最新バージョン情報も網羅。
Javaとは、Sun Microsystems社が作ったプログラミング言語の名称である。オブジェクト指向を基本とし、堅牢で移植性の高いアプリケーション開発を目的に設計された。言語仕様と実装は進化を続けており、現在はオラクルが主要なメンテナである。
歴史とオラクルによる買収
元々Javaは開発中にOakと呼ばれていた。Sunは1995年に公式発表し、その後広く普及した。オラクルは2009年にSunの買収を発表し、2010年に買収を完了して以降、Javaの開発と配布に深く関与している。買収後も、オープンソースの実装であるOpenJDKが参照実装として存在し、コミュニティと企業の両方で利用・貢献されている。
実行モデルとJVM(Java Virtual Machine)
Javaの大きな特徴の一つはプラットフォーム非依存性(「Write Once, Run Anywhere」)である。これは、ソースコードをコンパイルすると直接ハードウェア向けのマシンコードになるのではなく、Javaコンパイラがマシンコードではなく、中間形式である「Javaバイトコード」に変換することによって実現される。実行時に各プラットフォーム上のJava仮想マシン(JVM)がバイトコードを解釈あるいはJIT(Just-In-Time)コンパイルしてネイティブコードに変換することでプログラムが動作する。
- JVMの主要な役割:クラスローダ、バイトコード検査(バイトコードバリファイア)、実行エンジン(インタプリタ+JIT)、ガベージコレクタ(自動メモリ管理)など。
- JRE(Java Runtime Environment)は実行に必要な環境で、JDK(Java Development Kit)は開発に必要なツール群(コンパイラ、デバッガ、ドキュメントツールなど)を含む。
バージョンとLTS(Long-Term Support)ポリシー
過去は数年ごとの大バージョン更新が主流だったが、2017年以降は6か月ごとの短期リリースサイクルが採用され、LTS版は数年ごとに提供されるようになった。重要なポイントは以下の通りである:
- Java 8(LTS)は広く採用されたが、オラクルはその後の商用配布に関してライセンスとサポート方針を変更したため、商用環境では配布ビルドやサポート契約の確認が必要になった。
- Java 11は2018年9月にリリースされたLTSで、多くの企業が移行先として採用した。
- Java 17は2021年9月にLTSとしてリリースされた。
- Java 21は2023年9月にLTSとしてリリースされ、現時点での最新のLTS版である(短期リリースは6か月ごとに提供される)。
商用利用や長期サポートが必要な場合は、どのディストリビューション(Oracle JDK、OpenJDKビルド、Amazon Corretto、Azul Zuluなど)を採用するかでサポート形態やライセンス条件が異なるため注意が必要である。
言語的特徴と他言語との関係
Javaは文法的にCやC++、およびC#の影響を受けているため、見た目は似ている部分があるが、言語の設計思想や実行モデルは異なる。主な特徴は以下の通り:
- オブジェクト指向が中心(クラスとインターフェースによる設計)。
- ガベージコレクションによる自動メモリ管理でメモリ管理の多くをランタイムに任せられる。
- 例外処理や型安全性(ジェネリクスや型チェック)に重点が置かれている。
ただし、C/C++で使える低レベル操作(ポインタ演算など)は制限されており、そのまま移植できるわけではない。
JavaとAndroid
Javaはデスクトップやサーバーだけでなく、世界で最も普及しているモバイルOSの一つであるAndroidを含む多くのオペレーティングシステム上で活用されてきた。Android向け開発では伝統的にJava言語(およびKotlin)が主要な選択肢であり、Androidランタイム(ART)や旧来のDalvikはJavaバイトコード相当の中間表現を実行するように最適化されている。近年はGoogle自身も言語面でKotlinを推奨しているが、Javaとの互換性や既存資産は依然として重要である。
エコシステムとツール
Javaには豊富なライブラリ、フレームワーク、ビルドツールが存在する。代表的なものを挙げると:
- ビルド・管理:Maven、Gradle
- Webフレームワーク:Spring、Jakarta EE(旧Java EE)
- テスト:JUnit、Mockito
- IDE:IntelliJ IDEA、Eclipse、NetBeans
また、モジュールシステム(Project Jigsaw)はJava 9で導入され、アプリケーションの分割・最適化が可能になった。
まとめ
Javaは長い歴史と広い採用実績を持つ汎用プログラミング言語であり、JVMを中心とした実行モデルにより高い移植性と豊富なランタイム機能(ガベージコレクション、JITなど)を提供する。Sun Microsystems社が開発し、その後オラクルが主要な管理者となったが、OpenJDKを通じてオープンなエコシステムも維持されている。LTSポリシーや配布ビルドのライセンス違いに注意しつつ、用途に応じたバージョンとディストリビューションを選ぶことが重要である。
ジャワの概念
Javaは5つの主要な目標を達成するために開発されました。これらは以下の通りです。
- Javaは学びやすく、オブジェクト指向であり、分散型である必要があります。
- Javaは安全で丈夫なものでなければなりません。
- Javaは、どのコンピュータアーキテクチャやプラットフォームにも依存すべきではありません。
- Javaがうまく機能するはずです。
- Javaは、それ用に書かれたインタプリタを持っていて、並列性をサポートし、動的型付けを使用できるようにしなければなりません。
ジャワプラットフォーム
Javaプラットフォームとは、Sun Microsystems社のソフトウェア製品群を指す。プラットフォームは、Javaプログラムの開発と実行に使用されます。プラットフォームには実行エンジン(Java仮想マシンと呼ばれる)が含まれており、Javaプログラムが異なるコンピュータシステム上で同じことを行うことを可能にします。
このように、あるプラットフォームでソフトウェアを開発し、他のプラットフォームで実行することができる能力を「クロスプラットフォーム能力」と呼びます。
ジャワプログラム例
Hello World」のJavaプログラムの例。
Javaプログラムの種類
Javaプログラムには様々な種類があり、動作が異なります。
- Java Applet - Javaで書かれた小さなプログラムで、ウェブサイトからダウンロードしてクライアントコンピュータのウェブブラウザ内で実行されます。
- アプリケーション - クライアントコンピュータ上で実行されます。オンラインの場合は、実行する前にダウンロードする必要があります。
- JAR ファイル (Java アーカイブ) - Java ファイルを 1 つのファイルにまとめてパッケージ化するために使用されます (ほぼ正確には .zip ファイルのようなもの)。
- Servlet - ウェブサーバー上で動作し、ウェブページを生成するのに役立ちます。
- Swingアプリケーション - GUI(ウィンドウ、ボタン、メニューなど)を持つアプリケーションを構築するために使用されます。
- EJB - ウェブサーバー上で動作し、大規模で複雑なウェブサイトの開発に使用されます。
メリット
Javaは第一言語として学生にプログラミングの方法を教えるために使われるのが一般的ですが、今でもプロの方にも使われています。
- Javaは各変数を初期化する必要があります。C言語のような古い言語では、変数が初期化されていない状態になることを許容しているものもあります。
- Javaでは、各メソッドが戻り値の型を宣言する必要があります。これはバグを防ぐためでもあります。
- Javaには、クラスやメソッドの大規模なセットが付属しており、「一から」同じくらいのコードを開発しなくても使えるJavaのAPIです。
- C言語とは異なり、Javaのプリミティブ型であるintなどは、ビット数が常に同じサイズであるため、クロスプラットフォームでの互換性を実現するのに役立ちます。
- Javaは以前はCよりも遅いと思われていましたが、近年ではコンピュータが高速化しているため、その点が重要視されなくなってきています。
- Javaには例外処理があり、プログラマーが入出力エラーなどのエラー条件を処理する必要があります。
- あるJavaプラットフォーム上でコンパイルされたコードは、ソースコードやバイトコードを変更することなく、Javaをサポートする他のプラットフォーム上で実行することができます。これは、Windowsコンピュータ用のJavaプログラムを作成して、それをLinuxコンピュータやMacコンピュータで実行させることができることを意味します。
批判
Javaも批判されています。その批判の一部をご紹介します。
- ジェネリックは、既存のコードを実行し続けられるように Java に追加されました。これは型消去を使って行われました。これは、コンパイル時にジェネリック引数の実際の型が削除されることを意味します。これにより、Javaインタプリタが予期しない動作をすることがあります。
- Javaには、Cのような言語が多用している符号なし整数型がありません。これは、C言語とJavaプログラム間で数値データを直接やりとりすることができないことを意味します。暗号もある程度このような型に依存しているため、Javaで暗号を使用するアプリケーションを書くことが難しくなっています。
- IEEEは浮動小数点演算の標準規格であるIEE 754を定義しています。Javaはこの規格の機能の一部しかサポートしていません。
質問と回答
Q:サンマイクロシステムズが作ったプログラミング言語の名前は何ですか?
A:サン・マイクロシステムズ社が作ったプログラミング言語は、Javaと呼ばれています。
Q:現在、Javaをサポートし、最新の状態に保っているのはどこですか?
A:現在、Javaをサポートし、最新の状態に保っているのは、オラクル社です。
Q: Javaの現在の長期サポート(LTS)バージョンは何ですか?
A: 現在のJavaの長期サポート(LTS)バージョンは、バージョン17、11、および8です。
Q:Javaの最新バージョンはいつリリースされましたか?
A:Javaの最新版であるバージョン19は、2022年9月にリリースされました。
Q:Oracle以外にJavaをサポートしている会社はありますか?
A: はい、Eclipse AdoptiumもJavaを少なくともバージョン8は2026年5月まで、バージョン17は2027年9月までサポートしています。
Q: Javaは、どのような種類のコードを使用しますか?
A:Javaはオブジェクト指向のコードを使用します。これは、プログラムが仕事をするために一緒に働くオブジェクトに基づいていることを意味します。C、C++、C#に似ていますが、これらの言語で書かれたコードは、ほとんどの場合、変更しないと動きません。
Q:Javaはどのようにしてプラットフォームに依存しないようにしているのですか?
A:Javaは、コンパイラがコードを機械語ではなくバイトコードと呼ばれる特殊な形式に変換することで、それ自体をプラットフォーム非依存にしています。つまり、プログラムが実行されると、バイトコードは仮想マシンと呼ばれる特別なプログラムによって解釈され、機械語に変換されるので、Androidのような異なるOS上でも実行できるようになります。
百科事典を検索する