JDK 開発者ガイド (Solaris 編)

第 1 章 新しい機能と強化された機能

Java Platform Standard Edition 5 バージョン 1.5.0 は、機能が大幅に向上されたメジャーリリースです。以下に示す機能は、前回のメジャーリリース (1.4.0) 以降に 1.5.0 で導入されたものです。

新機能の概要は、http://java.sun.com/developer/technicalArticles/releases/j2se15/ にある「J2SE 1.5 in a Nutshell」にも挙げられています。問題点については、http://java.sun.com/j2se/1.5.0/ja/relnotes.html にある 「JDK 5.0 リリースノート」を参照してください。

パフォーマンスの強化

パフォーマンスの強化についての概要は、http://java.sun.com/j2se/1.5.0/ja/docs/ja/guide/performance/speed.html にある「JDK 5.0 での拡張」を参照してください。

Java 言語の機能

詳細については、http://java.sun.com/j2se/1.5.0/ja/docs/ja/guide/language/index.html にある「JDK 5.0 での拡張」を参照してください。

汎用型

待ち望まれた型システムの拡張により、コンパイル時のタイプセーフを提供しながら、さまざまなタイプのオブジェクトに対して型またはメソッドを使用できるようになりました。汎用型はコレクションフレームワークにコンパイル時のタイプセーフを追加し、手間のかかるキャスティング作業を省きます。JSR 14 と、http://java.sun.com/j2se/1.5.0/ja/docs/ja/guide/language/generics.html にある汎用型関連の文書を参照してください。

ループの拡張

この新しい言語構造により、コレクションと配列の繰り返し処理を行う際にイテレータとインデックス変数の手間やエラー発生を防ぐことができます。JSR 201 と、http://java.sun.com/j2se/1.5.0/ja/docs/ja/guide/language/foreach.html にあるドキュメントを参照してください。

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

この機能は、プリミティブ型 (int など) とラッパー型 (integer など) との間で手動変換をする手間を省きます。JSR 201 と、http://java.sun.com/j2se/1.5.0/ja/docs/ja/guide/language/autoboxing.html にあるドキュメントを参照してください。

型保証された列挙

この柔軟なオブジェクト指向の列挙型機能を使用することによって、任意のメソッドとフィールドを使用して列挙型を作成できます。この機能には、冗長性がなく、エラーを起こしにくい型保証された列挙パターン (Effective Java、Item 21) のあらゆるメリットがあります。JSR 201 と、http://java.sun.com/j2se/1.5.0/ja/docs/ja/guide/language/enums.html にあるドキュメントを参照してください。

変数引数

この機能によって、可変長引数リストを受け付けるメソッドを呼び出す場合に引数リストを配列に手動で入れる必要がなくなります。JSR 201 と、http://java.sun.com/j2se/1.5.0/ja/docs/ja/guide/language/varargs.html にあるドキュメントを参照してください。

Static のインポート

この機能を使用すると、Constant Interface Antipattern (不変のインターフェースアンチパターン) の短所なしで、クラス名で静的メンバーを修飾することを避けられます。JSR 201 と、http://java.sun.com/j2se/1.5.0/ja/docs/ja/guide/language/static-import.html にあるドキュメントを参照してください。

注釈

この言語機能によって、ツールを使用してソースコード内の注釈からボイラープレートコードを生成可能になり、さまざまな状況でボイラープレートコードを記述する手間を省けます。これは、プログラマが何を行うべきかを記述しツールがそれを実行するコードを生成する、宣言的なプログラミングスタイルが可能になります。また、ソースファイルの変更に伴って最新状態に保持しなければならない付属ファイルを管理する必要もなくなります。それに代わって、情報はソースファイル内で管理できます。JSR 175 と、http://java.sun.com/j2se/1.5.0/ja/docs/ja/guide/language/annotations.html にあるドキュメントを参照してください。

仮想マシン

クラスデータの共有

クラスデータの共有機能は、アプリケーションの起動時間の短縮とフットプリントの減少を目的としたものです。インストール処理では、システム jar ファイルからプライベートな内部表現に一連のクラスが読み込まれ、続いてその表現が共有アーカイブファイルにダンプされます。その後行われる JVM の起動では、その共有アーカイブがメモリー内にマップされます。このため、クラスを読み込む手間が省かれ、これらのクラス用の JVM のメタデータのほとんどを複数の JVM プロセスで共有できます。詳細については、http://java.sun.com/j2se/1.5.0/ja/docs/ja/guide/vm/class-data-sharing.html にあるドキュメントを参照してください。

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

この並行コレクタは、アプリケーションが必要とするメモリーを監視し、これに適合するように拡張されました。 アプリケーションのパフォーマンス目標を指定すると、JVM は、それらの目標に適合する最小のアプリケーションフットプリントで Java ヒープのサイズを調整します。適応性のあるこのポリシーは、最上のパフォーマンスを達成するために必要なコマンド行オプションの調整を不要にすることを目的にしています。ガベージコレクション機能の概要については、http://java.sun.com/j2se/1.5.0/ja/docs/ja/guide/vm/gc-ergonomics.html にあるドキュメントを参照してください。

サーバークラスマシンの検出

アプリケーションの起動時に、起動用ウィンドウはアプリケーションがサーバークラスマシンで稼動しているかどうかを検出できます。http://java.sun.com/j2se/1.5.0/ja/docs/ja/guide/vm/server-class.html にあるドキュメントを参照してください。

スレッド優先順位の変更

スレッドの優先順位の割り当ては、優先順位が明示的に設定されていない Java スレッドとネイティブスレッドが、ある程度対等に競うことができるように変更されました。http://java.sun.com/j2se/1.5.0/ja/docs/ja/guide/vm/thread-priorities.html にあるドキュメントを参照してください。

致命的なエラーの処理

致命的なエラーを報告するメカニズムはより優れた診断を出力するように改良され、信頼性も高まりました。

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

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

コアライブラリ

lang パッケージと util パッケージ

java.lang および java.util の拡張についての概要は、http://java.sun.com/j2se/1.5.0/ja/docs/ja/guide/lang/enhancements.html にあるドキュメントを参照してください。

ネットワークの機能拡張

追加されたネットワーク機能の概要については、http://java.sun.com/j2se/1.5.0/ja/docs/ja/guide/net/enhancements-1.5.0.html にあるドキュメントを参照してください。

セキュリティ

この J2SE リリースでは、セキュリティ機能が大幅に強化されています。このリリースでは、セキュリティトークンのサポート向上、セキュリティ標準のサポート増加 (SASL、OCSP、TSP)、スケーラビリティ (SSLEngine) とパフォーマンスの向上などが実現されているほか、暗号や Java GSS などの領域でも数多くの機能強化がなされています。詳細については、http://java.sun.com/j2se/1.5.0/ja/docs/ja/guide/security/index.html にあるドキュメントを参照してください。

国際化

以下の機能強化がなされました。

http://java.sun.com/j2se/1.5.0/ja/docs/ja/guide/intl/index.html にあるドキュメントも参照してください。

環境変数のサポート向上

System.getenv(String) メソッドは非推奨扱いではなくなりました。新しい System.getenv() メソッドを使用すると、Map<String,String> としてプロセス環境にアクセスできます。http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/lang/System.html#getenv(java.lang.String) にあるドキュメントを参照してください。

ProcessBuilder

サブプロセスの呼び出しには、Runtime.exec よりも新しい ProcessBuilder クラスが便利です。特に、ProcessBuilder を使用すると、変更されたプロセス環境 (親のプロセス環境に基づくが、一部変更されたもの) で サブプロセスの開始が容易になります。http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/lang/ProcessBuilder.html にあるドキュメントも参照してください。

Formatter

printf 形式のフォーマット文字列のインタプリタである Formatter クラスは、レイアウトの調整と整列、数値 / 文字列 / 日時データの共通フォーマット、ロケール固有の出力などのサポートを提供します。bytejava.math.BigDecimaljava.util.Calendar などの共通の Java 型がサポートされます。 java.util.Formattable インタフェースを使用することで、任意のユーザー型のフォーマットを限定的にカスタマイズできます。

http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/util/Formatter.html にあるドキュメントを参照してください。

Scanner

java.util.Scanner クラスを使用して、テキストをプリミティブまたは String に変換できます。このクラスは java.util.regex パッケージをベースとしているため、このクラスを使用してストリーム、ファイルデータ、文字列、または Readable インタフェースの実装に対して正規表現に基づく検索を行うこともできます。http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/util/Scanner.html にあるドキュメントを参照してください。

リフレクション

汎用型、メタデータ、列挙、および簡易メソッドのサポートが追加されました。また、java.lang.Class が総称化されました。http://java.sun.com/j2se/1.5.0/ja/docs/ja/guide/reflection/enhancements.html にあるドキュメントを参照してください。

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

変更された bean 部分を特定するためにインデックスを使用するバウンドプロパティをサポートするため、PropertyChangeEvent のサブクラスとして IndexedPropertyChangeEvent が追加されました。また、インデックス化されたプロパティ変更イベントの起動をサポートするために、PropertyChangeSupport クラスにメソッドがいくつか追加されました。http://java.sun.com/j2se/1.5.0/ja/docs/ja/guide/beans/index.html にあるドキュメントを参照してください。

コレクションフレームワーク

コレクションフレームワークは、以下のように強化されました。

http://java.sun.com/j2se/1.5.0/ja/docs/ja/guide/collections/index.html にあるドキュメントを参照してください。

XML 処理用の Java API (JAXP)

詳細については、JSR 206、または http://java.sun.com/j2se/1.5.0/ja/docs/ja/guide/xml/jaxp/index.html にあるドキュメントを参照してください。

ビット操作処理

ラッパークラス (IntegerLongShortByte、および Char) は、highestOneBitlowestOneBitnumberOfLeadingZerosnumberOfTrailingZerosbitCountrotateLeftrotateRightreversesignumreverseBytes などの共通のビット操作処理をサポートするようになりました。

数値演算

ライブラリが提供する数値機能は、いくつかの次の方法で拡張されました。

http://java.sun.com/j2se/1.5.0/ja/docs/ja/guide/math/index.html に挙げられたドキュメントを参照してください。

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

新しい java.lang.instrument パッケージには、Java プログラミングエージェントが Java 仮想マシン上で稼動しているプログラムを計測できるサービスが含まれます。このインストゥルメンテーションメカニズムは、メソッドのバイトコードを修正するものです。

直列化

バージョン 1.5.0 で追加された列挙型を処理できるようにサポートが追加されました。列挙インスタンスを直列化する規則は、直列化が可能な通常のオブジェクトを直列化する規則とは異なります。直列化された列挙インスタンスフォームには、その列挙定数名と、そのベースの列挙型を特定する情報しか含まれません。非直列化の動作も異なります。適切な列挙クラスの特定には、クラス情報が使用されます。返す列挙定数の取得には、このクラスおよび受け取った定数名によって Enum.valueOf メソッドが呼び出されます。

http://java.sun.com/j2se/1.5.0/ja/docs/ja/guide/serialization/index.html にあるドキュメントを参照してください。

ユーティリティの並行性サポート

java.util.concurrentjava.util.concurrent.atomic、および java.util.concurrent.locks パッケージは、同時実行されるクラスおよびアプリケーション (スレッドプール、スレッドに対して安全なコレクション、セマフォ、タスクスケジューリングフレームワーク、タスク同期ユーティリティ、自動変数、ロックなど) を開発するための、パフォーマンスとスケーラビリティに優れた、スレッドに対して安全な構築ブロックを実現する、拡張性の高い強力なフレームワークを提供します。これらのパッケージをコアクラスライブラリに追加することで、手動でこれらのユーティリティを作成する手間が省けます。これは、データ構造に対するコレクションフレームワークの効果によく似ています。また、これらのパッケージは、プロセッサによって提供される並行性のサポートを利用する高度な並行プログラミングを対象とした低レベルのプリミティブも提供します。これによりプログラマは、以前にはネイティブコードを使用せずには不可能であった、高パフォーマンスで高スケーラビリティの並行アルゴリズムを Java 言語に実装できます。

JSR 166 と、http://java.sun.com/j2se/1.5.0/ja/docs/ja/guide/concurrency/index.html にあるドキュメントを参照してください。

スレッド

java.lang.Thread クラスは、以下のように強化されました。

監視と管理

今回の J2SE リリースでは、Java プラットフォームの監視と管理の機能が大幅に強化されました。

統合ライブラリ

Remote Method Invocation (RMI)

RMI は、以下のように強化されました。

http://java.sun.com/j2se/1.5.0/ja/docs/ja/guide/rmi/index.html にあるドキュメントを参照してください。

Java Database Connectivity (JDBC)

javax.sql パッケージの一部として J2SE バージョン 1.4 で導入された RowSet インタフェースは、コンポーネント間でデータを受け渡す軽量手法を提供します。

このリリースでは、開発者に便利なように、RowSet オブジェクトを使用できる 5 つの一般的な方法で (JSR 114 として) RowSet インタフェースが実装されました。これらの実装により、現状のままあるいは拡張して自由に使用できる標準が提供されます。以下に、これらの 5 つの標準実装を示します。

http://java.sun.com/j2se/1.5.0/ja/docs/ja/guide/jdbc/index.html にあるドキュメントを参照してください。

CORBA、Java IDL、および RMI-IIOP

CORBA、Java IDL、および Java RMI-IIOP の機能強化については、「J2SE 1.4.x と 5.0 の間での CORBA 機能の変更点」で説明しています。http://java.sun.com/j2se/1.5.0/ja/docs/ja/guide/idl/index.html にある Java IDL ドキュメントと、http://java.sun.com/j2se/1.5.0/ja/docs/ja/guide/rmi-iiop/index.html にある Java RMI-IIOP ドキュメントを参照してください。

Java Naming and Directory InterfaceTM (JNDI)

JNDI の新機能は次のとおりです。

http://java.sun.com/j2se/1.5.0/ja/docs/ja/guide/jndi/index.html にあるドキュメントを参照してください。

ユーザーインタフェース

国際化

http://java.sun.com/j2se/1.5.0/ja/docs/ja/guide/intl/index.html にあるドキュメントを参照してください。

Java Sound テクノロジ

http://java.sun.com/j2se/1.5.0/ja/docs/ja/guide/sound/index.html にあるドキュメントを参照してください。

Java 2DTM テクノロジ

2D 機能には、広範な Solaris または Linux プリンタサポート、ファイルとストリームからフォントを作成する新しい方法、VolatileImage とイメージ描画のハードウェアベースの高速化に関連する新しい方法などが追加されました。テキスト描画コードに多数の内部変更が加えられたことで、その堅牢性、パフォーマンス、およびスケーラビリティが大幅に向上しました。他のパフォーマンス機能としては、OpenGL (デフォルトでは無効) を使用するハードウェアにより高速化された描画などがあります。

http://java.sun.com/j2se/1.5.0/ja/docs/ja/guide/2d/index.html にあるドキュメントを参照してください。

Image I/O

Image I/O システムに、BMP 形式と WBMP 形式用の読み込みと書き込みが追加されました。

http://java.sun.com/j2se/1.5.0/ja/docs/ja/guide/imageio/index.html にあるドキュメントを参照してください。

AWT

1.5.0 リリースでは、顧客から要求の多かったものも含め、多数の AWT 強化とバグ修正を実現しました。顕著な例として、新しい MouseInfo クラスはデスクトップ上のマウスの位置を検出できるようになりました。新しい Window メソッドは、新しく作成されるウィンドウ (またはフレーム) のデフォルトの位置をプラットフォームに合わせて指定できます。Window の他の強化によって、ウィンドウ (またはフレーム) を常に最上位に配置することも可能となりました (この機能は Solaris または Linux 上の一部のウィンドウマネージャでは機能しません)。データ転送の領域では、新しい DropTargetDragEvent API を使用することで、ドラッグ操作の際にドロップターゲットが転送データにアクセスできるようになりました。

詳細は、http://java.sun.com/j2se/1.5.0/ja/docs/ja/guide/awt/index.html にあるAWTを参照してください。

Swing

1.4.2 リリースでは、Swing に 2 つの新しい見た目と使い心地、XP と GTK が追加されました。それに続けて、1.5.0 でもさらに 2 つの見た目と使い心地、Synth (スキンを変更可能) と Ocean (Metal の新しいテーマ) が提供されます。見た目と使い心地だけでなく、JTable に印刷サポートも追加しました。これにより、JTable のきれいな印刷コピーを簡単に出力できるようになりました。7 年をかけて、jFrame.addjFrame.getContentPane().add() と同等にしました。

http://java.sun.com/j2se/1.5.0/ja/docs/ja/guide/swing/index.html にある Swing のドキュメントを参照してください。

配備

一般的な配備

Pack200 (JSR 200 で定義されている、JAR ファイルの新しい超高圧縮形式) を使用すると、Java Web Start アプリケーションおよび Java Plug-in アプレットで使用される JAR ファイルのダウンロードサイズを大幅に縮小できます。

一般的な配備の機能と機能強化についての概要は、http://java.sun.com/j2se/1.5.0/ja/docs/ja/guide/deployment/enhancements-1.5.0.html を参照してください。

Java Web Start の配備

Java Web Start の配備機能と機能強化についての概要は、http://java.sun.com/j2se/1.5.0/ja/docs/ja/guide/javaws/enhancements-1.5.0.html を参照してください。

ツールとツールアーキテクチャ

Java Virtual Machine Tool Interface (JVMTI)

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

JVMTI は、 J2SE の次のメジャーリリースで、現在推奨されていない JVMPI と JVMDI に置き換わります。

http://java.sun.com/j2se/1.5.0/ja/docs/ja/guide/jvmti/index.html にあるドキュメントを参照してください。

Java Platform Debugger Architecture (JPDA)

以下 URL のドキュメントの「JPDA の拡張機能」で説明されているように、JPDA 自体、多数の新機能が追加されています。

http://java.sun.com/j2se/1.5.0/ja/docs/ja/guide/jpda/index.html にあるドキュメントを参照してください。

Java プログラミング言語コンパイラ (javac)

コンパイラには、次のオプションがあります。

http://java.sun.com/j2se/1.5.0/ja/docs/ja/tooldocs/solaris/javac.html にあるマニュアルページドキュメントを参照してください。

Javadoc ツール

http://java.sun.com/j2se/1.5.0/ja/docs/ja/guide/javadoc/whatsnew-1.5.0.html にある 「Javadoc 5.0 の新機能」 を参照してください。

注釈処理ツール (apt)

apt は、注釈処理用の新しいコマンド行ユーティリティです。これには、プログラムの注釈を処理するためのリフレクト API セットとサポート用インフラも含まれます。

http://java.sun.com/j2se/1.5.0/ja/docs/ja/guide/apt/index.html にあるドキュメントを参照してください。

OS とハードウェアプラットフォーム

サポートされているシステム構成

詳細については、http://java.sun.com/j2se/1.5.0/system-configurations.html を参照してください。

64 ビット AMD Opteron プロセッサ

J2SE 5 では、Suse Linux または Windows 2003 を使用したサーバー VM で AMD Opteron プロセッサがサポートされます。