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ポリシーや配布ビルドのライセンス違いに注意しつつ、用途に応じたバージョンとディストリビューションを選ぶことが重要である。