ヘッダーをスキップ
Java Platform, Standard Edition Oracle JDK 9の新機能
リリース9
E90929-01
 

 

Java Platform Standard Edition

Oracle JDK 9の新機能

リリース9

E90929-01(原本部品番号:E77563-05)

2017年9月

JDK 9の新機能の概要

Java Platform, Standard Edition 9はメジャー機能リリースです。ここでは、Java SE 9およびJDK 9の機能および拡張機能、ならびにOracleのJava SE 9の実装について説明します。

JDK Enhancement Proposal (JEP)は、JDKに対する重要な変更を設計および実装するための提案です。JEP 1: JDKの拡張機能の提案およびロードマップ・プロセスを参照してください。Java Specification Request (JSR)は、Javaプラットフォームに対して提案された仕様または最終的な仕様の記述です。JSRの概要を参照してください。

JDK 9の主な変更点

次の変更は、複数のテクノロジ領域に影響を及ぼします。

機能 説明
Java Platform Module System コードとデータの名前付き、自己記述型のコレクションである、新しい種類のJavaプログラミング・コンポーネント(モジュール)を導入します。このモジュール・システムの機能は次のとおりです。
  • コンパイル時と実行時の中間である新しいオプション・フェーズとしてリンク時を導入します。このフェーズに、一連のモジュールをカスタム・ランタイム・イメージとしてアセンブおよび最適化することができます。Java Platform, Standard Editionツール・リファレンスjlinkツールを参照してください。
  • javacjlinkおよびjavaツールにオプションを追加し、モジュールの定義を特定するモジュール・パスを指定できるようにします。
  • モジュラJARファイル(module-info.classファイルを含むJARファイル)をそのルート・ディレクトリに導入します。
  • JMOD形式を導入します。これはJARに似たパッケージング形式ですが、ネイティブ・コードと構成ファイルを含めることができる点が異なります。jmodツールを参照してください。

JDK自体は一連のモジュールに分割されています。この変更の特徴は次のとおりです。

  • JDKのモジュールを組み合せて、次のような様々な構成にすることが可能になります。

    • JREおよびJDKに対応する構成。
    • Java SE 8で定義された各コンパクト・プロファイルと内容的にほぼ同等の構成。
    • 指定された一連のモジュールとそれらの必須モジュールのみを含むカスタム構成。
  • JDKとJREのランタイム・イメージを再構成してモジュール対応にし、パフォーマンス、セキュリティおよび保守性を向上させます。

  • ランタイム・イメージに格納されたモジュール、クラスおよびリソースについて、イメージの内部構造または形式を明らかにすることなく名前付けを行うための新しいURIスキームを定義します。

  • 推奨標準のオーバーライド・メカニズムおよび拡張機能メカニズムを削除します。

  • Javaランタイム・イメージから、rt.jarおよびtools.jarを削除します。

  • デフォルトでほとんどのJDKの内部APIにアクセスできなくなりますが、少数の重要な、広く使用されている内部APIについては、その機能のすべてまたは大半をサポートする代替が出現するまでアクセスできます。

    jdeps -jdkinternalsコマンドを実行すると、内部JDK APIをコードで使用するかどうかを指定できます。

詳細は、次を参照してください。

JEP 223: 新しいバージョン文字列スキーム

メジャー、マイナー、セキュリティおよびパッチの更新リリースを明確に区別できる、簡素化されたバージョン文字列の書式を提供します。

新しいバージョン文字列の書式は次のとおりです。

$MAJOR.$MINOR.$SECURITY.$PATCH
  • $MAJORは、Java SEプラットフォーム仕様に記載されるような重要な新機能を含むメジャー・リリースの際に増分されるバージョン番号です(例: JDK 9)。メジャー・リリースには新機能および既存の機能に対する変更が含まれ、十分余裕を持って計画および発表されます。

  • $MINORは、バグ修正、標準APIに対する変更、関連プラットフォーム仕様の範囲外の機能の実装など、マイナー更新ごとに増分されるバージョン番号です。

  • $SECURITYは、重要な修正(セキュリティの改善に必要なものなど)を含むセキュリティ更新リリースの際に増分されるバージョン番号です。

  • $PATCHは、セキュリティ修正や優先度の高い顧客向けの修正など、同時にテストされた修正を含むリリースの際に増分されるバージョン番号です。

Java Platform, Standard Editionインストレーション・ガイド新しいバージョン文字列の書式を参照してください。

JDK 9インストーラの新機能

JDK 9には、Microsoft WindowsおよびmacOSプラットフォーム向けのインストーラの拡張機能が含まれています。

Microsoft Windows向けのインストーラの拡張機能

機能 説明

インストーラのUIによるWebデプロイメントの有効化または無効化

インストーラの「ようこそ」ページに、Webデプロイメントを有効または無効にするオプションが用意されています。Webデプロイメントを有効にするには、「ようこそ」ページで「カスタム・セットアップ」を選択し、「インストール」をクリックし、「ブラウザでJavaコンテンツを有効にする」チェック・ボックスを選択します。

macOS向けのインストーラの拡張機能

機能 説明

CPUバージョンの可用性

現在のCPUバージョンをアンインストールした後、次のCPUの可用性についての通知が提供されます。

ユーザーの操作性

JREの更新時におけるユーザーの操作性が向上します。

JDK 9のツールの新機能

JDK 9のツールの拡張機能を次に示します。

機能 説明
JEP 222: jshell: Javaシェル(Read-Eval-Print Loop)

JavaプラットフォームにRead-Eval-Print Loop (REPL)機能を追加します。

jshellツールは、Javaプログラミング言語の宣言、文および式を評価するためのインタラクティブなコマンドライン・インタフェースを提供します。速やかな結果とフィードバックで、コーディング・オプションのプロトタイプ化と検査を容易にします。速やかなフィードバックだけでなく、式を使用するための機能も、学習の際に役立ちます。これは、Java言語を学習する場合でも、単に新しいAPIまたは言語機能を学習する場合でも同様です。

Java Platform, Standard Editionツール・リファレンスjshell、およびJava Platform, Standard Edition Java Shellユーザー・ガイドのJShellの概要を参照してください。

JShell APIを使用すると、アプリケーションでREPL機能を活用できるようになります。jdk.jshellパッケージを参照してください。

JEP 228: 診断コマンドの追加

追加の診断コマンドを定義して、HotspotおよびJDKの問題を診断する機能を強化します。

Java Platform, Standard Editionツール・リファレンスjcmdを参照してください。

JEP 231: 起動時のJREバージョン選択の削除

起動時に、起動しているJREと異なるJREのバージョンを要求する機能を削除します。

今日のアプリケーションは通常、ネイティブOSパッケージング・システムであるJava Web Start (JNLPファイルを使用)または有効なインストーラからデプロイされます。これらのテクノロジでは独自の方法でJREが管理され、必要なJREの検索やダウンロード、更新が随時行われます。このため、起動時のJREバージョン選択は使用されなくなっています。

JEP 238: マルチリリースJARファイル

JARファイル形式を拡張して、Javaリリース固有の複数のバージョンのクラス・ファイルが1つのアーカイブに共存できるようにします。

マルチリリースJAR (MRJAR)には、特定のJavaプラットフォーム・リリースに固有のクラスとリソースのためにバージョニングされた追加のディレクトリが含まれます。バージョニングされたディレクトリは、jarツールの--releaseオプションで指定します。

JEP 240: JVM TI hprofエージェントの削除

hprofエージェントをJDKから削除します。hprofエージェントはJVM Tool Interface用のデモ・コードとして記述されたもので、本番ツール用ではありません。

hprofエージェントの有用な機能は、さらによい選択肢に置き換えられています。

注意:

hprofエージェントは削除されましたが、jmapまたはその他の診断ツールを使用してhprof形式でヒープ・ダンプを作成することは引き続き可能です。Java Platform, Standard Editionトラブルシューティング・ガイドの診断ツールを参照してください。

JEP 241: jhatツールの削除

jhatツールをJDKから削除します。

jhatツールは、JDK 6に追加された試験的な未サポートのツールでした。長年にわたり優れたヒープ・ビジュアライザやアナライザが提供されているため、同ツールは陳腐化しています。

JEP 245: JVMコマンドライン・フラグの引数の検証

すべての数値JVMコマンドライン・フラグに対する引数を検証して失敗を回避し、引数が無効であることが判明した場合は、かわりに適切なエラー・メッセージを表示します。

ユーザー指定の数値を必要とする引数のために、範囲およびオプションの制約のチェックが実装されています。

Java Platform, Standard Editionツール・リファレンスjavaおよびJava仮想マシンのフラグの引数の検証を参照してください。

JEP 247: 旧プラットフォーム・バージョンでのコンパイル

Javaプログラムをコンパイルして、選択した以前のバージョンのプラットフォームで実行できるように、javacを強化します。

-sourceまたは-targetオプションを使用すると、コンパイルされたプログラムは、特定のターゲット・プラットフォームでサポートされていないAPIを偶発的に使用する可能性があります。--releaseオプションは、APIの偶発的な使用を防ぎます。

Java Platform, Standard Editionツール・リファレンスjavacを参照してください。

JEP 282: jlink: Javaリンカー

一連のモジュールとそれらの依存関係を、JEP 220で定義されたカスタム・ランタイム・イメージとして、アセンブルして最適化します。

jlinkツールは、アセンブリ・プロセス中の変換と最適化を行い、代替のイメージ形式を生成するためのプラグイン・メカニズムを定義します。このツールは、1つのプログラムのために最適化されたカスタム・ランタイムを作成できます。JEP 261は、コンパイル時と実行時の間のオプション・フェーズのことをリンク時と定義しています。リンク時には、一連のモジュールとそれらの過渡的な依存関係をアセンブルおよび最適化してランタイム・イメージまたは実行ファイルを作成するためのリンク・ツールが必要です。

Java Platform, Standard Editionツール・リファレンスjlinkを参照してください。

JDK 9のセキュリティの新機能

JDK 9のセキュリティの拡張機能を次に示します。

機能 説明
JEP 219: Datagram Transport Layer Security (DTLS)

Java Secure Socket Extension (JSSE) APIおよびSunJSSEセキュリティ・プロバイダがDTLSバージョン1.0およびDTLSバージョン1.2プロトコルをサポートできるようにします。

Java Platform, Standard Editionセキュリティ開発者ガイドのDatagram Transport Layer Security (DTLS)を参照してください。

JEP 244: TLS Application-Layer Protocol Negotiation拡張

トランスポート・レイヤー・セキュリティ(TLS)接続で使用するアプリケーション・プロトコルについて、クライアントとサーバーがネゴシエートできるようにします。Application-Layer Protocol Negotiation (ALPN)では、クライアントはサポートされているアプリケーション・プロトコルのリストをTLS ClientHelloメッセージの一部として送信します。サーバーはプロトコルを選択し、選択したプロトコルをTLS ServerHelloメッセージの一部として返します。アプリケーション・プロトコル・ネゴシエーションは、追加のネットワーク・ラウンドトリップなしで、TLSハンドシェイク内で行うことができます。

Java Platform, Standard Editionセキュリティ開発者ガイドのTLSハンドシェイクとApplication Layer Protocol Negotiationを参照してください。

JEP 249: TLSにおけるOCSP Stapling

TLS接続でサーバーがX.509証明書の失効をチェックできるようにします。サーバーは、問題の証明書についてOnline Certificate Status Protocol (OCSP)の応答側に問い合せることで、TLSハンドシェイク時にこれを行います。サーバーは、クライアントに返す証明書に失効情報を付加(つまり、「ステープリング」)し、クライアントが適切なアクションをとれるようにします。

クライアントは、TLSサーバーに対してOCSP staplingを要求できます。クライアントは、この機能をサポートするサーバーからのステープリング済の応答をチェックします。

Java Platform, Standard Editionセキュリティ開発者ガイドのOCSP Staplingを参照してください。

JEP 246: GHASHとRSAにCPU命令を利用

GHASH HotSpot組込みを使用して、AES/GCM/NoPaddingのパフォーマンスを34倍から150倍の範囲で改善します。GHASH組込みは、Intel x64 CPUのPCLMULQDQ命令およびSPARCのxmul/xmulhi命令によって加速されます。

RSA HotSpot組込みを使用して、BigInteger squareToLenおよびBigInteger mulAddメソッドのパフォーマンスを最大50%改善します。RSA組込みは、Intel x64のjava.math.BigIntegerクラスに適用されます。

特定のアルゴリズムのパフォーマンスを大幅に改善するプロバイダを構成できるよう、新しいセキュリティ・プロパティjdk.security.provider.preferredが導入されます。

Java Platform, Standard Editionセキュリティ開発者ガイドの特定のアルゴリズムに対する優先プロバイダの構成を参照してください。

JEP 273: DRBGベースのSecureRandom実装

SecureRandom APIのNIST SP 800-90Ar1に記載されているDeterministic Random Bit Generator (DRBG)メカニズムの機能を提供します。

DRBGメカニズムは、強度がSHA-512やAES-256と同等の最新のアルゴリズムを使用します。これらのメカニズムは、ユーザー要件にあわせて様々なセキュリティ強度および機能を使用して構成できます。

Java Platform, Standard Editionセキュリティ開発者ガイドの乱数の生成を参照してください。

JEP 288: SHA-1証明書の無効化

より柔軟なメカニズムを提供して、SHA-1ベースの署名を使用するX.509証明書チェーンを無効にすることで、JDKのセキュリティ構成を改善します。

デフォルトでJDKに含まれる、ルートをアンカーとするTLSサーバー証明書チェーン内でSHA-1を無効にします。ローカルまたはエンタープライズ認証局(CA)は影響を受けません。

jdk.certpath.disabledAlgorithmsセキュリティ・プロパティは、無効化できる証明書のタイプをより効果的に制御できる、いくつかの新しい制約で強化されています。

JEP 288を参照してください。

JEP 229: デフォルトでPKCS12キーストアを作成

デフォルトのキーストア・タイプをJKSからPKCS12に変更します。PKCS#12は、暗号鍵を格納するための、拡張性のある標準的な幅広くサポートされている形式です。PKCS12キーストアは、秘密鍵、信頼できる公開鍵証明書、および秘密鍵を格納することで、機密性を高めます。また、この機能は、PKCS12をサポートするMozilla、Microsoft Internet Explorer、OpenSSLなど、他のシステムとの相互運用性の機会を開きます。

SunJSSEプロバイダは、PKCS12ファイルの読取りおよび書込みのためのPKCS12 java.security.KeyStore形式の完全な実装を提供します。

Java Platform, Standard Editionセキュリティ開発者ガイドの鍵管理を参照してください。

PKCS12キーストアは、鍵と証明書を管理するユーティリティであるkeytoolで作成できます。

Java Platform, Standard Editionセキュリティ開発者ガイドのキーストアの作成、およびJava Platform, Standard Editionツール・リファレンスkeytoolを参照してください。

JEP 287: SHA-3ハッシュ・アルゴリズム

NIST FIPS 202に記載されているSHA-3暗号化ハッシュ機能をサポートします。

java.security.MessageDigest APIではこれ以外に、SHA3-224、SHA3-256、SHA3-384およびSHA3-512といった標準的なアルゴリズムがサポートされています。

次のプロバイダは、SHA-3アルゴリズムの拡張機能をサポートしています。

  • SUNプロバイダ: SHA3-224、SHA3-256、SHA3-384およびSHA3-512

  • OracleUcryptoプロバイダ: SHA-3ダイジェスト(Solaris 12.0でサポート)

JDK 9のデプロイメントの新機能

JDK 9のデプロイメントの拡張機能を次に示します。

機能 説明
Javaプラグインの非推奨化

OracleのJDK 9ビルドでは、Javaプラグインおよび関連アプレット・テクノロジが非推奨となります。これらのテクノロジは引き続きJDK 9で使用できますが、今後のリリースでは、Oracle JDKおよびJREからの削除対象とみなされます。

Webページに埋め込まれたアプレットおよびJavaFXアプリケーションを実行するにはJavaプラグインが必要です。これらのタイプのアプリケーションについては、Java Web Startまたは自己完結型のアプリケーションとして記述しなおすことを検討してください。

Java Platform, Standard Editionデプロイメント・ガイドのJava Web StartおよびJNLPへのJavaアプレットの移行および自己完結型アプリケーションのパッケージ化を参照してください。

Javaコントロール・パネルの強化

Javaコントロール・パネル内のオプションのグループ化と表示を改善します。情報が見つけやすくなり、検索フィールドが用意され、モーダル・ダイアログ・ボックスは使用されなくなりました。旧バージョンのJavaコントロール・パネルから、いくつかのオプションの場所が変更されました。

Java Platform, Standard Editionデプロイメント・ガイドのJavaコントロール・パネルを参照してください。

JEP 275: モジュラ式のJavaアプリケーションのパッケージ化

モジュール認識やカスタム・ランタイム作成など、Project Jigsawの機能をJava Packagerに統合します。

小さめのパッケージを作成するには、jlinkツールを使用します。

JDK 9ランタイムのみを使用するアプリケーションを作成します。以前のリリースのJREでのアプリケーションのパッケージ化には使用できません。

Java Platform, Standard Editionデプロイメント・ガイドのJREのカスタマイズおよびモジュラ・アプリケーションのパッケージ化を参照してください。

JEP 289: アプレットAPIの非推奨化

アプレットAPIは非推奨となります。これは、Webブラウザ・ベンダーがJavaブラウザ・プラグインのサポートを削除したことにより有用性が下がっているためです。Appletクラスは引き続きJDK 9で使用できますが、今後のリリースでは削除対象とみなされます。Java Web Startまたは自己完結型のアプリケーションとしてアプレットを記述しなおすことを検討してください。

Java Platform, Standard Editionデプロイメント・ガイドのJava Web StartおよびJNLPへのJavaアプレットの移行および自己完結型アプリケーションのパッケージ化を参照してください。

JDK 9のJava言語の新機能

Java SE 9には、言語に関するいくつかの細かい変更が含まれています。

機能 説明
JEP 213: Milling Project Coin

いくつかの細かい変更を示します。

  • privateインスタンス・メソッドで@SafeVargsを使用できます。

  • 実質的にfinalの変数はtry-with-resources文でリソースとして使用できます。

  • 型推論の引数型が表現可能な場合、匿名クラスでダイヤモンドを使用できます。

  • Java SE 8から行われていた、正規の識別子名のセットからのアンダースコアの削除が完了しました。

  • privateインタフェース・メソッドに対するサポートが追加されました。

Java Platform, Standard Edition Java言語更新のJava SE 9でのJava言語の変更を参照してください。

JDK 9のJavadocの新機能

Javadocの拡張機能には、簡素化されたドックレットAPI、Javadoc検索、HTML5出力の生成のサポート、モジュール・システムでのドキュメンテーション・コメントのサポートが含まれます。

機能 説明
JEP 221: 簡素化されたドックレットAPI

古いドックレットAPIを、別の標準的な既存のAPIを活用する、簡素化された新しいAPIに置き換えます。標準的なドックレットは、新しいドックレットAPIを使用するように書きなおされました。

注意:

既存のAPIおよび古い標準的なドックレットも使用できますが、モジュールなどの新しい言語機能をサポートするように更新されていません。
JEP 224: HTML5 Javadoc

HTML5出力の生成をサポートします。完全に準拠したHTML5出力を取得するには、ドキュメンテーション・コメント内に指定されたすべてのHTMLコンテンツがHTML5に準拠していることを確認してください。

JEP 225: Javadoc検索

生成されたAPIドキュメンテーションに検索ボックスが提供されます。この検索ボックスを使用して、プログラム要素、タグ内の単語、およびドキュメンテーション内のフレーズを検索できます。

JEP 261: モジュール・システム

モジュールの宣言でドキュメンテーション・コメントがサポートされます。新しいコマンドライン・オプションを使用すると、ドキュメント化する一連のモジュールを構成し、ドキュメント化されたすべてのモジュールの新しいサマリー・ページを生成することができます。

JDK 9のJVMの新機能

JDK 9のJVMの拡張機能を次に示します。

機能 説明
JEP 165: コンパイラ・コントロール

コンパイラ・ディレクティブ・オプションを使用してJVMのコンパイルを制御する方法を提供します。制御のレベルは、実行時に管理可能で、メソッドに固有です。コンパイラ・コントロールはCompileCommandを置き換えるもので、下位互換性を有しています。

Java Platform, Standard Edition Java仮想マシン・ガイドのコンパイラ・コントロールを参照してください。

JEP 197: セグメント化されたコード・キャッシュ

コード・キャッシュを異なるセグメントに分割して(それぞれに特定のタイプのコンパイル済のコードが含まれます)、パフォーマンスを改善し、さらなる拡張を可能にします。

Java Platform, Standard Editionツール・リファレンスjavaを参照してください。

JEP 276: 言語定義オブジェクト・モデルの動的リンク

プロパティの読取り、プロパティの書込み、関数の呼出しなど、実行時の高度なオブジェクト操作を適切なターゲット・メソッド・ハンドルに動的にリンクします。これらの操作は、渡された値の実際の型に基づいて、ターゲット・メソッド・ハンドルにリンクされます。これらのオブジェクト操作は、invokedynamicサイトとして表されます。

java.lang.invokeinvokedynamicコール・サイトの動的リンクに対して低度のAPIを提供しますが、オブジェクトまたはそれらを実装するメソッドに対する、より高度な操作を表す方法は提供しません。

jdk.dynalinkパッケージでは、表現に動的型(静的に決定できない型)が含まれるプログラミング言語、およびこれらの動的型に対する操作がinvokedynamicコール・サイトとして表されるプログラミング言語(言語のオブジェクト・モデルまたは型システムがJVMのものと厳密に一致しないため)を実装できます。

JDK 9のJVMチューニングの新機能

JDK 9のJVMチューニングの拡張機能を次に示します。

機能 説明
G1の操作性、決定論およびパフォーマンスの改善

ガベージファースト(G1)ガベージ・コレクタが強化され、いくつかの重要なメモリー再利用設定を自動的に決定できるようになります。これまでは、最善の結果を得るために、これらの設定を手動で設定する必要がありました。さらに、G1ガベージ・コレクタの操作性、決定論およびパフォーマンスに関する問題も修正されました。

JEP 158: JVMロギングの統合

JVMのすべてのコンポーネントに対する共通のロギング・システムが導入されます。

Java Platform, Standard Editionツール・リファレンス-Xloggc javaオプションを参照してください。

JEP 214: JDK 8で非推奨となったGCの組合せの削除

JDK 8で非推奨となったガベージ・コレクタ(GC)の組合せが削除されます。

これは、次のGCの組合せがなくなることを意味します。

  • DefNew + CMS

  • ParNew + SerialOld

  • インクリメンタルCMS

コンカレント・マーク・スイープ(CMS)の「フォアグラウンド」モードも削除されました。次のコマンドライン・フラグは削除されました。

  • -Xincgc
  • -XX:+CMSIncrementalMode
  • -XX:+UseCMSCompactAtFullCollection
  • -XX:+CMSFullGCsBeforeCompaction
  • -XX:+UseCMSCollectionPassing

コマンドライン・フラグ-XX:+UseParNewGCに効果はなくなりました。ParNewの使用はCMSに限定され、CMSはParNewを必要とします。したがって、-XX:+UseParNewGCフラグは非推奨となっており、今後のリリースでは削除される可能性があります。

JEP 248: G1をデフォルト・ガベージ・コレクタに変更

32ビットおよび64ビットのサーバー構成で、ガベージファースト(G1)がデフォルト・ガベージ・コレクタ(GC)になります。低停止時間のコレクタ(G1など)を使用すると、以前デフォルトであったスループット志向のコレクタ(パラレルGCなど)と比べて、ほとんどのユーザーにとって全体的なパフォーマンスが向上します。

Java Platform, Standard Edition HotSpot仮想マシン・ガベージ・コレクション・チューニング・ガイドガベージファースト・ガベージ・コレクタを参照してください。
JEP 271: GCロギングの統合

JEP 158で導入された統合JVMロギング・フレームワークを使用して、ガベージ・コレクション(GC)ロギングが再実装されます。GCロギングは、現在のGCロギング形式との一貫性をとる形で再実装されます。ただし、新旧の形式にはいくつかの違いがあります。

Java Platform, Standard Editionツール・リファレンスJVM統合ロギング・フレームワークによるロギングの有効化を参照してください。

JEP 291: コンカレント・マーク・スイープ(CMS)ガベージ・コレクタの非推奨化

コンカレント・マーク・スイープ(CMS)ガベージ・コレクタが非推奨となります。コマンドラインで-XX:+UseConcMarkSweepGCオプションを使用した要求には、警告メッセージが発行されます。ガベージファースト(G1)ガベージ・コレクタは、CMSのほとんどの使用を置き換えることを目的としています。

JDK 9のコア・ライブラリの新機能

機能 説明
JEP 102: プロセスAPIの更新

オペレーティング・システム・プロセスを制御および管理するためのAPIを改善します。

ProcessHandleクラスは、プロセスのネイティブ・プロセスID、引数、コマンド、起動時刻、累積CPU時間、ユーザー、親プロセスおよび子孫を提供します。このクラスは、プロセスの状態および終了プロセスをモニターすることもできます。ProcessHandle.onExitメソッドを使用すると、CompletableFutureクラスの非同期メカニズムはプロセスの終了時にアクションを実行できます。

Java Platform, Standard Edition Javaコア・ライブラリ開発者ガイドのプロセスAPI、java.lang.Processおよびjava.lang.ProcessHandleを参照してください。

JEP 193: 変数ハンドル

オブジェクト・フィールドおよび配列要素に対するjava.util.concurrent.atomicおよびsun.misc.Unsafe操作に相当するものを呼び出す標準的な方法を定義します。

フェンス操作の標準的なセットを定義します。これには、メモリー・オーダリングのきめ細やかな制御を可能にするVarHandle静的メソッドが含まれます。これは、フェンス操作の非標準的なセットを提供するsun.misc.Unsafeに取って代わるものです。

参照されたオブジェクトが確実に到達可能な状態にとどまるよう、標準的な到達可能性フェンス操作を定義します。

JEP 254: コンパクト文字列

文字列の内部表現にスペース効率の高い方法を採り入れます。これまで、Stringクラスは、1文字につき2バイト(16ビット)を使用して、文字をchar配列に格納していました。Stringクラスの新たな内部表現は、バイト配列にエンコーディング・フラグ・フィールドを加えたものです。

これは純粋に実装の変更であり、既存の公開インタフェースへの変更はありません。

Java Platform, Standard Editionツール・リファレンスjavaコマンドのCompactStringsオプションを参照してください。

JEP 264: プラットフォーム・ロギングAPIおよびサービス

プラットフォーム・クラスがメッセージのロギングに使用できる最小限のAPIを、それらのメッセージの利用者に対するサービス・インタフェースとともに定義します。ライブラリまたはアプリケーションは、このサービスの実装を提供して、プラットフォーム・ログ・メッセージを任意のロギング・フレームワークにルーティングできます。実装が提供されない場合、java.util.logging APIに基づいてデフォルトの実装が使用されます。

JEP 266: 並行処理に関する追加の更新

JEP 155: 並行処理に関する更新についてJDK 8で導入された更新に対して、並行処理に関するさらなる更新が追加されます。これには、相互運用可能な公開と登録のフレームワークおよびCompletableFuture APIに対する拡張機能が含まれます。

JEP 268: XMLカタログ

Organization for the Advancement of Structured Information Standards (OASIS) XMLカタログ・バージョン1.1標準をサポートする標準的なXMLカタログAPIが追加されます。このAPIは、リゾルバを受け入れるJAXPプロセッサで組込みまたは外部のリゾルバとして使用できるカタログおよびカタログ・リゾルバの抽出を定義します。

内部カタログAPIを使用する既存のライブラリまたはアプリケーションを新しいAPIに移行して、新しい機能を利用する必要があります。

Java Platform, Standard Edition Javaコア・ライブラリ開発者ガイドのXMLカタログAPIを参照してください。

JEP 269: コレクションのコンビニエンス・ファクトリ・メソッド

コレクションとマップのインスタンスを少ない要素で簡単に作成できるようになります。ListSetおよびMapインタフェースに対する新しい静的ファクトリ・メソッドは、それらのコレクションの不変インスタンスの作成を容易にします。

次に例を示します。
Set<String> alphabet = Set.of("a", "b", "c");

Java Platform, Standard Edition Javaコア・ライブラリ開発者ガイドの不変のリスト、セットおよびマップの作成を参照してください。APIのドキュメントについては、不変のSet静的ファクトリ・メソッド不変のMap静的ファクトリ・メソッド、および不変のList静的ファクトリ・メソッドを参照してください。

JEP 274: メソッド・ハンドルの強化

java.lang.invokeパッケージのMethodHandleMethodHandlesおよびMethodHandles.Lookupクラスが強化され、共通のユース・ケースが容易になり、より効果的にコンパイラを最適化できるようになります。

追加の内容は次のとおりです。
  • java.lang.invokeパッケージのMethodHandlesクラスで、ループおよびtry/finallyブロック用の新しいMethodHandleコンビネータが提供されます。

  • 引数処理用の新しいMethodHandleコンビネータで、MethodHandleおよびMethodHandlesクラスが強化されます。

  • インタフェース・メソッドの新しいルックアップに加え、オプションでMethodHandles.Lookupクラスにスーパー・コンストラクタが実装されます。

JEP 277: 非推奨化に関する強化
@Deprecated注釈が刷新され、仕様におけるAPIのステータスと今後の処置について、より詳細な情報が提供されます。2つの新しい要素が追加されました。
  • @Deprecated(forRemoval=true)は、APIがJava SEプラットフォームの今後のリリースで削除されることを示します。

  • @Deprecated(since="version")には、Java SE 9以降で非推奨となっているAPI要素について、その要素が非推奨となった時期を示すJava SEバージョン文字列が含まれます。

例: @Deprecated(since="9", forRemoval=true)

コア・プラットフォームの@Deprecated注釈が更新されました。

新しいツールjdeprscanを使用すると、非推奨となったJDK API要素の使用についてクラス・ライブラリ(JARファイル)をスキャンできます。

Java Platform, Standard Edition Javaコア・ライブラリ開発者ガイドの非推奨化に関する強化を参照してください。

Java Platform, Standard Editionツール・リファレンスjdperscanを参照してください。

JEP 285: スピン・ウェイト・ヒント

スピン・ループが実行中であることをJavaコードでヒントとして伝えることができるようにするAPIを定義します。スピン・ループは、ある条件が真であるか確認するため繰り返しチェックします。たとえば、ロックを取得できるタイミングをチェックし、取得後、なんらかの計算を安全に実行してから、ロックを解放します。このAPIは純粋にヒントであり、セマンティクス上の動作要件を伝えるものではありません。Thread.onSpinWaitメソッドを参照してください。

JEP 290: 直列化データの受信のフィルタリング

オブジェクト直列化データの受信ストリームをフィルタリングして、セキュリティと堅牢性を高めます。オブジェクト直列化クライアントは入力をより簡単に検証でき、エクスポートされたRemote Method Invocation (RMI)オブジェクトは呼出し引数をより簡単に検証できます。

直列化クライアントは、ObjectInputStreamに対して設定されるフィルタ・インタフェースを実装します。RMIの場合、オブジェクトはMarshalInputStreamに対してフィルタを設定して呼出し引数をアンマーシャル時に検証するRemoteServerRefを介してエクスポートされます。

JEP 259: スタックウォーキングAPI

スタック・トレース内の情報に対する簡単なフィルタリングと緩やかなアクセスを可能にするスタックウォーキングAPIを提供します。

このAPIは、指定の基準に一致するフレームで停止する短時間の走査と、スタック全体を走査する長時間の走査の両方をサポートします。指定の基準に一致するフレームで停止すると、呼出し側がスタックの最上位のフレームのみに関心があれば、すべてのフレームを検査するコストが回避されます。このAPIを使用すると、スタック・ウォーカの構成に応じて、Classオブジェクトにアクセスできるようになります。java.lang.Stackwalkerクラスを参照してください。

JEP 255: 特定のXerces 2.11.0更新をJAXPにマージ

Xercesパーサの2.11.0バージョンをサポートするようにJDKが更新されます。公開JAXP APIに対する変更はありません。

この変更はXerces 2.11.0の次のカテゴリに関するものです。データ型、DOM L3 Serializer、XPointer、Catalog Resolver、およびXML Schema Validation (バグ修正は含まれますが、XML Schema 1.1開発コードは含まれません)。

JDK 9のNashornの新機能

JDK 9のNashornの拡張機能を次に示します。

機能 説明
JEP 236: NashornのパーサーAPI

特定のIDEおよびサーバー側フレームワークのアプリケーションがECMAScriptコードを解析および分析できるようにします。

文字列、URL、またはParserクラスのメソッドを含むファイルから、ECMAScriptコードを解析します。これらのメソッドは、ECMAScriptコードを抽象構文ツリーとして表すCompilationUnitTreeのインスタンスを返します。

jdk.nashorn.api.treeパッケージには、Nashorn Parser APIが含まれます。

JEP 292: 特定のECMAScript 6機能をNashornに実装 6th edition of ECMA-262 (ECMAScript 6または略称ES6としても知られています)で導入された多くの新機能が実装されます。実装される機能には次のものが含まれます。
  • テンプレート文字列
  • letconstおよびブロック・スコープ
  • イテレータおよびfor..ofループ
  • MapSetWeakMapおよびWeakSet
  • シンボル
  • 2進数と8進数のリテラル

JDK 9のクライアント・テクノロジの新機能

JDK 9のクライアント・テクノロジの拡張機能を次に示します。

機能 説明
JEP 251: マルチレゾリューション画像

解像度が異なる画像のセットを1つのマルチレゾリューション画像にカプセル化できるようにします。これは、実行時に概算で96dpiから300dpiに解像度が変動する可能性があるディスプレイ・デバイスにアプリケーションを適合させるために役立ちます。

java.awt.image.MultiResolutionImageインタフェースは、解像度が異なる画像のセットを1つのマルチレゾリューション画像にカプセル化します。これにより、アプリケーションで解像度が異なる画像を簡単に処理および表示できるようになります。

JEP 253: モジュール化に伴うJavaFX UIコントロールとCSS APIの提供

JavaFX UIコントロールおよびCSS機能のための公開APIが提供されます。これまで、これらを入手できるのは内部パッケージに限定されていましたが、モジュール化に伴いアクセスできなくなりました。

新しいパッケージjavafx.scene.control.skinには、各UIコントロールのスキン(外観)のデフォルトの実装を提供する、一連のクラスが含まれます。

新しいクラスCssParserは、Stylesheetオブジェクトを返すCSSパーサです。これにより、アプリケーションのCSSスタイリングをより効果的に制御できます。これはCSS API (javafx.cssパッケージ)の一部です。CSS APIには、新しいサポート・クラス(パーサによって使用される標準的なコンバータのセットなど)が含まれます。javafx.css.converterパッケージを参照してください。

JEP 256: BeanInfo注釈

@beaninfo Javadocタグを注釈型JavaBeanBeanPropertyおよびSwingContainerに置き換えます。

これらの注釈型は、実行時にBeanInfoを生成する際、対応する機能属性を設定します。したがって、Beanクラスごとに別々のBeanInfoクラスを作成するかわりに、Beanクラス内で直接、これらの属性を簡単に指定できます。また、自動生成されたクラスを削除できるため、クライアント・ライブラリのモジュール化も簡単になります。

JEP 262: TIFF画像の入出力

Tag Image File Format (TIFF)の読取りと書込みを標準としてパッケージjavax.imageioに追加します。新しいパッケージjavax.imageio.plugins.tiffは、TIFFメタデータのオプションの操作を簡素化するクラスを提供します。

JEP 263: WindowsおよびLinuxでのHiDPIグラフィックス

WindowsおよびLinuxでのHigh Dots Per Inch (HiDPI)ディスプレイで、AWTおよびSwingコンポーネントを自動的に拡大縮小およびサイズ設定します。

JDKは、すでにOS XでのHiDPI「Retinaディスプレイ」をサポートしています。

このリリースの前まで、WindowsおよびLinuxでは、従来のディスプレイの2倍から3倍の高さのピクセル密度を持つHiDPIディスプレイの場合でも、Javaアプリケーションはピクセルに基づいてサイズ設定およびレンダリングされていました。このため、読取りや使用の際にGUIコンポーネントとウィンドウが小さくなりすぎていました。

JEP 272: プラットフォーム固有のデスクトップ機能

デスクトップの操作を可能にするjava.awt.Desktopクラスに次のようなメソッドが追加されます。

  • カスタムの情報および設定ウィンドウの表示。

  • ファイルのリストを開くか出力する要求の処理。

  • URLを開く要求の処理。

  • ネイティブ・ヘルプ・ビューア・アプリケーションを開く操作。

  • デフォルト・メニュー・バーの設定。

  • アプリケーションの強制終了の有効化または無効化。

これらの新しいメソッドは、OS Xパッケージcom.apple.eawtに含まれている内部APIの機能を置き換えます。JDK 9ではデフォルトでこれらのAPIにアクセスできません。com.apple.eioパッケージにはアクセスできなくなりました。

JEP 283: LinuxでのGTK 3の有効化

LinuxまたはSolarisで、Javaグラフィカル・アプリケーション(JavaFX、SwingまたはAbstract Window Toolkit (AWT)に基づくもの)がGTK+バージョン2またはバージョン3を使用できるようにします。

デフォルトでは、LinuxまたはSolarisのJDKは、使用可能であればGTK+ 2を使用し、使用不可の場合はGTK+ 3を使用します。

特定のバージョンのGTK+を使用するには、システム・プロパティjdk.gtk.versionを設定します。このシステム・プロパティの値は、2、2.2または3です。このプロパティは、アプリケーションがGTK+をロードする前に設定する必要があります。また、それ以前に別のツールキットによってロードされたGTK+バージョンと競合しないようにする必要があります。

JDK 9における国際化の新機能

JDK 9における国際化の拡張機能を次に示します。

機能 説明
JEP 267: Unicode 8.0

Unicode 8.0をサポートします。JDK 8はUnicode 6.2をサポートしていました。

Unicode 6.37.0および8.0の標準をあわせると、10,555の文字、29のスクリプト、および42のブロックが導入されました。これらすべてがJDK 9でサポートされています。

JEP 252: デフォルトで使用可能となるCLDRロケール・データ

共通ロケール・データ・リポジトリ(CLDR)のXMLベースのロケール・データ(JDK 8で初めて追加されました)をJDK 9のデフォルト・ロケール・データとして使用します。以前のリリースでは、デフォルトはJREでした。

JDK 8と互換性のある動作を有効にするには、システム・プロパティjava.locale.providersを値に設定し、CLDRの前にCOMPATを使用します。

Java Platform, Standard Edition国際化ガイドのデフォルトで使用可能となるCLDRロケール・データを参照してください。

JEP 226: UTF-8 プロパティ・ファイル

プロパティ・ファイルをUTF-8エンコーディングでロードします。以前のリリースでは、プロパティ・リソース・バンドルをロードする際、ISO-8859-1エンコーディングが使用されていました。非ラテン文字を表す場合は、UTF-8のほうが利便性に優れています。

既存のプロパティ・ファイルのほとんどは影響を受けません。

Java Platform, Standard Edition国際化ガイドのUTF-8プロパティ・ファイルを参照してください。

ドキュメントのアクセシビリティについて

Oracleのアクセシビリティについての詳細情報は、Oracle Accessibility ProgramのWebサイト(http://www.oracle.com/pls/topic/lookup?ctx=acc&id=docacc)を参照してください。

Oracleサポートへのアクセス

サポートを購入したオラクル社のお客様は、My Oracle Supportを介して電子的なサポートにアクセスできます。詳細情報はhttp://www.oracle.com/pls/topic/lookup?ctx=acc&id=infoか、聴覚に障害のあるお客様はhttp://www.oracle.com/pls/topic/lookup?ctx=acc&id=trsを参照してください。


Java Platform, Standard Edition Oracle JDK 9の新機能, リリース9

E90929-01

Copyright © 2017, Oracle and/or its affiliates. All rights reserved.

このドキュメントでは、Java SE 9およびJDK 9の機能および拡張機能、ならびにOracleのJava SE 9の実装について説明します。

このソフトウェアおよび関連ドキュメントの使用と開示は、ライセンス契約の制約条件に従うものとし、知的財産に関する法律により保護されています。ライセンス契約で明示的に許諾されている場合もしくは法律によって認められている場合を除き、形式、手段に関係なく、いかなる部分も使用、複写、複製、翻訳、放送、修正、ライセンス供与、送信、配布、発表、実行、公開または表示することはできません。このソフトウェアのリバース・エンジニアリング、逆アセンブル、逆コンパイルは互換性のために法律によって規定されている場合を除き、禁止されています。

ここに記載された情報は予告なしに変更される場合があります。また、誤りが無いことの保証はいたしかねます。誤りを見つけた場合は、オラクル社までご連絡ください。

このソフトウェアまたは関連ドキュメントを、米国政府機関もしくは米国政府機関に代わってこのソフトウェアまたは関連ドキュメントをライセンスされた者に提供する場合は、次の通知が適用されます。

U.S. GOVERNMENT END USERS: Oracle programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, delivered to U.S. Government end users are "commercial computer software" pursuant to the applicable Federal Acquisition Regulation and agency-specific supplemental regulations. As such, use, duplication, disclosure, modification, and adaptation of the programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, shall be subject to license terms and license restrictions applicable to the programs. No other rights are granted to the U.S. Government.

このソフトウェアまたはハードウェアは様々な情報管理アプリケーションでの一般的な使用のために開発されたものです。このソフトウェアまたはハードウェアは、危険が伴うアプリケーション(人的傷害を発生させる可能性があるアプリケーションを含む)への用途を目的として開発されていません。このソフトウェアまたはハードウェアを危険が伴うアプリケーションで使用する際、このソフトウェアまたはハードウェアを安全に使用するために、適切な安全装置、バックアップ、冗長性(redundancy)、その他の対策を講じることは使用者の責任となります。このソフトウェアまたはハードウェアを危険が伴うアプリケーションで使用したことに起因して損害が発生しても、オラクル社およびその関連会社は一切の責任を負いかねます。

OracleおよびJavaはOracle Corporationおよびその関連企業の登録商標です。その他の名称は、それぞれの所有者の商標または登録商標です。

Intel、Intel Xeonは、Intel Corporationの商標または登録商標です。すべてのSPARCの商標はライセンスをもとに使用し、SPARC International, Inc.の商標または登録商標です。AMD、Opteron、AMDロゴ、AMD Opteronロゴは、Advanced Micro Devices, Inc.の商標または登録商標です。UNIXは、The Open Groupの登録商標です。

このソフトウェアまたはハードウェア、そしてドキュメントは、第三者のコンテンツ、製品、サービスへのアクセス、あるいはそれらに関する情報を提供することがあります。適用されるお客様とOracle Corporationとの間の契約に別段の定めがある場合を除いて、Oracle Corporationおよびその関連会社は、第三者のコンテンツ、製品、サービスに関して一切の責任を負わず、いかなる保証もいたしません。適用されるお客様とOracle Corporationとの間の契約に定めがある場合を除いて、Oracle Corporationおよびその関連会社は、第三者のコンテンツ、製品、サービスへのアクセスまたは使用によって損失、費用、あるいは損害が発生しても一切の責任を負いかねます。