Java History and Platform

最終更新: 2021-03-28 10:12:46 +0800 +0800
tags: Java | Jdk
原文は英語で書かれています。あなたはAI翻訳版を読んでいます。

Sun Microsystems は 1996 年に Java 1.0 をリリースしました。主要な互換性の節目には、J2SE 1.2(1998 年)、 Java 5(2004 年、ジェネリクスとアノテーション)、Java 8(2014 年、ラムダ)、Java 9(2017 年、モジュール)があります。 Oracle は 2010 年に Sun を買収しました。OpenJDK は Java SE のオープンソース参照実装であり、主要な JVM 実装として HotSpot を備えます。 Oracle JDK と多数のベンダー配布版は OpenJDK のビルドですが、サポートとパッケージングのポリシーは異なります。 Java 10 以降、フィーチャーリリースは 6 か月周期で提供され、選択されたリリースにはベンダーによる長期サポートが提供されます。

仕様とガバナンス #

Java Community Process(JCP)は Java Specification Request(JSR)を通じて Java SE を標準化します。 JSR には仕様リードと Expert Group があり、Executive Committee が定められたマイルストーンを承認し、 Program Management Office がプロセスを運営します。JCP は OpenJDK の開発とは別のものです。

OpenJDK の JDK Enhancement Proposal(JEP)プロセスは、重要な JDK 作業を記録し方向付けます。 JEP が自動的に Java SE 標準になるわけではありません。OpenJDK の変更が標準化された API を変更する場合、 関連する JSR プロセスが仕様作業を担います。JEP 1 がこの関係を定義しています。

プラットフォームの境界 #

Java 言語は JLS で規定されます。 JVM の命令セット、クラスファイル形式、実行モデルは JVMS で規定されます。 Java SE API 仕様はライブラリ契約を定義します。JDK は JVM、標準ライブラリ、javac、jar、jlink、javadoc などの開発ツールを含む配布物であり、 言語や JVM の同義語ではなく、実装とツールチェーンです。

デプロイの詳細 #

ランチャーは末尾が * のクラスパス要素を、そのディレクトリ内の JAR ファイルへ展開します。 ワイルドカードは再帰的ではなく、任意のクラスディレクトリではなくアーカイブに一致し、順序はプラットフォーム依存です。 順序が重要な場合は明示的なパスが必要です。

マルチリリース JAR はマニフェストに Multi-Release: true を持ち、バージョン固有のクラスファイルを META-INF/versions/N/ 下に配置できます。ランタイムはフィーチャーバージョン以下で適用可能な最も高いバージョンを選び、 該当しなければルートエントリを選びます。MR-JAR は複数のランタイムビューを持つ 1 つのアーティファクトであるため、 ツールはマニフェストを保持し、各バージョン付きエントリを検証する必要があります。

Java の用語では、field はクラスまたはインターフェースで宣言された変数です。 「データメンバー」は非公式な語で、field、プロパティ、その他の状態を曖昧に含むことがあります。 言語構造には「field」を使い、設計を議論するときは依存関係やカプセル化された状態を明示的に命名します。

参考資料 #

コメント

GitHub で閲覧・コメントする(投稿にはログインが必要です)