JDK 8の新機能

Java Platform, Standard Edition 8(Java SE 8)は、主要機能リリースです。このドキュメントでは、Java SE 8と、Java SE 8のOracle実装であるJDK 8に含まれる機能と拡張機能についてまとめます。コンポーネント名をクリックすると、そのコンポーネントの拡張機能に関する詳細説明が表示されます。

Javaプログラミング言語

  • このリリースでは、新しい言語機能であるラムダ式が導入されました。ラムダ式を使用すると、機能をメソッドの引数として処理(データとしてコーディング)することができます。ラムダ式により、単一メソッドのインタフェース(関数型インタフェースと呼ばれる)のインスタンスをより簡潔に表現できます。
  • メソッド参照により、すでに名前のあるメソッドに対し、読みやすいラムダ式を利用できます。
  • デフォルトのメソッドを使用すると、ライブラリのインタフェースに新しい機能を追加でき、古いバージョンのライブラリ・インタフェースに対して記述されたコードとのバイナリ互換性が保証されます。
  • アノテーションの繰り返し機能により、同じ宣言や型の使用箇所に対して同じアノテーションの型を複数回適用できます。
  • 型アノテーションにより、宣言部に限らず、型が使用される任意の場所にアノテーションを適用できます。プラガブルな型システムとともに利用することで、コードの型チェックを強化できます。
  • 型推論が強化されました。
  • メソッドパラメータのリフレクションが可能になりました。

コレクション

  • 新しいjava.util.streamパッケージのクラスでは、要素のストリームに対して関数スタイルの操作をサポートするStream APIが提供されます。Stream APIはCollections APIに統合されているため、コレクションに対するバルク操作(順次的または並列的なマップ - リデュース変換など)が可能です。
  • キーの衝突に関するHashMapのパフォーマンスが向上しました。

コンパクト・プロファイルには、Java SEプラットフォームの事前定義サブセットが含まれます。この機能により、完全なプラットフォームを必要としないアプリケーションを小型デバイス上にデプロイして実行できます。

セキュリティ

  • クライアント側のTLS 1.2がデフォルトで有効化されます。
  • AccessController.doPrivilegedの新しいバリアントにより、スタック全体を横断するその他の権限チェックを妨げることなく、コードで一部の権限をアサートできます。
  • パスワードベースの暗号化に対して、より強力なアルゴリズムが導入されました。
  • JSSEサーバーでSSL/TLS Server Name Indication(SNI)拡張機能がサポートされます。
  • AEADアルゴリズムのサポート:SunJCEプロバイダが拡張され、AES/GCM/NoPadding暗号実装やGCMアルゴリズム・パラメータがサポートされるようになりました。また、SunJSSEプロバイダが拡張され、AEADモードベースの暗号スイートがサポートされるようになりました。Oracle Providers DocumentationのJEP 115を参照してください。
  • KeyStoreが拡張され、新しいDomain KeyStore型のjava.security.DomainLoadStoreParameter、およびkeytoolユーティリティの新しいコマンドオプション-importpasswordなどが追加されました。
  • SHA-224メッセージ・ダイジェストがサポートされます。
  • NSA Suite B暗号化のサポートが拡張されました。
  • 高エントロピー乱数生成のサポートが拡張されました。
  • X.509証明書の失効チェックを構成するための新しいjava.security.cert.PKIXRevocationCheckerクラスが追加されました。
  • Windows用の64ビットPKCS11が導入されました。
  • Kerberos 5のリプレイキャッシュ用に新しいrcache型が導入されました。
  • Kerberos 5のプロトコル遷移と制約付き委任がサポートされます。
  • Kerberos 5の脆弱な暗号化タイプがデフォルトで無効化されています。
  • GSS-API/Kerberos 5メカニズムで未バインドのSASLがサポートされます。
  • 複数のホスト名に対してSASLサービスを利用できます。
  • Mac OS XでネイティブJGSSへのJNIブリッジを利用できます。
  • SunJSSEプロバイダで、より強力なエフェメラルDHキーがサポートされます。
  • JSSEで、サーバー側の暗号スイート設定のカスタマイズがサポートされます。

JavaFX

  • このリリースでは、新テーマのModenaが実装されました。詳細については、 fxexperience.comのブログを参照してください。
  • 開発者は新しいSwingNodeクラスを使用して、SwingコンテンツをJavaFXアプリケーションに埋め込むことができます。SwingNodeのjavadoc、および「JavaFXアプリケーションへのSwingコンテンツの埋め込み」を参照してください。
  • DatePickerTreeTableViewなどの新しいUIコントロールが導入されました。
  • javafx.printパッケージで、JavaFX Printing API用のパブリッククラスが提供されます。詳細についてはJavaDocを参照してください。
  • 3Dグラフィックス機能に3Dシェイプ、カメラ、ライト、サブシーン、マテリアル、ピッキング、アンチエイリアスが追加されました。新しいAPIクラスとして、Shape3D(サブクラスはBoxCylinderMeshView、およびSphere)、SubSceneMaterialPickResultLightBase(サブクラスはAmbientLightおよびPointLight)、SceneAntialiasingがJavaFX 3D Graphicsライブラリに追加されました。このリリースでは、Camera APIクラスも更新されています。詳細については、javafx.scene.shape.Shape3Djavafx.scene.SubScenejavafx.scene.paint.Materialjavafx.scene.input.PickResultjavafx.scene.SceneAntialiasingの該当クラスのJavadoc、および「JavaFX 3D Graphicsを開始する」ドキュメントを参照してください。
  • WebViewクラスに新機能と拡張機能が追加されます。Webソケット、Webワーカー、WebフォントなどのHTML5の追加機能については、「HTML5でサポートされる機能」を参照してください。
  • テキストノードにおいて、双方向テキストや複雑なテキストスクリプト(タイ語、ヒンディー語など)のコントロールでの利用、複数行、複数スタイルなど、テキストのサポートが拡張されました。
  • このリリースでは、Hi-DPIディスプレイのサポートが追加されました。
  • CSS Styleable*クラスがパブリックAPIになりました。詳細については、javafx.cssのJavadocを参照してください。
  • 新しいScheduledServiceクラスを使用すると、サービスを自動的に再起動できます。
  • JavaFXがARMプラットフォームで利用できるようになりました。JDK for ARMには、JavaFXのベース、グラフィックス、およびコントロールコンポーネントが含まれます。

ツール

  • Nashornエンジンを起動するためのjjsコマンドが提供されます。
  • javaコマンドによってJavaFXアプリケーションを起動できます。
  • javaのmanページが改訂されました。
  • クラスファイルを分析するためのjdepsコマンドラインツールが提供されます。
  • Java Management Extensions(JMX)により、診断コマンドにリモートアクセスできます。
  • jarsignerツールに、タイムスタンプ局(TSA)による署名付きタイムスタンプをリクエストするためのオプションが追加されました。
  • Javacツール

    • javacコマンドの-parametersオプションを使用して仮パラメータ名を保管し、Reflection APIにより仮パラメータ名を取得できます。
    • Java言語仕様(JLS)15.21の項に示される等価演算子の型ルールが、javacコマンドによって正しく適用されるようになりました。
    • javadocの実行時に生成されるファイル内でさまざまなトラブル(無効なHTML、アクセス可能性の問題など)を引き起こすような問題がjavadocコメント内容に含まれているかどうかを、javacツールでチェックできるようになりました。この機能は、新しい-Xdoclintオプションによって有効化されます。詳細については、javac -Xの実行結果を参照してください。この機能はjavadocツールでも使用でき、デフォルトで有効です。
    • javacツールに、必要に応じてネイティブヘッダーを生成する機能が追加されました。この機能により、ビルドパイプラインの個別の手順としてjavahツールを実行する必要がなくなります。この機能を有効にするには、javacの新オプション-hを使用します。このオプションを使用して、ヘッダーファイルを書き込むディレクトリを指定します。ヘッダーファイルは、ネイティブメソッド、またはjava.lang.annotation.Native型の新しいアノテーションが付けられた定数フィールドを含むすべてのクラスに対して生成されます。

    Javadocツール

    • javadocツールでは新しいDocTree APIがサポートされます。このAPIを使用すると、Javadocコメントを抽象構文ツリーとしてトラバースできます。
    • javadocツールで新しいJavadoc Access APIがサポートされます。このAPIを使用すると、新しいプロセスを実行しなくても、Javaアプリケーションから直接Javadocツールを起動できます。詳細については、Javadocの新機能のページを参照してください。
    • javadocの実行時に生成されるファイル内でさまざまなトラブル(無効なHTML、アクセス可能性の問題など)を引き起こすような問題がjavadocコメント内容に含まれているかどうかを、javadocツールでチェックできるようになりました。この機能はデフォルトで有効であり、新しい-Xdoclintオプションで制御することもできます。詳細については、javadoc -Xの実行結果を参照してください。この機能はjavacツールでも使用できますが、javacではデフォルトで無効です。

国際化

  • Unicodeが拡張され、Unicode 6.2.0のサポートが追加されました。
  • Unicode CLDRデータとjava.locale.providersシステムプロパティが取り入れられました。
  • 新しいカレンダーとロケールAPIが追加されました。
  • カスタムのリソースバンドルを拡張機能としてインストールできるようになりました。

デプロイメント

  • サンドボックス・アプレットおよびJava Web Startアプリケーションの場合に、URLPermissionを使用して、アプレットやアプリケーションの起動元サーバーに接続を戻すことができるようになりました。SocketPermissionは付与されなくなりました。
  • すべてのセキュリティレベルで、メインJARファイルのJARファイルマニフェスト内にPermissions属性を指定することが必要になります。

Date-Timeパッケージ - 包括的な日時モデルを提供する新しいパッケージセットです。

スクリプト

  • Rhino javascriptエンジンに代わってNashorn Javascriptエンジンが導入されました。

Pack200

  • Pack200は、JSR 292によって導入された定数プールエントリおよび新しいバイトコードをサポートします。
  • JDK8は、JSR 292、JSR 308、JSR 335で仕様が定義されているクラスファイル変更機能をサポートします。

IOとNIO

  • Solarisのイベント・ポート・メカニズムに基づき、Solaris向けの新しいSelectorProvider実装が追加されました。使用するには、システムプロパティjava.nio.channels.spi.Selectorの値をsun.nio.ch.EventPortSelectorProviderに設定します。
  • <JDK_HOME>/jre/lib/charsets.jarファイルのサイズが削減されました。
  • java.lang.String(byte[], *)コンストラクタおよびjava.lang.String.getBytes()メソッドのパフォーマンスが向上しました。

java.langおよびjava.utilパッケージ

  • 配列の並列ソート
  • 標準のBase64エンコーディングおよびデコーディング
  • 符号なし算術演算のサポート

JDBC

  • JDBC-ODBCブリッジが廃止されました。
  • JDBC 4.2に新機能が導入されています。

Java DB

  • JDK 8にはJava DB 10.10が含まれます。

ネットワーキング

  • java.net.URLPermissionクラスが追加されました。
  • セキュリティマネージャがインストールされている場合、java.net.HttpURLConnectionクラスでは、接続を開くリクエストの呼び出しに権限が必要になります。

同時実行性

  • java.util.concurrentパッケージにクラスとインタフェースが追加されました。
  • java.util.concurrent.ConcurrentHashMapクラスに、新規に追加されたストリーム機能とラムダ式に基づいた集計操作に対応するためのメソッドが追加されました。
  • java.util.concurrent.atomicパッケージに、スケーラブルな更新可能変数に対応するためのクラスが追加されました。
  • java.util.concurrent.ForkJoinPoolクラスに、共有プールに対応するためのメソッドが追加されました。
  • 読み取り/書き込みアクセスを制御する3つのモードによって、機能ベースのロックを行うためのjava.util.concurrent.locks.StampedLockクラスが追加されました。

Java XML - JAXP

HotSpot

  • Advanced Encryption Standard(AES)を使用するためのハードウェア組み込み関数が追加されました。Intelハードウェア向けのハードウェアベースのAES組み込み関数を有効にするUseAESおよびUseAESIntrinsicsフラグを使用できるようになりました。ハードウェアは、バージョン2010年以降のWestmereハードウェアである必要があります。 注:AES組み込み関数は、Server VMでのみサポートされます。

    たとえば、ハードウェアAESを有効にするには、次のフラグを使用します。 -XX:+UseAES -XX:+UseAESIntrinsics

    ハードウェアAESを無効にするには、次のフラグを使用します。-XX:-UseAES -XX:-UseAESIntrinsics

  • PermGenが廃止されました。
  • メソッド呼び出し用のバイトコード命令で、Javaプログラミング言語のデフォルトメソッドがサポートされます。

Java Mission Control 5.3 Release Notes

  • JDK 8には、Java Mission Control 5.3が含まれます。