Java(ソフトウェアプラットフォーム)

Java(ソフトウェアプラットフォーム)
原作者ジェームズ・ゴスリングサン・マイクロシステムズ
開発者オラクル社
初回リリース1996年1月23日; 29年前[1] [2] (1996年1月23日
安定版リリース25 LTS(2025年9月16日; 57日前[3][±] (2025年9月16日

21.0.5 LTS (2024年10月15日; 12ヶ月前[4] ) [±] 17.0.13 LTS (2024年10月15日; 12ヶ月前[5] ) [±] 11.0.25 LTS (2024年10月15日; 12ヶ月前[6] ) [±] ( 2024-10-15 )
 ( 2024-10-15 )
 ( 2024-10-15 )

8u431 LTS (2024年10月15日; 12か月前[7] ) [±] ( 2024-10-15 )
書かれたJavaC++Cアセンブリ言語[8]
オペレーティング·システムMicrosoft Windows 10+、LinuxmacOS[9]、および旧バージョン: Solaris
プラットフォームx64ARMv8、および旧バージョン: ARMv7IA-32SPARC(Java 14まで)(Java 8にはWindows用の32ビットサポートが含まれています が、商用利用についてはOracleによる無料サポートは終了しました)[9]
入手可能な英語、中国語、フランス語、ドイツ語、イタリア語、日本語、韓国語、ポルトガル語、スペイン語、スウェーデン語[10]
タイプソフトウェアプラットフォーム
ライセンスデュアルライセンス:クラスパス例外付きのGNU一般公衆利用許諾書バージョン2 [11]プロプライエタリライセンス[12]
Webサイト
  • oracle.com/java/
  • java.com
  • 開発.java
Javaベースのプログラム「TuxGuitar」

Javaは、アプリケーションソフトウェアを開発し、クロスプラットフォームのコンピューティング環境に展開するためのソフトウェアプラットフォームを提供する、コンピュータソフトウェアと仕様のセットです。Javaは、組み込みデバイス携帯電話からエンタープライズサーバースーパーコンピュータまで、幅広いコンピューティングプラットフォームで使用されています。スタンドアロンJavaアプリケーションほど一般的ではないJavaアプレットは、 HTMLページに埋め込まれることでネイティブアプリケーションの多くの機能を提供するために、安全なサンドボックス環境で実行されることが一般的でした。

Javaプログラミング言語で記述することは、 Java仮想マシン(JVM)バイトコードとして展開されるコードを生成する主な方法です。バイトコードコンパイラは、 AdaJavaScriptKotlin(Googleの推奨Android言語)、PythonRubyなど他の言語でも利用できます。さらに、ClojureGroovyScalaなど、いくつかの言語はJVMでネイティブに実行するように設計されました。Javaの構文はCC++から大幅に借用していますが、オブジェクト指向の機能はSmalltalkObjective-Cに倣っています。[13] Javaはポインタなどの特定の低レベル構造を避け、オブジェクトがヒープ上に割り当てられる(一方、一部の実装(たとえば、現在すべてOracleがサポートしているもの)では、エスケープ解析最適化を使用して代わりにスタック上に割り当てる場合があります)非常に単純なメモリモデルを持ち、オブジェクト型のすべての変数は参照です。メモリ管理は、JVMによって実行される統合自動ガベージコレクションによって処理されます。

最新バージョン

最新バージョンは2025年9月にリリースされたJava 25で、最新の長期サポート(LTS)バージョンです。これは、Java 8 LTSまでサポートされている数少ないLTSバージョンの1つです。OracleはJava 6の延長サポートを2018年12月に終了しました。[14]オープンソースプラットフォームとして、JavaにはAmazonIBMAzul SystemsAdoptOpenJDKなど多くのディストリビューターがいます。ディストリビューションには、Amazon Corretto、Zulu、AdoptOpenJDK、Libericaなどがあります。Oracleに関しては、Java 8を配布しているほか、Java 11なども提供しており、どちらも現在サポートされているLTSバージョンです。Oracle(およびその他)は、未解決のセキュリティ問題による深刻なリスクがあるため、[15] Java 8よりも古いバージョンのJavaをアンインストールすることを強く推奨しています。 [16] [17] [18] Java 9(およびバージョン10、12~16、18~20、22~24)のサポートが終了したため、Oracleはユーザーに対し、サポート対象バージョンへの「即時移行」を推奨しています。Oracleは2019年1月に、旧バージョンのJava 8 LTSの商用利用向け無料パブリックアップデートを最後にリリースしており、個人利用向けのパブリックアップデートによるJava 8のサポートは今後も無期限に継続されます。

プラットフォーム

Javaプラットフォームは、 Javaプログラミング言語で記述されたプログラムの開発と実行を容易にするプログラムスイートです。Javaプラットフォームには、実行エンジン(仮想マシンと呼ばれる)、コンパイラ、そして一連のライブラリが含まれます。また、要件に応じて追加のサーバーや代替ライブラリが使用される場合もあります。Javaプラットフォームは、Javaプログラムがあらゆるハードウェアおよびオペレーティングシステム上で同一に動作することを目的として、様々なハードウェアおよびオペレーティングシステム向けに実装されています

Javaプラットフォームは複数のプログラムで構成されており、各プログラムはJavaプラットフォーム全体の機能の一部を提供します。例えば、JavaソースコードをJavaバイトコード(JVMの中間言語)に変換するJavaコンパイラは、 Java開発キット(JDK)の一部として提供されています。Javaランタイム環境(JRE)は、JVMをジャストインタイム(JIT)コンパイラで補完し、中間バイトコードをネイティブマシンコードにオンザフライで変換します。Javaプラットフォームには、広範なライブラリも含まれています。

プラットフォームの重要なコンポーネントは、Java 言語コンパイラ、ライブラリ、および仮想マシン仕様に定められた規則に従って Java 中間バイトコードが実行されるランタイム環境です。

アプリケーションドメイン

異なるプラットフォームは、異なるクラスのデバイスおよびアプリケーション ドメインを対象としています。

Java SE

Java Platform, Standard Edition (Java SE) は、デスクトップおよびサーバー環境向けの移植可能なコードの開発と展開のためのコンピューティングプラットフォームです。[19] Java SE は以前は Java 2 Platform, Standard Edition (J2SE) として知られていました。

このプラットフォームはJavaプログラミング言語を使用し、Javaソフトウェアプラットフォームファミリーの一部です。Java SEは、Javaクラスライブラリ用のJava APIなど、さまざまな汎用APIを定義しており、 Java言語仕様Java仮想マシン仕様も含まれています。 [20] OpenJDKはバージョン7以降、公式リファレンス実装となっています[21] [22] [23]

ジャカルタEE

Jakarta EEは、以前はJava Platform, Enterprise Edition (Java EE)およびJava 2 Platform, Enterprise Edition (J2EE)と呼ばれていた一連の仕様であり、Java SE [24]を拡張して、分散コンピューティングWebサービス[25]などのエンタープライズ機能の仕様を追加しました。Jakarta EEアプリケーションは、マイクロサービスまたはアプリケーションサーバーであるリファレンスランタイム上で実行され、デプロイするコンポーネントのトランザクション、セキュリティ、スケーラビリティ、並行性、管理を処理します。

Java仮想マシン

Javaプラットフォームの中核は、Javaバイトコードプログラムを実行する「仮想マシン」です。このバイトコードは、プログラムが実行されるハードウェアやオペレーティングシステムに関係なく同じです。ただし、Java 10(およびそれ以前)などの新しいバージョンでは小さな変更が加えられており、バイトコードは一般的に前方互換性のみを備えています。Java仮想マシン(JVM )にはJIT(Just In Time)コンパイラが組み込まれています。JITコンパイラは、実行時にJavaバイトコードをネイティブプロセッサ命令に変換し、実行中にネイティブコードをメモリにキャッシュします。

バイトコードを中間言語として使用することで、Javaプログラムは仮想マシンが利用可能なあらゆるプラットフォームで実行できます。JITコンパイラの使用により、Javaアプリケーションは、ロード時の短い遅延の後、全体または大部分がJITコンパイルされて「ウォームアップ」すると、ネイティブプログラムとほぼ同程度の速度で実行される傾向があります。[26] [27] [28] JREバージョン1.2以降、SunのJVM実装には、インタープリタではなくジャストインタイムコンパイラが含まれています。

Javaプログラムはクロスプラットフォーム、つまりプラットフォーム非依存ですが、これらのプログラムを実行するJava仮想マシン(JVM)のコードはそうではありません。サポートされているオペレーティング・プラットフォームごとに、独自のJVMが存在します。

Java開発キット

Java開発キット( JDK)は、 Oracle CorporationによるJavaテクノロジーのディストリビューションです。Java言語仕様(JLS)とJava仮想マシン仕様(JVMS)を実装し、Javaアプリケーション・プログラミング・インターフェース(API)のStandard Edition(SE)を提供します。これは、Oracleが管理するコミュニティ主導のOpenJDKの派生版です。 [29] Javaアプリケーションを操作するためのソフトウェアを提供します。含まれるソフトウェアの例としては、Java仮想マシン、コンパイラ、パフォーマンス監視ツール、デバッガ、そしてOracleがJavaプログラマにとって有用であると考えるその他のユーティリティなどがあります。

Oracleは、Oracle No-Fee Terms and Conditions (NFTC)ライセンスに基づいて、ソフトウェアの最新バージョンをリリースしています。Oracleは、Windows、macOS、Linuxベースのオペレーティングシステム向けにx86-64アーキテクチャ用、およびmacOSとLinux向けにaarch64アーキテクチャ用のバイナリをリリースしています。以前のバージョンは、Oracle SolarisオペレーティングシステムとSPARCアーキテクチャをサポートしていました。

Oracle の JVMS の主な実装は、HotSpot (仮想マシン)として知られています。

Java ランタイム環境

Oracle がリリースした Java ランタイム環境 (JRE) は、スタンドアロン JVM (HotSpot)、Java標準ライブラリ( Java クラス ライブラリ)、構成ツール、およびブラウザ プラグイン (JDK 9 で廃止されるまで) を含む、無料で入手できるソフトウェア ディストリビューションです。これは、ラップトップやデスクトップ フォーム ファクタのパーソナルコンピュータにインストールされる最も一般的な Java 環境です。フィーチャー フォンや JVM を搭載して出荷される初期のスマートフォンを含む携帯電話には、Java プラットフォームのMicro Editionを対象としたアプリケーションを実行するための JVM が搭載されている可能性が高くなります。一方、Java アプリを実行する最新のスマートフォン、タブレット コンピュータ、その他のハンドヘルド PC のほとんどは、JVM 仕様と互換性のないオープン ソースの仮想マシンを含むAndroid オペレーティング システムのサポートを通じて Java アプリを実行している可能性が高くなります。 (その代わりに、GoogleのAndroid開発ツールはJavaプログラムを入力として受け取り、Androidデバイスの仮想マシンのネイティブ入力フォーマットであるDalvikバイトコードを出力します。)Oracle BCL契約[30]を伴うJREの最後のクリティカルパスアップデートバージョンは8u201であり、同じライセンスを伴う最後のパッチセットアップデートバージョンは8u202でした。[31] [32]ライセンススキームに関係なく、最後のOracle JRE実装は9.0.4でした。[33] Java Platform SE 9以降、プラットフォーム全体も​​モジュールにグループ化されました。[34] Java SE実装のモジュール化により、開発者は、ユーザーデバイスに適切なJava SE実装が存在するかどうかだけに依存するのではなく、アプリケーションと、それが使用するすべてのモジュールをバンドルすることができます。[35] [36] [37] [38]

クラスライブラリ

現代のほとんどのオペレーティングシステム(OS)では、プログラマーの作業を簡素化するために、大量の再利用可能なコードが提供されています。これらのコードは通常、アプリケーションが実行時に呼び出せる動的にロード可能なライブラリのセットとして提供されます。Javaプラットフォームは特定のオペレーティングシステムに依存しないため、アプリケーションは既存のOSライブラリに依存できません。その代わりに、Javaプラットフォームは、現代のオペレーティングシステムで一般的に見られる多くの再利用可能な関数を含む、包括的な標準クラスライブラリセットを提供しています。システムライブラリの大部分もJavaで記述されています。例えば、Swingライブラリはユーザーインターフェースを描画し、イベントを自ら処理することで、プラットフォーム間でのコンポーネント処理における多くの微妙な違いを解消します。

Java クラス ライブラリは、Java プラットフォーム内で 3 つの目的を果たします。まず、他の標準コード ライブラリと同様に、Java ライブラリは、項目のリスト管理や複雑な文字列解析などの一般的なタスクを実行するための、よく知られた関数セットをプログラマーに提供します。次に、クラス ライブラリは、通常はハードウェアとオペレーティング システムに大きく依存するタスクへの抽象インターフェイスを提供します。ネットワーク アクセスやファイル アクセスなどのタスクは、各プラットフォーム固有の実装と密接に絡み合っていることがよくあります。Java クラスjava.netライブラリjava.ioは、ネイティブ OS コードに抽象化レイヤーを実装し、Java アプリケーションがそれらのタスクを実行するための標準インターフェイスを提供します。最後に、基盤となるプラットフォームが Java アプリケーションが期待するすべての機能をサポートしていない場合、クラス ライブラリは、エミュレーションによって代替を提供するか、少なくとも特定の機能の存在を確認する一貫した方法を提供することで、不足しているコンポーネントを適切に処理します。

言語

「Java」という単語は、通常、Javaプラットフォームで使用するために設計されたJavaプログラミング言語を指します。プログラミング言語は通常、「プラットフォーム」という用語の範疇には入りませんが、Javaプログラミング言語はJava 7以前からJavaプラットフォームの中核部分として挙げられていました。そのため、言語とランタイムは一般的に一体のものとして扱われていました。しかし、Java 7仕様では、Java言語とJava仮想マシンをより明確に別個の存在として扱うよう努められ、もはや一体とはみなされなくなりました。[39]

サードパーティは、JVMをターゲットとする多くのコンパイラインタープリタを開発しています。これらの中には、既存の言語向けのものもあれば、Java言語の拡張向けのものもあります。具体的には、以下のようなものがあります。

  • BeanShell – Java用の軽量スクリプト言語[40] ( JShellも参照
  • Ceylon –不変性を重視した、オブジェクト指向で強力かつ静的に型付けされたプログラミング言語(2023 年以降はメンテナンスされなくなりました)
  • ClojureJava プラットフォーム上のLisp プログラミング言語のモダンで動的かつ関数的な 方言
  • Gosu – Apache License 2.0 に基づいてリリースされた汎用 JVM ベースのプログラミング言語
  • Groovy – Python、Ruby、Perl、Smalltalk の機能を備えた、Java と完全に相互運用可能で、Java 構文と互換性のある静的および動的言語
  • JRubyRubyインタープリタ
  • JythonPythonインタープリタ
  • KotlinJavaとの完全な相互運用性を備えたJVM(およびデスクトップやiOSなどの非JVM)用のプログラミング言語(GoogleがAndroid(そのJVM)向けに推奨する言語であり、Javaよりも優先される。Javaは現在もAndroidでサポートされており、以前から推奨されていた)
  • RhinoJavaScriptインタープリター
  • Scala – 「より良いJava」として設計された、Javaと互換性のない構文を持つマルチパラダイムプログラミング言語

類似プラットフォーム

Java の成功と、一度書けばどこでも実行できるというコンセプトは、他の同様の取り組み、特に2002 年以降に登場した.NET Framework の誕生につながりました。.NET Frameworkには、Java の成功した側面の多くが組み込まれています。.NET は、複数のプログラミング言語をサポートするためにゼロから構築されましたが、Java プラットフォームは当初 Java 言語のみをサポートするために構築されました。ただし、それ以降、他の多くの言語が JVM 用に作成されました。Java と同様に、.NET 言語はバイトコードにコンパイルされ、共通言語ランタイム(CLR) によって実行されます。CLR の目的は JVM と似ています。JVM と同様に、CLR は自動ガベージコレクションを通じてメモリ管理を提供し、.NET バイトコードを複数のオペレーティングシステムで実行できるようにします。

.NETには、当初はJ++、後にVisual J#と呼ばれたJava風言語が含まれていましたが、Java仕様とは互換性がありませんでした。これは2007年に廃止され、2015年にはサポートも終了しました。

パフォーマンス

JVM仕様は、実装の詳細に関して実装者にかなりの裁量を与えています。Java 1.3以降、OracleのJREにはHotSpotと呼ばれるJVMが含まれています。これは高性能なJVMとなるように設計されています。

コード実行を高速化するために、HotSpot はジャストインタイムコンパイルを採用しています。オブジェクトの割り当てとガベージコレクションを高速化するために、HotSpot は世代別ヒープを使用しています。

世代ヒープ

Java仮想マシンヒープは、JVMが動的なメモリ割り当てに使用するメモリ領域です[41]

HotSpot ではヒープは世代に分割されます。

  • 若い世代には、作成されてすぐにガベージ コレクションされる短命のオブジェクトが格納されます。
  • より長く存続するオブジェクトは、古い世代tenured世代とも呼ばれます)に移動されます。このメモリは(2つの)Survivors領域に分割され、最初のガベージコレクションと次のガベージコレクションを生き残ったオブジェクトがそこに保存されます。

永久世代(またはpermgen)は、Java 8より前のクラス定義と関連メタデータに使用されていました。永久世代はヒープの一部ではありませんでした。[42] [43]永久世代はJava 8から削除されました。[44]

元々は永続的な世代は存在せず、オブジェクトとクラスは同じ領域に一緒に保存されていました。しかし、クラスのアンロードはオブジェクトのコレクションよりもはるかに少ない頻度で発生するため、クラス構造を特定の領域に移動することで、パフォーマンスが大幅に向上しました。[42]

安全

Java JREは多数のコンピュータにインストールされています。そのため、古いバージョンのJREを使用しているエンドユーザーは、多くの既知の攻撃に対して脆弱です。このため、Javaは本質的に安全ではないという広く信じられている考え方が生まれました。[45] Java 1.7以降、OracleのWindows用JREには自動更新機能が搭載されています。

Javaブラウザプラグインが廃止される前は、あらゆるウェブページでJavaアプレットが実行される可能性があり、悪意のあるウェブサイトにとって容易にアクセスできる攻撃対象領域となっていました。2013年、カスペルスキー研究所は、Javaプラグインがコンピュータ犯罪者にとって好んで使われる攻撃手法であると報告しました。ハッカーがハッキングしたウェブサイトに展開する多くのエクスプロイトパックには、Javaエクスプロイトが含まれています。[46] Javaアプレットは、2018年9月25日にリリースされたJava 11で削除されました。

Javaバージョン

Java
バージョン
変更点
252025長期サポート(LTS)リリース
212023長期サポート(LTS)リリース
172021LTSリリースにはいくつかの機能強化があり、スイッチ文とシールクラスのパターンマッチングを提供します。
162021データモデリング機能を強化するために、レコードクラスパターンマッチングシールクラスを導入しました。
152020プレビュー機能としてテキストブロックとシールクラスを導入し、文字クラスの処理を強化しました
142020プレビュー機能として、レコードクラスinstanceofのパターンマッチングの新機能を導入しました。
132019拡張機能、テキストブロック、従来のソケット APIの再実装が含まれています
122019スイッチ式と新しいシェナンドーガベージコレクターを導入しました
112018LTSリリース、新しいHTTPクライアントを導入、Java EEおよびCORBAモジュールを削除
102018ローカル変数型推論(var)を導入し、型を指定せずにローカル変数を宣言できるようになりました。
92017アプリケーションをモジュール化するためのJava Platform Module System (JPMS)、JShellインタラクティブJava REPLを導入
82014メジャーリリースでは、生産性向上のためにラムダ式と新しい日付と時刻の APIが導入されました
72011try-with-resourcesSwitch on StringDiamond Operatorを導入し、拡張された例外処理、新しいファイル I/O ライブラリ (NIO.2) を追加しました。
62006スクリプト言語サポート(JSR 223)、Webサービス拡張機能を導入し、SQL XMLサポートを備えたJDBC 4.0を提供しました。
52004重要なリリースで、ジェネリック拡張 for ループオートボックス化/アンボックス化静的インポート可変引数列挙アノテーションが含まれています。
42002正規表現例外チェーン、NIO (New Input/Output) と呼ばれる新しい I/O API セット、新しいログ APIを導入しました。
32000HotSpotという新しい Sun JVM が含まれJava Naming and Directory Interface (JNDI)、Java Platform Debugger Architecture (JPDA) が導入されました。
21998コレクション フレームワーク定数用の Java 文字列メモリ マップジャスト イン タイム (JIT) コンパイラ、およびGUI 用の Swing API を導入しました。
1.11997データベースアクセス用に内部クラスリフレクションJava BeansJDBC APIを導入しました
1.01996Javaプログラミング言語の最初のバージョン。Javaにオブジェクト指向プログラミングとバイトコードを導入し、Javaをクロスプラットフォームにした。

歴史

ジェームズ・ゴスリング

Javaプラットフォームと言語は、 1990年12月にサン・マイクロシステムズの社内プロジェクトとして始まり、C++/ Cプログラミング言語の代替として提供されました。エンジニアのパトリック・ノートンは、サンのC++およびCアプリケーション・プログラミング・インターフェース(API)とツールの現状、そしてNeWSプロジェクトの組織内での運営方法に不満を募らせていました。ノートンはスコット・マクニーリーにサンを離れNeXTに移籍する計画を伝えました。マクニーリーはノートンに、自分が神様だと思って会社を立て直す方法を説明したメールを送ってほしいと依頼しました。ノートンは、サンの他のプロジェクトを停滞させていた官僚主義に縛られずに自律的に活動できる小規模チームの結成を構想しました。マクニーリーはそのメッセージをサンの他の重要人物に伝え、ステルス・プロジェクトが始まりました。[47]

ステルス・プロジェクトはすぐにグリーン・プロジェクトに改名され、ジェームズ・ゴスリングとマイク・シェリダンがノートンに加わった。彼らは他のエンジニアと共に、カリフォルニア州メンロパークのサンドヒル・ロードにある小さなオフィスで作業を開始した。彼らは次世代スマート家電のプログラミングのための新技術の開発を目指しており、サンはこれが大きな新たなビジネスチャンスをもたらすと期待していた。[48]

チームは当初C++の使用を検討しましたが、いくつかの理由から却下しました。限られたリソースで組み込みシステムを開発していたため、C++はメモリを大量に必要とし、その複雑さが開発者のミスにつながると判断しました。また、ガベージコレクションがないため、プログラマーはシステムメモリを手動で管理する必要があり、これは困難でエラーが発生しやすい作業でした。さらに、C++言語にはセキュリティ、分散プログラミングスレッド化といった移植性の高い機能が不足していることも懸念されました。最終的に、あらゆる種類のデバイスに簡単に移植できるプラットフォームが必要でした。

ビル・ジョイはMesaとCを組み合わせた新しい言語を構想していました。「Further」という論文の中で、彼はサンに対し、同社のエンジニアがC++をベースとしたオブジェクト指向環境を開発すべきだと提案しました。当初、ゴスリングはC++(彼はこの開発案を「C++++」と呼んでいました)の修正と拡張を試みましたが、すぐにそれを断念し、オフィスのすぐ外に立つ木にちなんでOakと名付けた新しい言語の開発に着手しました。 [49]

1992年の夏までに、チームはGreen OS、Oak言語、ライブラリ、ハードウェアを含む新しいプラットフォームの一部をデモンストレーションすることができた。1992年9月3日の最初のデモンストレーションは、グラフィカルインターフェースとユーザーを支援する「Duke」と呼ばれるスマートエージェントを備えたStar7 [1]という名の携帯情報端末(PDA)デバイスの構築に焦点を当てたものだった。同年11月、Greenプロジェクトはサン・マイクロシステムズの完全子会社であるFirstpersonとして分社化し、チームはカリフォルニア州パロアルトに移転した。[50] Firstpersonチームは高度にインタラクティブなデバイスの構築に関心を持っており、タイム・ワーナーがセットトップボックスの提案依頼(RFP)を発行した際に、Firstpersonはターゲットを変更し、セットトップボックスプラットフォームの提案で応じた。しかし、ケーブル業界は彼らのプラットフォームがユーザーに過度の制御権を与えていると感じたため、FirstpersonはSGIに敗れた3DO社とのセットトップボックスに関する追加契約も成立せず、テレビ業界からの関心を集めることができなかったため、同社はサン傘下に戻されました。

JavaとWebの出会い

ジョン・ゲージ

1994年6月から7月にかけて、ジョン・ゲージ(サンの科学部長)、ゴスリング、ジョイ、ノートン、ウェイン・ロージング、エリック・シュミットと3日間のブレインストーミングを行った後 、チームはプラットフォームの対象をワールド・ワイド・ウェブ(WWW)へと再設定した。彼らは、 Mosaicのようなグラフィカルなウェブブラウザの登場により、インターネットはケーブルテレビ向けに構想していたのと同じ高度にインタラクティブなメディアへと進化できると感じていた。そのプロトタイプとして、ノートンは映画『ブレードランナー』にちなんで名付けられた小さなブラウザ、WebRunnerを開発し、 1995年にHotJava [48]と改名した。

Sunは、商標調査の結果、 Oak TechnologyがOakという名称を使用していることが判明した後、Oak言語の名前をJavaに変更した。[51] Sunは市場シェアを獲得するため、Javaのライセンスを原価以下に設定した。[52] Java 1.0aは1994年にダウンロード可能になったが、Javaの最初の一般公開は、HotJavaブラウザを搭載したJava 1.0a2で、1995年5月23日にGageによってSunWorldカンファレンスで発表された。Gageの発表に合わせて、Netscape Communications CorporationのエグゼクティブバイスプレジデントであるMarc Andreessenが、NetscapeブラウザにJavaサポートが含まれることを突然発表した。1996年1月9日、Sun Microsystemsは、この技術を開発するためにJavaSoftグループを設立した。[53]

ウェブブラウザ用のいわゆる Java アプレットは、もはや Java の最も一般的な使用法 (サーバー側での使用が増えているなど) ではなく、クライアント側でコードを実行する最も一般的な方法 (JavaScript がより一般的になっている) でもありませんが、JVM サポートが廃止された後でも、たとえば TeaVM を使用して、ウェブブラウザで Java (または Kotlin などの他の JVM 言語) を実行することは可能です

GNU一般公衆利用許諾契約書

2006年11月13日、サン・マイクロシステムズはJavaの実装の大部分をGNU一般公衆利用許諾書(GPL)の下で公開した。[54] [55]

バージョン履歴

Java言語は、1996年1月23日のJDK( Java開発キット)1.0のリリース以来、数々の変更と標準ライブラリへの多数のクラスおよびパッケージの追加を経てきました。J2SE 1.4以降、Java Community Process(JCP)がJava言語の進化を統括してきました。JCPはJava仕様要求(JSR)を用いて、Javaプラットフォームへの追加および変更を提案・規定しています。Java言語仕様(JLS)は言語仕様を規定し、JLSへの変更はJSR 901に基づいて管理されています。[56]

Sun は1997 年 2 月 19 日にJDK 1.1 をリリースしました。主な追加機能には、 Abstract Window Toolkit (AWT) イベント モデルの大規模な再構築、言語に追加された内部クラス、 JavaBeans、およびJava Database Connectivity (JDBC) が含まれます。

J2SE 1.2 (1998年12月8日) – コードネームPlayground。このリリースとその後のJ2SE 5.0までのリリースはJava 2にブランド名が変更され、JDKのバージョン名「J2SE」( Java 2 Platform, Standard Edition )がJ2EE ( Java 2 Platform, Enterprise Edition )およびJ2ME ( Java 2 Platform, Micro Edition )と区別するために使用された。主な追加機能には、リフレクションコレクションフレームワーク、Java IDL ( CORBA相互運用​​性のためのインタフェース記述言語実装)、およびSwingグラフィカルAPIのコアクラスへの統合があった。Javaプラグインがリリースされ(その後WebブラウザベンダーはJavaプラグインのサポートを削除し、 Javaコードベースの削除のために非推奨となっており、2026年のJava 26で削除される予定である[57] )、SunのJVMに初めてJITコンパイラが搭載された。

J2SE 1.3 (2000年5月8日) – コードネームKestrel。主な変更点としては、HotSpot JVM (HotSpot JVMは1999年4月にJ2SE 1.2 JVM用に初めてリリースされました)、JavaSound、Java Naming and Directory Interface (JNDI)、Java Platform Debugger Architecture (JPDA) のバンドルが挙げられます。

J2SE 1.4 (2002年2月6日) – コードネームMerlin。これは、Java Community Process の下で JSR 59 として開発された Java プラットフォームの最初のリリースとなった。[58]主な変更点には、 Perlをモデルにした正規表現例外チェーン、統合されたXMLパーサーとXSLTプロセッサ ( JAXP )、Java Web Startなどがある。

J2SE 5.0 (2004年9月30日) – コードネームTiger。当初は1.5という番号が付けられ、現在も社内バージョン番号として使用されている。[59] JSR 176に基づいて開発されたTigerは、 for-eachループジェネリックオートボクシング可変長引数など、いくつかの重要な新しい言語機能を追加した[60]

Java SE 6 (2006年12月11日) – コードネームMustang。データベースマネージャがバンドルされ、JVMでスクリプト言語(MozillaRhinoエンジンを使用したJavaScriptなど)の使用を容易にしました。このバージョン以降、Sunは「J2SE」という名称をJava SEに置き換え、バージョン番号から「.0」を削除しました。[61]その他の主な変更点としては、プラグ可能なアノテーションJSR 269のサポート、 Windows VistaのルックアンドフィールをサポートするためのネイティブUIの拡張を含む多くのGUIの改善、監視とトラブルシューティングを向上させるためのJava Platform Debugger Architecture (JPDA)とJVM Tool Interfaceの改善などがあります

Java SE 7 (2011年7月28日) – コードネームDolphin。このバージョンはJSR 336に基づいて開発されました。[62]スイッチ内の文字列、try-with-resources、ジェネリックインスタンス作成のための型推論など、多くの小さな言語変更が加えられました。JVMは動的言語のサポートにより拡張され、クラスライブラリはjoin/forkフレームワークなどにより拡張されました。[63]改良された新しいファイルI/Oライブラリ、 SCTPなどの新しいネットワークプロトコルのサポートなどが追加されました。Java 7 Update 76は2015年1月にリリースされ、有効期限は2015年4月14日でした。[64]

2016年6月、Java 7の最後の公開アップデート後、[65] Java 6、7、8にリモートから悪用可能な」セキュリティバグがあることが発表されました。 [17]

Java SE 8 (2014年3月18日) – コードネームKenai。主な変更点としては、ラムダ式クロージャ)とデフォルトメソッドの言語レベルでのサポート、Project Nashorn JavaScript ランタイム、Joda Time に着想を得た新しい日付と時刻 API、PermGen の削除などが挙げられます。このバージョンはWindows XPプラットフォームでは公式にはサポートされていませんが[66]、動作することが確認されています。そのため、Java 7 のライフサイクル終了に伴い、XP ユーザーに推奨されるバージョンとなっています。以前は、Windows XP SP3 向けの非公式な手動インストール方法のみが説明されていました。これは、Java の開発プラットフォームである JDK8 を指しており、完全に機能するJava 実行環境も含まれています[67]。Java 8 は、Windows Server 2008 R2 SP1、Windows Vista SP2、Windows 7 SP1、Ubuntu 12.04 LTS 以降(および他の一部の OS)でサポートされています[68] 。

Java SE 910ではシステム要件が厳しくなり、Windows 7またはServer 2012(認定されているウェブブラウザの最小バージョンはInternet Explorer 11または他のウェブブラウザに引​​き上げられている)となり、Oracleはすべてのプラットフォームで32ビット互換性を廃止し、Oracleの「 64ビットJava仮想マシン(JVM)のみが認定されています」。[69]

Java SE 11 LTSは2018年9月にリリースされました。これは、バージョン9からラピッドリリースモデルが採用されて以来初のLTSリリースです。OpenJDK 11は、初めてGNU General Public Licenseの下でJavaプラットフォームの完全なソースコードを提供します。Oracleはオプションの独自ライセンスとのデュアルライセンスを引き続き提供していますが、独自ライセンス版に固有のコードの違いやモジュールはありません。[70] Java 11の機能には、2つの新しいガベージコレクター実装、深刻な問題をデバッグするためのフライトレコーダー、 WebSocketサポートを含む新しいHTTPクライアントが含まれます[71]

Java SE 12は2019年3月にリリースされました。[72]

Java SE 13は2019年9月にリリースされました。[73]

Java SE 14は2020年3月にリリースされました。[74]

Java SE 15は2020年9月にリリースされました。

Java SE 16は2021年3月にリリースされました。

Java SE 17 LTS は 2021 年 9 月にリリースされました。

Java SE 18は2022年3月にリリースされました。

Java SE 19は2022年9月にリリースされました。

Java SE 20は2023年3月にリリースされました。

Java SE 21 LTS は 2023 年 9 月にリリースされました。

Java SE 22は2024年3月にリリースされました。

言語の変更に加えて、Javaクラスライブラリにも長年にわたり大きな変更が加えられ、JDK 1.0では数百クラスだったものが、J2SE 5.0では3000クラス以上にまで増加しました。SwingJava 2Dといった全く新しいAPIも進化し、JDK 1.0の多くのクラスとメソッド(ファイナライズ関連など)が非推奨となりました中には「完全に非推奨」となったものも含まれています)。[ 75]

Java 22では、めったに使用されないAPI(スレッド用)が少なくとも1つ削除されました。[76] [77]

使用法

デスクトップでの使用

Windows Vistaデスクトップ (Java 8 ではサポートされていますが、Java 11 などのそれ以降のバージョンでは正式にはサポートされていません) のデスクトップ コンピューターで実行されている Java プログラム

現在のJavaは、64ビットWindows 10(およびServer 2016)以降、64ビットmacOS 13.x以降、および64ビットLinux(Oracle Enterprise Linuxなど)でサポートされています。その他のOSはOracle(ビルド用)ではサポートされていませんが、IBMやSAPなどではサポートされている可能性があります。ただし、AIX、Ubuntu、RHEL、Alphine/ muslなどでは動作することが確認されています。32ビットWindowsのサポートはJava 22以降非推奨です(また、32ビットJVMはデフォルト以外のオプションなしではビルドできなくなりました)。

2010年のOracleによると、Java Runtime Environmentは8億5000万台以上のPCで見つかった。[78] Microsoftは、バンドルされたJava Runtime EnvironmentにWindows固有のクラスを追加し、新しいクラスをVisual J++で利用できるようにしたとしてSun Microsystemsに訴えられて以来、オペレーティングシステムにJava Runtime Environment( JRE)をバンドルしていない[引用が必要] Appleはバージョン10.7の時点でOS XにJavaランタイムを同梱していないが、JREを必要とするアプリケーションを初めて起動するときに、ユーザーはそれをダウンロードしてインストールするように求められる。[引用が必要]多くのLinuxディストリビューションには、 OpenJDKランタイムがデフォルトの仮想マシンとして含まれているため、独自のOracle JREをダウンロードする必要がなくなる。[79]

Javaアプリケーションの中には、NetBeansEclipseJetBrains [80]など の統合開発環境や、 LimeWireVuzeなどのファイル共有クライアントなど、デスクトップで広く使用されているものがあります。JavaはMATLABの数学プログラミング環境でも、ユーザーインターフェースのレンダリングとコアシステムの一部として使用されています。Javaは、Lotus Notesなどのハイエンドの共同作業アプリケーションにクロスプラットフォームのユーザーインターフェースを提供しています

オラクルは、まずJDK 9のJava Runtime Environmentから個別にインストール可能なJavaブラウザプラグインを廃止し、その後将来のリリースから完全に削除して、Web開発者に代替技術の使用を強制する予定です。[81]

マスコット

デュークはジャワ島のマスコットです。[82]

SunはJava SEJava MEをフリーソフトウェアライセンスGNU General Public License )の下でリリースすると発表した際、同時にDukeのグラフィックをフリーBSDライセンスの下でリリースした。 [83] Dukeのキャラクターは毎年新しく登場する。[84]例えば、2011年7月の「Future Tech Duke」には、より大きな鼻、ジェットパック、そして青い翼が含まれていた。[85]

ライセンス

SunのJava実装(事実上のリファレンス実装)のソースコードは以前から公開されていましたが、最近まで[86]、ライセンス条項により、Sunとの契約(そして通常は契約料の支払い)なしに利用できる機能は厳しく制限されていました。そのため、これらの条項はオープンソース・イニシアチブ(OSI)フリーソフトウェア財団(FSF)の要件を満たしておらず、Sun Javaはプロプライエタリ・プラットフォームとみなされていました。[87]

いくつかのサードパーティプロジェクト(GNU ClasspathApache Harmonyなど)がJavaの部分的なフリーソフトウェア実装を作成していましたが、Sunライブラリの巨大なサイズとクリーンルーム方式の使用により、Javaライブラリの実装(コンパイラとVMは比較的小さく、明確に定義されています)は不完全で、完全な互換性がありませんでした。また、これらの実装はSunの実装に比べてはるかに最適化が遅れていました。[要出典]

フリーソフトウェア

ジョナサン・I・シュワルツ

サンはJavaOne 2006でJavaをフリーオープンソースのソフトウェアにすると発表しました[88]また、2006年10月25日のOracle OpenWorldカンファレンスで、ジョナサン・I・シュワルツは、同社が30日から60日以内にコアJavaプラットフォームをフリーでオープンソースのソフトウェアとしてリリースすることを発表する予定であると述べました。[89]

サンは2006年11月13日、Java HotSpot仮想マシンとコンパイラをGNU一般公衆利用許諾書( GPL)に基づくフリーソフトウェアとしてリリースし、JDKの残りの部分(JREを含む)を2007年3月までにGPL(「サンがGPLに基づく配布可能なソースコード形式で公開する権利を持たないいくつかのコンポーネントを除く」)に移行することを約束した。[90]リチャード・ストールマンによると、これは「Javaトラップ」の終焉を意味する。[91] マーク・シャトルワースは、この最初のプレス発表を「フリーソフトウェアコミュニティにとって真のマイルストーン」と呼んだ。[92]

Sunは2007年5月8日にクラスライブラリソースコードをGPLの下で公開したが、一部の限定された部分は、フリーソフトウェアおよびオープンソースライセンスの下でのコードの公開を望まない第三者からSunによってライセンス供与されたものであった。[93]制限された部分の中には、フォントレンダリングや2Dラスタライズなど、プラットフォームのかなり重要な部分があったが、これらは後にSunによってオープンソースとして公開された(OpenJDKクラスライブラリを参照)。

Sunの目標は、依然としてプロプライエタリでクローズドソースのままである部分を代替実装に置き換え、クラスライブラリを完全にフリーでオープンソースにすることでした。その間、IcedTeaと呼ばれるサードパーティプロジェクトは、制約のあるコードをスタブまたはGNU Classpathのコードに置き換えることで、完全にフリーで非常に使いやすいJDKを作成しました。しかし、OpenJDKはその後、制約のある部分なしでビルド可能になり(OpenJDK 6 b10 [94]以降)、ほとんどのLinuxディストリビューションのデフォルトのランタイム環境となっています。[95] [96] [97] [98]

2008年6月、 IcedTea 6( Fedora 9上のOpenJDKのパッケージ版)がテクノロジー互換性キットのテストに合格し、完全に互換性のあるJava 6実装であると主張できることが発表されました。 [99]

OpenJDKはGPLに基づいているため、エンドユーザー(またはそのシステム管理者)が各システムに適切なバージョンのOracle JREをダウンロードしてインストールする必要はなく、カスタムバージョンのJREをソフトウェアアプリケーションとともに直接再配布することが可能です。 [100] [101]

批判

ほとんどの場合、WebブラウザではJavaのサポートは不要であり、セキュリティ専門家は絶対に必要な場合を除き、ブラウザでJavaを実行しないことを推奨しています。[ 102 ]一部のWebサイトでJavaが必要な場合は、ユーザーはそれらのサイト専用のブラウザを別途インストールする必要があると提案されました。[要出典]

ジェネリック医薬品

Java 5.0にジェネリックが追加された当時、既に大規模なクラスフレームワークが存在していました(その多くは既に非推奨でした)。そのため、移行互換性と既存クラスの再利用性を確保するため、ジェネリックは消去型で実装されることになりました。そのため、他の言語と比較して、ジェネリックの追加によって提供できる機能は制限されていました。[103] [104]型ワイルドカードの追加はJavaを不安定にしました。[105]

符号なし整数型

Java にはネイティブの符号なし整数型がありません。符号なしデータはCで書かれたプログラムから生成されることが多く、これらの型がないため C と Java の間で直接データを交換できません。また、符号なしの大きな数は暗号化を含む多くの数値処理分野でも使用されるため、これらのタスクに Java を使用するのは不便です。[106]変換コードと大きなデータ型を使用することでこの問題を部分的に回避することは可能ですが、符号なしデータの処理において Java の使用が面倒になります。32 ビットの符号付き整数を使用すれば 16 ビットの符号なし値を比較的簡単に保持できますが、32 ビットの符号なし値には 64 ビットの符号付き整数が必要になります。さらに、Java 言語には 64 ビットを超える型が存在しないため、64 ビットの符号なし値は Java のどの整数型を使用しても格納できません。関数を使用して抽象化すると、他の言語にネイティブな多くの操作で関数呼び出しが必要になります。あるいは、Javaの符号付き整数を使用して同じサイズの符号なし整数をエミュレートすることも可能ですが、これには複雑なビット演算の詳細な知識が必要です。[107]

浮動小数点演算

Javaの浮動小数点演算は主にIEEE 754二進浮動小数点演算の標準に基づいていますが、strictfp例外フラグや方向丸めなど、IEEE標準754で義務付けられている機能は、修飾子を使用してもサポートされません。さらに、754で許可され、多くのプロセッサに存在する拡張精度浮動小数点型は、Javaでは許可されていません。[108] [109]

パフォーマンス

Javaの初期( 2000年にJava 1.3でHotSpot VMが実装される以前)には、パフォーマンスに関する批判がいくつかありました。ベンチマークでは、JavaはC言語(ネイティブコードにコンパイルされる言語)よりも約50%遅いと報告されていました。[110] [111] [112]

Javaのパフォーマンスは初期のバージョンから大幅に向上しました。[26] JITコンパイラとネイティブコンパイラのパフォーマンスは、いくつかの最適化テストでほぼ同等であることが示されています。[26] [27] [28]

Javaバイトコードは、実行時に仮想マシンによって解釈されるか、ロード時または実行時にネイティブコードにコンパイルされ、コンピューターのハードウェア上で直接実行されます。解釈はネイティブ実行よりも遅く、ロード時または実行時のコンパイルは、コンパイルによる初期パフォーマンスの低下を招きます。最新の高性能JVM実装はすべてコンパイル方式を採用しているため、初期起動後はネイティブコードと同等のパフォーマンスが得られます。

安全

Javaプラットフォームは、悪意のあるソフトウェアや粗悪なソフトウェアからユーザーを保護するために、信頼できないバイトコードを「サンドボックス」方式で実行できるセキュリティアーキテクチャ[113]を提供しています。この「サンドボックス」機能は、マルウェアに悪用される可能性のある特定のプラットフォーム機能やAPIへのアクセス(ローカルファイルシステムへのアクセス、任意のコマンドの実行、通信ネットワークへのアクセスなど)を制限することで、ユーザーを保護することを目的としています。

近年、研究者らは、Oracleを含む広く使用されているJava実装の一部に、信頼できないコードがサンドボックス機構を回避し、ユーザーを悪意のある攻撃にさらす可能性のある多数のセキュリティ上の欠陥を発見しました。これらの欠陥は、公開ウェブサイトからダウンロードしたJavaアプレットを実行するウェブブラウザプラグインなど、任意の信頼できないバイトコードを実行するJavaアプリケーションにのみ影響します。ユーザーが実行中のすべてのコードを信頼し、完全に制御できるアプリケーションには影響しません。

2012年8月31日、Microsoft Windows、 OS X 、Linux上のJava 6と7(どちらも当時サポートされていた)に重大なセキュリティ上の欠陥があり、悪意のあるWebページを読み込むだけでリモートからの攻撃が可能になることが判明しました。[114]その後、 Java 5にも欠陥があることが判明しました。[115]

2013年1月10日、3人のコンピュータ専門家がJavaに反対を唱え、ロイター通信に対し、Javaは安全ではなく、ユーザーはJavaを無効にするべきだと述べた。AlienVault Labsのラボマネージャー、ハイメ・ブラスコ氏は、「Javaはひどい。安全ではない。無効にする必要がある」と述べた。[116]この脆弱性はJava 7に影響し、 Java 6にも影響するかどうかは不明であるため、ユーザーはJavaを無効にすることが推奨されている。[117] [118] Oracleのセキュリティアラートでは、Javaの重要なセキュリティ関連パッチのスケジュールが発表されている。[119]

2013年1月14日、セキュリティ専門家は、このアップデートでは依然としてPCを攻撃から保護できなかったと述べた。[120]この脆弱性を突いた脆弱性に対し、米国国土安全保障省はユーザーにJavaを無効にするかアンインストールするよう促した。[18] Appleは、ウイルス対策プログラムを通じて、 OS Xオペレーティングシステムを実行するすべてのコンピュータでJavaを限定的にブラックリストに登録した。 [121]

2014年、当時話題になっていたJavaのセキュリティと脆弱性の問題を受けて、セキュリティブロガーのブライアン・クレブス氏は、ユーザーに対し、少なくともJavaブラウザプラグインとソフトウェア全体の削除を呼びかけました。「Javaプラグインのない世界(そして読者に四半期ごとのパッチアップデートについて通知する必要がなくなる世界)が来るのを楽しみにしています。しかし、このプラグインの様々なバージョンが世界中のエンドユーザーシステムからほぼ削除されるまでには、おそらく何年もかかるでしょう。」[122]「かつては有望視されていましたが、ブラウザでの有用性は失われ、コンピューターユーザーを犠牲にしてサイバー犯罪者を喜ばせる悪夢と化しています。」[123]「すべてのPCとMacからJavaをアンインストールし、その後、再度インストールする必要があるかどうかを慎重に検討すべきです。一般的な家庭ユーザーであれば、Javaなしでもおそらく問題なく使用できるでしょう。しかし、ビジネスユーザーの場合は、他に選択肢がないかもしれません。」[124]

アドウェア

Oracleが配布するJavaランタイム環境には、インストール時および毎月リリースされるアップデート時に、デフォルトでスポンサー付きソフトウェアがバンドルされてきた歴史があります。これには、ブラウザ検索を広告にリダイレクトする「 Ask.comツールバー」や「McAfee Security Scan Plus」が含まれます。 [125]これらのオファーは、Javaコントロールパネルの設定でブロックできますが、これは分かりにくいです。この設定は、Javaコントロールパネルの「詳細設定」タブの「その他」の見出しの下にあり、「スポンサーオファー」を抑制するオプションとしてラベル付けされています。

アップデートシステム

Javaは、Google Chrome [127]やFlash Player [128]とは異なり、ユーザーの介入や管理者権限を必要としない自動アップデータをまだリリースしていません[126]

参照

参考文献

  1. ^ 「JavaSoft、Java 1.0をリリース」(プレスリリース)。2008年2月5日時点のオリジナルよりアーカイブ2016年2月9日閲覧。
  2. ^ オルティス、C. エンリケ;ジゲール、エリック (2001)。Java 2 Micro Edition のモバイル情報デバイス プロファイル: 開発者ガイド(PDF)ジョン・ワイリー&サンズISBN  978-0471034650. 2012年5月30日閲覧
  3. ^ 「Java Development Kit 25 リリースノート」. Oracle Corporation . 2025年6月9日閲覧
  4. ^ 「Java™ SE Development Kit 21、21.0.5 リリースノート」。Oracle Corporation 。 2024年10月16日閲覧
  5. ^ 「Java™ SE Development Kit 17、17.0.13 リリースノート」。Oracle Corporation 。 2024年10月16日閲覧
  6. ^ 「Java™ SE Development Kit 11、11.0.25 リリースノート」。Oracle Corporation 。 2024年10月16日閲覧
  7. ^ 「Java™ SE Development Kit 8、Update 431 リリースノート」。Oracle Corporation . 2024年10月16日閲覧
  8. ^ "HotSpot Group". Openjdk.java.net . 2016年2月9日閲覧
  9. ^ ab 「Oracle JDK 8およびJRE 8認定システム構成コンテンツ」Oracle.com 2014年4月8日2016年2月9日閲覧
  10. ^ 「Java SE 7でサポートされるロケール」Oracle.com 2016年2月9日閲覧
  11. ^ 「OpenJDK: GPLv2 + クラスパス例外」。Openjdk.java.net。1989年4月1日。 2016年2月9日閲覧
  12. ^ 「BCL For Java SE」Oracle.com、2013年4月2日。 2016年2月9日閲覧
  13. ^ Naughton, Patrick. 「JavaはObjective-Cの影響を強く受けていた」. Virtual School . 2012年8月13日時点のオリジナルよりアーカイブ。
  14. ^ Alexander, Christopher. 「Java SE 6 Advanced」www.oracle.com . 2018年5月20日閲覧
  15. ^ 「システムから古いバージョンのJavaをアンインストールする必要があるのはなぜですか?」www.java.com。2018年2月12日時点のオリジナルよりアーカイブ2018年2月6日閲覧。
  16. ^ 「システムから古いバージョンのJavaをアンインストールする必要があるのはなぜですか?」Oracle . 2016年9月9日閲覧
  17. ^ ab 「Oracle Critical Patch Update - 2016年7月」。www.oracle.com
  18. ^ ab Whittaker, Zack (2013年1月11日). 「国土安全保障省、ゼロデイ脆弱性を指摘しJavaの無効化を勧告」ZDNet . 2016年2月9日閲覧
  19. ^ 「Java SEの概要」Oracle Corporation . 2017年2月26日閲覧
  20. ^ 「Java SE 6 リリースコンテンツ」。Oracle Corporationおよび/またはその関連会社。 2013年1月1日閲覧
  21. ^ Java SE 7の公式リファレンス実装としてOpenJDKに移行
  22. ^ Java プラットフォーム、Standard Edition 7 リファレンス実装
  23. ^ 「Java Platform, Standard Edition 8 リファレンス実装」。2015年11月21日時点のオリジナルよりアーカイブ。
  24. ^ 「Java EEとJava SEの違い - 初めてのJava EEプラットフォーム入門」Docs.oracle.com、2012年4月1日。 2012年7月18日閲覧
  25. ^ 「Java EEの概要」Oracle Corporation . 2017年2月26日閲覧
  26. ^ abc Lewis, JP; Neumann, Ulrich. 「JavaとC++のパフォーマンス比較」南カリフォルニア大学グラフィックス・イマーシブ・テクノロジー・ラボ.
  27. ^ ab 「Java Faster than C++ Benchmark」Kano.net、2003年11月14日。 2016年2月9日閲覧
  28. ^ ab FreeTTS – パフォーマンスのケーススタディ Archived 2009-03-25 at the Wayback Machine、Willie Walker、Paul Lamere、Philip Kwok
  29. ^ “OpenJDK FAQ”. OpenJDK . 2021年12月7日時点のオリジナルよりアーカイブ。 2021年10月23日閲覧
  30. ^ “BCL for Java SE”. 2022年8月14日時点のオリジナルよりアーカイブ2022年8月14日閲覧。
  31. ^ 「Java CPU and PSU Releases Explained」。2014年11月3日時点のオリジナルよりアーカイブ。
  32. ^ “アーカイブコピー”. 2022年8月14日時点のオリジナルよりアーカイブ2022年8月14日閲覧。{{cite web}}: CS1 maint: アーカイブされたコピーをタイトルとして (リンク)
  33. ^ “アーカイブコピー”. 2022年8月10日時点のオリジナルよりアーカイブ2022年8月14日閲覧。{{cite web}}: CS1 maint: アーカイブされたコピーをタイトルとして (リンク)
  34. ^ “Java 9モジュールを理解する”. 2022年8月14日時点のオリジナルよりアーカイブ2022年8月14日閲覧。
  35. ^ 「Java モジュール」。
  36. ^ 「Java 9のJDKおよびJREにおける構造的変更」2017年10月30日。
  37. ^ 「IBM Developer」。
  38. ^ 「Java 9のモジュール化ガイド | Baeldung」2018年4月18日。
  39. ^ 「第1章 概要」. docs.oracle.com .
  40. ^ www.beanshell.org
  41. ^ 「Hotspot Java仮想マシンのガベージコレクションに関するよくある質問」Sun Microsystems . 2003年2月6日. 2009年2月7日閲覧
  42. ^ ab ジョン・マサミツ (2006年11月28日). 「Presenting the Permanent Generation」. 2016年8月25日時点のオリジナルよりアーカイブ2009年2月7日閲覧。
  43. ^ Nutter, Charles (2008年9月11日). 「InvokeDynamicの初体験」 . 2009年2月7日閲覧
  44. ^ 「JEP 122: Permanent世代の削除」Oracle Corporation、2012年12月4日。 2014年3月23日閲覧
  45. ^ 「Javaとは何か、安全ではないのか、そして使うべきなのか?」Lifehacker.com、2013年1月14日。 2015年6月26日閲覧
  46. ^ 「Javaエクスプロイトに対する保護手段はあるか? | Kaspersky Lab」Kaspersky.com、2013年9月9日。2015年4月4日時点のオリジナルよりアーカイブ2015年6月26日閲覧。
  47. ^ サウスウィック、カレン (1999). 『正午の白昼:スコット・マクニーリーとサン・マイクロシステムズの台頭の裏話』 ニューヨーク [ua]: ワイリー. pp. 120–122. ISBN 0471297135
  48. ^ Byous, Jon (2003年4月). 「Javaテクノロジー:初期の時代」. Sun Microsystems . 2008年5月30日時点のオリジナルよりアーカイブ2009年8月2日閲覧。
  49. ^ サウスウィック、カレン(1999年)『正午:スコット・マクニーリーとサン・マイクロシステムズの台頭の裏話』ニューヨーク[ua]:ワイリー、p.124、ISBN 0471297135
  50. ^ Walrath, Kathy (2001年12月21日). 「序文」. Sun Microsystems . 2009年8月2日閲覧
  51. ^ Murphy, Kieron (1996年10月4日). 「それで、なぜJavaと呼ぶことにしたのか?」JavaWorld . 2020年7月15日閲覧「弁護士からは、『OAK』という名前は(既に)オーク・テクノロジーズが商標登録しているため使えないと言われました」とサンのシニアエンジニア、フランク・イェリン氏は語る。「そこで、新しい名前のアイデアを出すためのブレインストーミング・セッションが開かれました。」
  52. ^ Bank, David (1995年12月1日). 「The Java Saga」. Wired . 2022年10月4日閲覧「これは原価以下です」とシュミット氏は言う。「近い将来、ライセンス事業では損失が出るでしょう。これは市場シェア獲得のための戦略的な投資です。」
  53. ^ 「サン・マイクロシステムズ、JavaSoftの設立を発表」(プレスリリース)サン・マイクロシステムズ、1996年1月9日。2008年2月10日時点のオリジナルよりアーカイブ。
  54. ^ “Sun Opens Java”. Sun Microsystems. 2006年11月13日. オリジナルより2008年5月13日時点のアーカイブ。
  55. ^ O'Hair, Kelly (2010年12月). 「OpenJDK7およびOpenJDK6バイナリプラグロジックの削除」. Oracle Corporation . 2011年11月25日閲覧
  56. ^ 「Java Community Process(SM)プログラム - JSR:Java仕様リクエスト - 詳細JSR# 63」Jcp.org . 2016年2月9日閲覧
  57. ^ 「JEP 504: Applet APIの削除」。openjdk.org 2025年10月31日閲覧
  58. ^ 「Java Community Process(SM)プログラム - JSR:Java仕様リクエスト - 詳細JSR# 59」Jcp.org . 2016年2月9日閲覧
  59. ^ 「バージョン1.5.0か5.0か?」Java.sun.com . 2016年2月9日閲覧
  60. ^ 「Java Community Process(SM)プログラム - JSR:Java仕様リクエスト - 詳細JSR# 176」Jcp.org . 2016年2月9日閲覧
  61. ^ 「Java Naming」Java.com . Oracle . 2011年8月25日閲覧
  62. ^ 「Java Community Process(SM)プログラム - JSR:Java仕様リクエスト - 詳細JSR# 336」Jcp.org . 2016年2月9日閲覧
  63. ^ Lea, Doug (2004年9月13日). 「JSR: Java仕様リクエスト: JSR 166: 並行処理ユーティリティ」. Javaコミュニティプロセス. Oracle Corp.
  64. ^ 「Java™ SE Development Kit 7 Update 76 リリースノート」。Oracle.com 。 2016年2月9日閲覧
  65. ^ 「Java 7 および Java 8 リリース日別」www.java.com
  66. ^ 「Windows XPとJava」Java.com、2014年4月8日。 2016年2月9日閲覧
  67. ^ 「Java - Windows XPにJDK8をインストールする - advapi32.dllエラー」。Stack Overflow
  68. ^ 「Oracle JDK 8 および JRE 8 認定システム構成」。www.oracle.com
  69. ^ 「Oracle JDK 10 認定システム構成」www.oracle.com 。 2018年3月27日閲覧。X.orgモードのみサポートされています。Waylandモードはサポートされていません。
  70. ^ 「Oracle Java SE サポートロードマップ」Oracle Corporation 2018年9月25日. 2018年9月25日閲覧
  71. ^ "JDK 11". Oracle Corporation . 2018年9月25日. 2018年9月26日閲覧
  72. ^ “JDK 12”. OpenJDK . 2019年3月22日閲覧
  73. ^ “JDK 13”. OpenJDK . 2019年9月17日閲覧
  74. ^ “JDK 14”. OpenJDK . 2020年3月25日閲覧
  75. ^ 「非推奨リスト(Java SE 22)」. cr.openjdk.org . 2024年4月16日閲覧
  76. ^ “Thread.countStackFramesの削除”. bugs.openjdk.org . 2024年4月16日閲覧
  77. ^ “Java SE 22 ( JSR 397)”. cr.openjdk.org . 2024年4月16日閲覧
  78. ^ 「Javaテクノロジーとは何か、なぜ必要なのか?」。2010年9月25日時点のオリジナルよりアーカイブ2011年12月15日閲覧。Javaは、世界中で8億5000万台以上のパーソナルコンピューター、そしてモバイル機器やテレビ機器を含む数十億台のデバイスで動作しています。
  79. ^ 「Java - Fedora プロジェクト Wiki」。fedoraproject.org
  80. ^ 「IntelliJ プラットフォーム」。
  81. ^ トピック、Dalibor(2016年1月27日)。「プラグインフリーのWebへの移行」Oracle。
  82. ^ 「Javaのマスコット、デューク」Oracle . 2019年3月18日閲覧
  83. ^ "duke: Project Home Page". Sun Microsystems . 2007年6月18日時点のオリジナルよりアーカイブ。 2007年3月18日閲覧
  84. ^ 「Javaのマスコット、デューク」。
  85. ^ “Future Tech Duke (The Java Source)”. Tori Wieldt. 2011年8月20日時点のオリジナルよりアーカイブ。 2011年8月17日閲覧
  86. ^ Smith, Donald (2018年9月11日). 「Java 11以降向けのOracle JDKリリース」
  87. ^ リチャード・ストールマン(2006年5月24日)「夜間の太陽の奇妙な出来事」Groklaw . 2010年5月5日時点のオリジナルよりアーカイブ。
  88. ^ Schwartz, Jonathan. 「?」. Jonathan Schwartzのブログ. Sun Microsystems. 2006年7月15日時点のオリジナルよりアーカイブ。
  89. ^ 「Oracle OpenWorld: UnBreakable Linux / 5015.2 は近日中にリリース予定 | Formtek Blog」. Formtek.com. 2006年10月26日. 2016年2月9日閲覧
  90. ^ 「OracleとSun Microsystems | 戦略的買収 | Oracle」Sun.com 2016年2月9日閲覧
  91. ^ 「Free but Shackled – The Java Trap – GNU Project – Free Software Foundation」、Gnu.org、2004年4月12日。 2016年2月9日閲覧
  92. ^ 「SunがJavaを世界に『リリース』」BBCニュース、2006年11月13日。 2010年5月6日閲覧
  93. ^ 「Open JDK が登場!」 Sun Microsystems. 2007年5月8日. 2007年5月9日閲覧
  94. ^ Wielaard, Mark (2007年5月30日). 「OpenJDK6 b10のソースコードが公開されました」 . 2008年7月12日閲覧
  95. ^ 「Redhat Java」。
  96. ^ 「Fedora Java」。
  97. ^ 「Debian Java」。
  98. ^ 「Ubuntu Java」。
  99. ^ Sharples, Rich (2008年6月19日). 「Javaはついに無料かつオープンに」. 2008年6月20日時点のオリジナルよりアーカイブ。
  100. ^ libgdx (2013年12月9日). “Bundling a jre · libgdx/libgdx Wiki · GitHub”. Github.com . 2016年2月9日閲覧
  101. ^ 「カスタムOpenJDKのバンドルに関する質問」Java-Gaming.org。2016年3月4日時点のオリジナルよりアーカイブ2016年2月9日閲覧。
  102. ^ Cluley, Graham (2013年1月15日). 「「WebブラウザでJavaを実行することが絶対に必要な場合を除き、無効化すべき」とDHSが後援するCERTチームが提言 – Naked Security」Nakedsecurity.sophos.com. 2023年5月21日時点のオリジナルよりアーカイブ。 2016年2月9日閲覧
  103. ^ 「Generics in Java」. Object Computing, Inc. 2007年1月2日時点のオリジナルよりアーカイブ2006年12月9日閲覧。
  104. ^ “What's Wrong With Java: Type Erasure”. 2006年12月6日. 2012年7月22日時点のオリジナルよりアーカイブ。 2006年12月9日閲覧
  105. ^ 「Java と Scala の型システムは不健全である」(PDF)
  106. ^ 「Javaライブラリは符号なし整数演算のサポートを提供する必要がある」。バグデータベース、Sun Developer Network。Oracle2011年1月18日閲覧
  107. ^ Owens, Sean R. (2009年11月5日). 「Javaとunsigned int、unsigned short、unsigned byte、unsigned longなど(あるいはむしろその欠如)」darksleep.com . 2010年10月9日閲覧
  108. ^ Kahan, W.; Darcy, Joseph D. (1998年3月1日). 「Javaの浮動小数点があらゆる場所で誰に害を及ぼすか」(PDF) . 2006年12月9日閲覧
  109. ^ 「型、値、変数」. Sun Microsystems . 2006年12月9日閲覧
  110. ^ 「どのプログラミング言語が最も速いのか?」コンピュータ言語ベンチマークゲーム. 2011年8月14日時点のオリジナルよりアーカイブ。
  111. ^ "speed ÷ C++ GNU g++ speed". Computer Language Benchmarks Game . 2011年9月26日時点のオリジナルよりアーカイブ。
  112. ^ 「C++ vs Java パフォーマンス; 引き分け! | Christian Felde のブログ」Blog.cfelde.com. 2010年6月27日. 2016年2月9日閲覧
  113. ^ 「Javaセキュリティアーキテクチャ:目次」Docs.oracle.com、1998年10月2日。 2016年2月9日閲覧
  114. ^ Horowitz, Michael (2012年8月31日). 「Javaのセキュリティ欠陥:やだやだやだ | Computerworld」Blogs.computerworld.com. 2014年7月24日時点のオリジナルよりアーカイブ。 2016年2月9日閲覧
  115. ^ ブルック、クリス. 「セキュリティニュースの第一発見点」. Threatpost. 2013年3月8日時点のオリジナルよりアーカイブ2016年2月9日閲覧。
  116. ^ 「今すぐコンピューターでJavaを無効にする理由と方法 - テクノロジー&サイエンス - イノベーション」NBCニュース、2013年1月12日。2014年2月21日時点のオリジナルよりアーカイブ。 2016年2月9日閲覧
  117. ^ 「米国国土安全保障省、コンピューターユーザーに対しJavaの無効化を呼びかけ」Forbes.com 2016年2月9日閲覧
  118. ^ ブルック、クリス. 「セキュリティニュースの第一発見者」. Threatpost. 2013年4月9日時点のオリジナルよりアーカイブ。 2016年2月9日閲覧
  119. ^ 「重要なパッチアップデートとセキュリティアラート」Oracle.com 2016年2月9日閲覧
  120. ^ Finkle, Jim (2013年1月14日). 「Javaの緊急パッチはサイバー犯罪の脆弱性を修正できず、専門家が警告」Independent.ie . 2016年2月9日閲覧
  121. ^ Kelly, Meghan (2013年1月14日). 「Oracle、DHSのJava脆弱性警告を受けJavaエクスプロイトの修正プログラムを発行」VentureBeat . 2016年2月9日閲覧
  122. ^ Krebs, Brian (2016年2月16日). 「OracleのJavaプラグインはもういいや」KrebsOnSecurity .
  123. ^ Gonsalves, Antone (2012年9月5日). 「Javaはもう必要ない。プラグインを抜いて」ReadWrite . Wearable World.
  124. ^ 「Java:削除すべきか?」The Guardian、2013年2月8日。
  125. ^ Bott, Ed. 「OracleがJavaアップデートで偽のソフトウェアをインストールする仕組みを詳しく見る」ZDNet.com . ZDNet . 2014年12月14日閲覧
  126. ^ 「Windows 7 - 管理者以外のアカウントから Java を更新するにはどうすればよいですか?」。Super User
  127. ^ 「Google Chrome を更新する - パソコン - Google Chrome ヘルプ」。support.google.com
  128. ^ 「Adobe セキュリティ速報」。helpx.adobe.com
この記事を聞く42
音声ウィキペディアアイコン
この音声ファイルは、2013 年 8 月 19 日付の記事の改訂版から作成されたもので、その後の編集は反映されていません。 (2013年8月19日
「https://en.wikipedia.org/w/index.php?title=Java_(software_platform)&oldid=1321395040」より取得