Java

新機能と拡張機能
J2SE 5.0

目次


Java 2 Platform Standard Edition のバージョン 5.0 は、メジャーリリースです。前回のメジャーリリース (1.4.0) 以降、下記の機能が 5.0 で導入されました。

新機能の概要については、J2SETM 5.0 in a Nutshell も参照してください。問題点については、JDK 5.0 release notes を参照してください。

パフォーマンスの拡張
Java 言語機能
総称
拡張 for ループ
オートボクシング / アンボクシング機能
型保証された列挙
可変引数
static のインポート
メタデータ (注釈)
仮想マシン
クラスデータの共有
ガベージコレクタエルゴノミクス
サーバクラスマシン検出
スレッド優先順位の変更
致命的エラーの処理
高精度タイミングのサポート
基本ライブラリ
言語およびユーティリティパッケージ
ネットワーク機能
セキュリティ
国際化
環境変数のサポートの改善
ProcessBuilder
フォーマッタ
スキャナ
リフレクション
JavaBeansTM コンポーネントアーキテクチャ
Collections Framework
XML 処理用 Java API (JAXP)
ビット操作演算
Math
インストゥルメンテーション
直列化
並行処理ユーティリティ
スレッド
監視および管理
統合ライブラリ
Remote Method Invocation (RMI)
Java Database Connectivity (JDBC)
CORBA、Java IDL、および Java RMI-IIOP
Java Naming and Directory InterfaceTM (JNDI)
ユーザインタフェース
国際化
Java サウンドテクノロジ
Java 2DTM テクノロジ
Image I/O
AWT
Swing
配備
一般的な配備
Java Web Start
ツールおよびツールアーキテクチャ
Java Virtual Machine Tool Interface (JVMTI)
Java Platform Debugger Architecture (JPDA)
Java コンパイラ (javac)
Javadoc ツール
注釈処理ツール (apt)
OS およびハードウェアプラットフォーム
サポートするシステム構成
64 ビット AMD Opteron プロセッサ

パフォーマンスの拡張

パフォーマンスの拡張の概要については、「パフォーマンスの拡 張」を参照してください。

JavaTM 言語機能

詳細については、「新しい言語機能」を参照してください。

総称

待ち望まれていた型システムでの今回の拡張によって、コンパイル時の型保証を実現しながら、型またはメソッドを、さまざまな型のオブジェクトに対して使用 できるようになりました。コンパイル時の型保証が Collections Framework に追加され、キャスト操作の煩雑さをなくしました。JSR 14 を参照してください。

拡張 for ループ

この新しい言語構造によって、コレクションおよび配列を繰り返すときに、反復子およびインデックス変数の煩雑でエラーの起こりやすい作業がなくなりまし た。JSR 201 を参照してください。

オートボクシング / アンボクシング機能

この機能によって、プリミティブ型 (int など) とラッパー型 (Integer など) との間の手動変換の煩雑さがなくなりました。JSR 201 を参照してください。

型保証された列挙

この柔軟なオブジェクト指向の列挙型機能によって、任意のメソッドおよびフィールドを使用して列挙型を作成できるようになりました。この機能により、冗長 になることもエラーが頻発することもなく、型保証された列挙パターン (『Effective Java』、項目 21) のすべての利点を実現しています。JSR 201 を参照してください。

可変引数

この機能によって、可変長の引数リストを受けるメソッドを呼び出すときに、手動で引数リストを配列にボクシングする必要性がなくなりました。JSR 201 を参照してください。

static のインポート

この機能により、static メンバをクラス名で修飾する必要がなく、「Constant Interface Antipattern」の欠点もありません。JSR 201 を参照してください。

メタデータ (注釈)

この言語機能を使用すると、多くの場合に常用コードを記述する必要がありません。常用コードは、ソースコードの注釈からツールを使用して生成されます。こ れにより、プログラマが行うべきことを述べる「宣言型の」プログラミング方法が実現され、そのコードはツールが生成します。また、ソースファイルの変更に 合わせて最新の状態にしておかなければならない「付属ファイル」を保守する必要がありません。その代わりに、必要な情報はソースファイル内で保守します。JSR 175 を参照してください。

仮想マシン

クラスデータ共有

クラスデータ共有は、アプリケーションの起動時間とサイズを軽減するための機能です。このインストールプロセスでは、一連のクラスが、システム JAR ファイルから専用の内部表現へロードされ、この表現が「共有アーカイブ」ファイルへダンプされます。以降の JVM の呼び出し中に、共有アーカイブがメモリマップされます。このため、これらのクラスのロードのコストが節約され、これらのクラスに関する JVM のメタデータの多くを、複数の JVM プロセスで共有できるようになります。詳細については、上記のリンクをクリックしてください。

ガベージコレクタエルゴノミクス

並行コレクタは、アプリケーションが必要とするメモリ容量を監視し、この容量に適合できるように拡張されました。アプリケーションのパフォーマンスの目標 を指定でき、JVM では、この目標に一致した最小のアプリケーションサイズでこのパフォーマンス目標を満たすように、Java ヒープのサイズが調整されます。この適合ポリシーの目標は、コマンド行オプションを調整しなくても、最適なパフォーマンスを得られるようにすることです。 ガベージコレクション機能の概要については、上記のリンクをクリックしてください。

サーバクラスマシン検出

アプリケーションの起動時に、起動ツールは、アプリケーションが「サーバクラス」マシン上で実行されているかどうかを検出することができます。

スレッド優先順位の変更

スレッド優先順位のマッピングは、Java スレッドと、優先順位を明示的に設定していないネイティブスレッドとが、同等の順位で競合できるように、いくぶん変更されました。

致命的エラーの処理

致命的なエラーのレポート機構は、診断の出力を改善し信頼性を向上するために拡張されました。

高精度タイミングのサポート

メソッド System.nanoTime() が追加され、相対時間測定でナノ秒精度の時間ソースへアクセスできるようになりました。System.nanoTime() が返す時間値の実際の精度は、プラットフォームによって異なります。

基本ライブラリ

言語およびユーティリティパッケージ

java.lang と java.util の拡張機能の概要については、上記のリンクをクリックしてください。

ネットワーク機能

追加されたネットワーク機能の概要については、上記のリンクをクリックしてください。

セキュリティ

このリリースの J2SE では、セキュリティに関する重要な拡張機能が用意されました。セキュリティトークンのサポートの向上、より多くのセキュリティ標準 (SASL、OCSP、TSP) のサポート、拡張性 (SSLEngine) およびパフォーマンスの改善に加え、暗号化および Java GSS 領域において多数の拡張機能が備わりました。詳細については、上記のリンクをクリックしてください。

国際化

次のような拡張機能があります。

環境変数のサ ポートの改善

System.getenv(String) メソッドは非推奨ではなくなりました。新しい System.getenv() メソッドでは、Map<String,String> として、プロセス環境へアクセスできるようになっています。

ProcessBuilder

新しい ProcessBuilder クラスは、Runtime.exec よりも簡単に、サブプロセスを呼び出すことができます。実際、ProcessBuilder を使用すると、変更されたプロセス環境 (つまり、親のプロセス環境を基にしてわずかに変更を加えた環境) でサブプロセスを開始することが簡単になりました。

フォーマッタ

printf スタイルのフォーマット文字列のインタープリタである Formatter クラスは、レイアウトの位置揃えや配置、数値、文字列、日時データに関する共通フォーマット、およびロケール固有の出力をサポートします。bytejava.math.BigDecimal、 および java.util.Calendar などの共通の Java のデータ型がサポートされています。任意のユーザ型に対する限定的な書式のカスタマイズについては、java.util.Formattable インタフェースを使用します。

スキャナ

java.util.Scanner クラスは、テキストをプリミティブまたは String へ変換する場合に使用できます。 このクラスは、java.util.regex パッケージに基づいているため、ストリーム、ファイルデータ、文字列、または Readable インタフェースの実装者について、正規表現ベースの検索を行うことができます。

リフレクション

総称、注釈型、列挙型のサポートが追加され、便利なメソッドが追加されました。また、java.lang.Class のクラスが汎用化されました。

JavaBeans コンポーネントアーキテクチャ

IndexedPropertyChangeEvent という PropertyChangeEvent のサブクラスが、Bean の変更部分を識別するインデックスを使用するバウンドプロパティをサポートするために追加されました。また、インデックスの付いたプロパティ変更イベント の発生をサポートするために、PropertyChangeSupport クラスにメソッドが追加されました。

Collections Framework

Collections Framework は、次のよ うに拡張されました。

XML 処理用 Java API (JAXP)

詳細については上記のリンクをクリックするか、JSR 206 を参照してください。

ビット操作演算

ラッパークラス (IntegerLongShortByte、 および Char) では、highestOneBitlowestOneBitnumberOfLeadingZerosnumberOfTrailingZerosbitCountrotateLeftrotateRightreversesignum、 および reverseBytes などの共通のビット操作演算がサポートされるようになりました。

Math

ライブラリで用意された計算機能が、次のように追加されました。

インストゥルメンテーション

新しい java.lang.instrument パッケージでは、Java プログラミングエージェント が、Java 仮想マシン上で実行するプログラムを計測できるようにするサービスが用意されました。この計測機構は、バイトコードのメソッドを変更したものです。

直列化

バージョン 5.0 での新機能である列挙型の処理をサポートするようになりました。列挙インスタンスを直列化する規則は、通常の直列化可能なオブジェクトを直列化する規則と 異なります。列挙インスタンスの直列化は、その列挙定数名と、その基になっている列挙型を識別する情報とだけで構成されています。同様に、直列化復元の動 作も異なります。クラス情報は適切な列挙クラスを見つけるために使用されます。そのクラスと受け取った定数名を使用して Enum.valueOf メソッドが呼び出され、列挙定数を取得して返します。

並行処理ユーティリティ

java.util.concurrentjava.util.concurrent.atomic、 および java.util.concurrent.locks のパッケージには、並行処理クラスとアプリケーションの開発用の、高性能かつ拡張性の高い、スレッドセーフな構築ブロックの強力かつ拡張可能なフレーム ワークが用意されました。スレッドプール、スレッドセーフなコレクション、セマフォ、タスクスケジューリングフレームワーク、タスク同期化ユーティリ ティ、基本変数、およびロックなどがあります。これらのパッケージをコアクラスライブラリへ追加したことにより、データ構造に対する Collections Framework の場合とまったく同じように、プログラマがこれらのユーティリティを手書きで作成する必要がなくなりました。また、これらのパッケージでは、高度な並行プ ログラミング用の低レベルなプリミティブも用意しています。これらのプリミティブでは、プロセッサが提供する並行サポートを利用して、以前ではネイティブ コードを使用しなければ実現できなかったほど高性能で拡張性の高い並行処理アルゴリズムを、Java 言語に実装できるようになりました。JSR 166 を参照してください。

スレッド

java.lang.Thread クラスには、次の拡張機能が備えられました。

監視および管理

このリリースの J2SE では、Java プラットフォームの監視および管理に、重要な拡張機能がもたらされました。詳細については、上記のリンクを参照してください。

統合ライブラリ

Remote Method Invocation (RMI)

RMI は、次の領域で拡張されました。

Java Database Connectivity (JDBC)

javax.sql パッケージの一部として、J2SE バージョン 1.4 に導入された RowSet インタフェースによって、軽量な手段で、コンポーネント間でデータを受け渡すことができるようになりました。

このリリースでは、開発者を支援するために、RowSet オブジェクトを使用できる 5 つのより一般的な方法で、RowSet インタフェースが (JSR 114 として) 実装されました。これらの実装によって、開発者がそのままでも拡張しても使用できる標準が提供されました。

5 つの標準実装は次のとおりです。

CORBA、Java IDL、および Java RMI-IIOP

CORBA、Java IDL、および Java RMI-IIOP に対する拡張については、「J2SE 1.4.x と 5.0 の間での CORBA 機能の変更点」に記載しています。

Java Naming and Directory InterfaceTM (JNDI)

JNDI には、新たに次の機能が備えられました。

ユーザインタフェース

国際化

Java サウンドテクノロジ

Java 2DTM テクノロジ

追加された 2D 機能には、Linux および Solaris のプリンタサポートの拡張機能、ファイルおよびストリームからフォントを作成する新しいメソッド、VolatileImage および画像のハードウェア高速化関連の新しいメソッドがあります。テキスト描画のコードに対する多くの内部的な変更によって、コードの堅牢さ、パフォーマ ンス、および拡張性が著しく向上しました。他のパフォーマンス機能には、OpenGL (デフォルトでは無効) を使用したハードウェアによる高速描画があります。

Image I/O

Image I/O システムには、BMP および WBMP フォーマットのリーダーおよびライターが備わりました。

AWT

リリース 5.0 では、多数の AWT の拡張とバグの修正が行われました。この中にはユーザからの要望によるものもあります。まず第一に、新しい MouseInfo クラスによって、デスクトップでのマウスの位置を判断できるようになりました。新しい Window メソッドにより、プラットフォームに適した、新たに作成したウィンドウ (またはフレーム) のデフォルト位置を指定できるようになりました。Window の別の拡張機能によって、ウィンドウ (またはフレーム) を常に前面に表示できるようになりました (Solaris/Linux のウィンドウマネージャの中には、この機能が動作しないものもあります)。データ転送の領域では、新しい DropTargetDragEvent API により、ドラッグ操作中に、ドロップターゲットが転送データにアクセスできるようになりました。

Swing

1.4.2 リリースでは、XP と GTK という、Swing 用の 2 つの新しい Look & Feel が導入されました。5.0 では、これで中断することなく、Synth というスキン可能な Look & Feel と Ocean というメタル用の新テーマの 2 つの Look & Feel が用意されました。Look & Feel 以外にも、JTable に印刷サポートを追加しました。これにより、JTable の美しい印刷コピーを簡単に得ることができるようになっています。最後に、7 年振りに、jFrame.getContentPane().add() に相当する jFrame.add が作成されました。

配備

一般的な配備

Pack200 は、JSR200 で定義された、JAR ファイルを高圧縮できる新しい形式です。Java Webstart アプリケーションや Java Plug-in アプレットで使用される JAR ファイルのダウンロードサイズを大幅に削減できます。

一般的な配備機能および拡張機能の概要については、上記の「一般的な配備」のリンクをクリックしてください。

Java Web Start の配備

Java Web Start の配備機能と拡張機能の概要については、上記のリンクをクリックしてください。

ツールおよびツールアーキテクチャ

Java Virtual Machine Tool Interface (JVMTI)

JVMTI は、開発および監視ツールで使用する新しいネイティブプログラミングインタフェースです。JVMTI は、Java 仮想マシン (VM) で動作するアプリケーションの状態検査と実行制御の両方の機能を提供し、プロファイリングツール、デバッグツール、監視ツール、スレッド分析ツール、カバ レッジ分析ツールなど、VM の状態その他にアクセスする必要がある各種ツールの VM インタフェースとして機能します。

JVMTI は、次回メジャーリリースの J2SE では、現在非推奨になっている JVMPI と JVMDI の代わりになります。

Java Platform Debugger Architecture (JPDA)

JPDA 自体に多くの新機能があり、JPDA の拡張機能ページで詳細に説明しています。

Java コンパイラ (javac)

コンパイラオプションは次のとおりです。

Javadoc ツール

「Javadoc 5.0 の新機能」を 参照してください。

注釈処理ツール (apt)

apt は、注釈処理用の新しいコマンド行ユーティリティです。このユーティリティには、プログラム annotations を処理する、一連のリフレクティブ API とサポートインフラストラクチャが含まれています。

OS およびハードウェアプラットフォーム

サポー トするシステム構成

詳細については、上記のリンクをクリックしてください。

64 ビット AMD Opteron プロセッサ

J2SE 5.0 では、AMD Opteron プロセッサが、Suse Linux および Windows 2003 上のサーバ VM でサポートされています。

Copyright © 2004 Sun Microsystems, Inc. All Rights Reserved.



 Sun Microsystems, Inc