ヘッダーをスキップ
Oracle® JRockit JDKリリース・ノート
リリースR28
B61445-04
  目次へ移動
目次

前
 
次
 

2 Oracle JRockit JDK R28の新機能および変更点

この章では、Oracle JRockit R28.xリリースにおける新機能および変更点について説明します。

この付録の内容は以下のとおりです。

2.1 R28.3.2での変更点

この項では、Oracle JRockit JDK R28.3.2での変更点について説明します。

2.1.1 -XX:+CheckStacksコマンドライン・オプションの新しいデフォルト値

R28.3.2より前のバージョンのJRockitでは、-XX:+|-CheckStacksオプションがデフォルトで無効になっており、JNIメソッド・エントリでスタック・オーバーフローが発生していないかどうかは明示的にチェックされませんでした。

JRockit R28.3.2以降のバージョンでは、-XX:+|-CheckStacksオプションはデフォルトで有効になります。きわめてまれなケースですが、スタック・オーバーフロー検出のオーバーヘッドが加わったために、パフォーマンスが低下することがあります。このオーバーヘッドは、-XX:-CheckStacksオプションを使用してスタック・チェックを明示的に無効にすることで回避できます。

また、-XX:+|-CheckStacksを有効にした後、StackOverflowErrorがスローされるようになることもごくまれにあります。これが起こるのは、スタックがオーバーフローしてからメモリー1ページ以内にスレッドがあった場合のみです。この場合の解決方法としては、-XX:+|-CheckStacksを無効にするのではなく、-Xssオプションを使用してスタック・サイズを少しだけ大きくすることをお薦めします。-Xssオプションの詳細は、『Oracle JRockitコマンドライン・リファレンス』を参照してください。

2.1.2 定数プールのガベージ・コレクションを無効にする新しいコマンドライン・オプション

多数のリフレクションやシリアライズを使用するアプリケーションには、ランタイム共有定数プールから不要なデータを除去するために必要なガベージ・コレクション・アクティビティのパフォーマンス・オーバーヘッドがかかっていました。このオーバーヘッドは、新しいコマンドライン・オプション-XX:-UseCPoolGCで解消できます。このオプションを使用すると、ネイティブ・メモリー・リークが発生することがあります。

このオプションの詳細は、-XX:-UseCPoolGC(Oracle JRockitコマンドライン・リファレンス)を参照してください。

2.1.3 停止レポート用の新しい冗長オプション

-Xverboseオプションに新しいパラメータshutdownが追加されました。このパラメータを設定すると、JVMの正常な停止をトリガーしたイベントに関する情報が得られます。

詳細は、Oracle JRockitコマンドライン・リファレンス-Xverboseの説明を参照してください。

2.2 R28.2.3での変更点

この項では、Oracle JRockit JDK R28.2.3での変更点について説明します。

2.2.1 -XX:MaxLargePageSizeコマンドライン・オプションの新しいデフォルト値

以前のバージョンのJRockit R28では、-XX:MaxLargePageSizeオプションのデフォルト値はゼロでした。つまり、大規模ページの最大サイズに制限はなく、値はオペレーティング・システムで指定されていました。

JRockit R28.2.3以降のバージョンでは、このオプションのデフォルト値は256MBです。

2.3 R28.2.2での変更点

この項では、Oracle JRockit JDK R28.2.2での変更点について説明します。

2.3.1 ファイナライズにおける問題の修正

以前のバージョンのJRockit R28には、一部のファイナライザがまったく実行されないことがあるという問題がありました。この問題はJRockit R28.2.2で解決されました。JRockitではファイナライザを内部的に使用してクラスの定数プール・データを管理しているため、この問題を修正したことによる副次的作用として、アプリケーションでsun.reflect.ConstantPoolを使用してクラスの定数プール・データのロードとアクセスを絶えず実行する場合は、R28.2.2以降へのアップグレード後にJavaヒープに格納されるファイナライズ可能オブジェクトの数が増加することがあります。このメモリー・サブシステムへの負荷の増加により、パフォーマンスの問題(ヒープ消費量の増加やGCアクティビティの増加など)やOutOfMemoryErrorがごくまれに発生します。このようなパフォーマンスの問題は、アプリケーションを変更して冗長なクラス・ロードを排除すれば、ほぼ確実に解決できます。

2.4 R28.2.0での変更点

この項では、Oracle JRockit JDK R28.2での変更点について説明します。変更点は次のとおりです。

2.4.1 JRockitフライト・レコーダのヒープ統計イベントの改善

JRockit R28より前のバージョンでは、ガベージ・コレクションが長く行われると、プロファイリング記録中にアプリケーションが休止します。

アプリケーションが長時間休止されることがないように、JRockitフライト・レコーダのヒープ統計イベントが改善されました。

2.4.2 例外ロギングおよびイベントをフィルタ処理するためのコマンドライン・オプション

新しいコマンドライン・オプション-XX:ExceptionTraceFilterおよび新しい診断コマンドexception_trace_filterを使用すると、指定した例外タイプに基づいてJVM例外ロギングおよびJRockitフライト・レコーダの例外イベントがフィルタ処理されます。

これらのコマンドの詳細は、『Oracle JRockitコマンドライン・リファレンス』を参照してください。

2.5 R28.1.5での変更点

この項では、Oracle JRockit JDK R28.1.5での変更点を示します。

2.5.1 JRockit Mission Controlのサンプルがデフォルトでインストールされなくなった

Oracle JRockit Mission Control 4.0.1を含むOracle JRockit JDK R28.1.5のインストーラでは、デフォルトでJRockit Mission Controlのサンプルがインストールされません。JRockit Mission Controlのサンプルをインストールするには、オプションのコンポーネントデモおよびサンプルを選択する必要があります。

製品のインストールの詳細は、Oracle JRockitインストレーション・ガイドを参照してください。

2.6 R28.1.0での変更点

この項では、JRockit JDK R28.1.0での変更点を示します。変更点は次のとおりです。

2.6.1 ガベージ・コレクションの改善

genparガベージ・コレクション・モードでは、古い世代でメモリー不足になると、古い領域に昇格されるオブジェクトがナーサリ内で昇格され、これによってナーサリの断片化が生じていました。この状況は昇格の障害と呼ばれています。

R28.1のJRockit JVMでは、メモリー不足が生じている若いコレクションのために古いコレクションが早期にトリガーされ、昇格の障害を防ぎます。

2.6.2 コマンドライン・オプションでの受信バッファ・サイズの指定

ネットワーク・ソケットからの読取りの際に、新しいコマンドライン・オプション-XX:MaxRecvBufferSizeを使用して、受信バッファ・サイズを制限できます。

このオプションの詳細は、-XX:MaxRecvBufferSize(Oracle JRockitコマンドライン・リファレンス)を参照してください。

2.6.3 メモリー不足エラー発生時のJVMクラッシュの有効化

Oracle JRockit R28.1では、-XX:[+|-]CrashOnOutOfMemoryErrorコマンドライン・オプションが導入されました。このオプションが有効な場合、メモリー不足エラーが発生すると、JRockit JVMがクラッシュし、クラッシュ・ファイルが作成されます。クラッシュする前のJVMの状態は、オフライン分析のためにコア・ダンプ・ファイルに保存されます。

このオプションの詳細は、-XX:+|-CrashOnOutOfMemoryError(Oracle JRockitコマンドライン・リファレンス)を参照してください。

2.6.4 ディスク・バッファからのフライト・レコーディング・データの収集およびパッケージ

このリリースのOracle JRockitでは、コマンドライン・ツールoracle.jrockit.jfr.tools.ConCatRepositoryが導入されています。このツールを使用すると、ディスクに書き込まれたがフライト記録として処理およびパッケージされていないJRockitフライト・レコーダ・データを抽出し、そこからフライト記録を作成できます。ディスク上にフライト記録バッファがあり、JVMが終了したが.jfrファイルがアセンブルされていないためにフライト記録ファイルが完了しなかった場合、この機能が役立ちます。

このオプションの詳細は、『Oracle JRockitフライト・レコーダ・ラン・タイム・ガイド』を参照してください。

2.7 R28.0.1での変更点

この項では、JRockit JDK R28.0.1での変更点を示します。

2.7.1 ラージ・ページを使用するLinux IA32でMaxCodeMemoryのデフォルトが64MBに増加

R28.0.0では、ラージ・ページを使用するLinux IA32での最大コード・メモリーのデフォルトは32MBでした。

R28.0.1では、デフォルト値は64MBに変更されました。

このオプションの詳細は、-XX:MaxCodeMemory(Oracle JRockitコマンドライン・リファレンス)を参照してください。

2.8 R28.0.0の新機能および変更点

JRockit JDK R28.0.0の新機能および変更点を次に示します。これらの変更点は次のとおりです:

2.8.1 スレッドの停止メカニズムの変更

JVMのスレッド停止メカニズムが変更されました。前のリリースのJRockit JVMでは、シグナルを送信してスレッドを停止させていました(たとえば、ガベージ・コレクションの実行などのため)。JRockit JVM R28.0では、スレッドが定期的にチェックを行って自動的に停止されます。

この変更による、明白な動作の変更はありませんが、JRockit JVMの管理が簡素化され、エラーが減少します。

2.8.2 HPROFフォーマットのヒープ・ダンプの生成

HPROFバイナリ形式のヒープ・ダンプを生成して、ヒープ分析ツールで解析できます。-XX:+HeapDumpOnOutOfMemoryErrorまたは-XX:+HeapDumpOnCtrlBreakコマンドライン・オプションを使用すると、OutOfMemory発生時にHPROFバイナリ形式のJavaヒープ・ダンプが生成されます。HPROF形式のヒープ・ダンプは、hprof診断コマンドやJRockit Mission Controlでも生成できます。

詳細は、Oracle JRockit診断およびトラブルシューティング・ガイドのHPROFバイナリ形式のJavaヒープ・ダンプの生成に関する項を参照してください。

2.8.3 コードの生成および最適化のためのログの改善

コードの生成および最適化で粒度の細かいログを指定できるようになり、すばやい診断およびトラブルシューティングが可能になりました。-Xverbose:optおよび-Xverbose:codegenオプションで、より詳細な情報が出力されます。詳細は、Oracle JRockitコマンドライン・リファレンスを参照してください。

2.8.4 ディレクティブによるコードの最適化の詳細な制御

JRockit JVMの以前のリリースでは、optfileにディレクティブを指定し、-Djrockit.optfileプロパティを使用してoptfileの名前と場所を示すことで、コードの最適化を制御することができました。

JRockit JVM R28.0では、optfileでのコンパイラ制御ディレクティブの指定形式が拡張および改善され、より細かいレベルでコードの最適化を制御できるようになりました。新しい診断コマンドライン・オプション-XX:OptFileを使用して、optfileの名前とパスを指定できます。

詳細は、Oracle JRockit診断およびトラブルシューティング・ガイドの最適化ディレクティブの指定に関する項を参照してください。

2.8.5 実行時にガベージ・コレクション方式が変更されない

JRockit JVM R28.0では、-Xgcコマンドライン・オプションを使用してthroughputまたはpausetimeガベージ・コレクション・モードを指定すると、指定したモードに関連する方式(デフォルトでは、genparおよびgencon)がランタイム全体を通じて使用されます。ランタイム中にガベージ・コレクタが世代別から非世代別に変更されることはありません。

この変更は、ランタイム中のガベージ・コレクションの不確定な動作を減少させるために行われました。

-XgcPrioオプションは、R28.0で引続き使用できます。-XgcPrioのかわりに、-Xgcオプションの使用をお薦めします。

-Xgcの詳細は、Oracle JRockitコマンドライン・リファレンスを参照してください。

2.8.6 ナーサリへのラージ・オブジェクトの割当て

Oracle JRockit JVM R28.0では、オブジェクトのサイズが-XXtlaSize:wasteLimitコマンドライン・オプションで指定された制限の範囲内であれば、ラージ・オブジェクトをナーサリに割り当てます。

この変更により、ナーサリの使用率が改善され、古い領域のガベージ・コレクションの頻度が減少します。

-XXtlaSize:wasteLimitの詳細は、Oracle JRockitコマンドライン・リファレンスを参照してください。

2.8.7 圧縮動作を1つのコマンドライン・オプションで指定

Oracle JRockit R28.0では、新しいコマンドライン・オプション-XXcompactionのサポートにより、圧縮に関連する動作を指定できるようになりました。このオプションでは、圧縮率や最大参照数など、圧縮に関するすべてのパラメータを使用できます。

圧縮に関連する他のすべてのオプションは、R28.0では非推奨です。

-XXcompactionの詳細は、Oracle JRockitコマンドライン・リファレンスを参照してください。

2.8.8 JMXエージェントでの変更点

JRockit JVM R28.0では、ローカル管理サービスは起動後、JVMが終了するまでアクティブです。

前のリリースでは、パフォーマンス・カウンタでメモリー・リークが生じることがあり、メモリー・リークが発生している中でJMXコネクタの新しいアドレスが書き込まれました。このため、JMXクライアントでは、JMXコネクタの間違ったアドレスが読み取られていました。この問題はR28.0で修正されました。

JRockit JVMサーバーとクライアントがファイアウォールを通じてRMI通信を行うには、ファイアウォールの構成に2つのポートが必要です(RMIレジストリおよびRMIサーバー)。前のリリースでは、RMIサーバーのポート番号は、JRockit JVMサーバーでランダムに生成され、ファイアウォールを事前に構成できませんでした。JRockit JVM R28.0では、JMXエージェントを使用して、RMIレジストリとRMIサーバーに同じポート番号を選択できます。したがって、ファイアウォールを通じたRMI通信にデフォルトのJMXエージェントを使用できます。

JMXエージェントのプロパティは、システム・プロパティを使用するか、-Xmanagementコマンドライン・オプションを使用して設定できます。JMXエージェントのシステム・プロパティの詳細は、Oracle JRockitコマンドライン・リファレンスの付録BのJMXエージェントに関連する-Dオプションの項を参照してください。

2.8.9 大きいヒープの圧縮参照

Oracle JRockit JVM R28.0では、様々なヒープ・サイズで最大64GBの圧縮参照をサポートします。圧縮参照のサイズは、-XXcompressedRefsコマンドライン・オプションを使用して、JVMを起動する際に定義できます。

-XXcompressedRefsの詳細は、Oracle JRockitコマンドライン・リファレンスを参照してください。

2.8.10 ヒープ・サイジングでの変更点

JRockit JVM R28.0では、以前と比較して、ヒープ・サイズが速く増加します。また、OutofMemoryエラーが生じる前に、ヒープ・サイズがJavaヒープの最大サイズ(-Xmx)に達したかどうかが確認されます。さらに、64ビット・プラットフォームの-Xmxオプションのデフォルト値は、1GBから3GBに変更されています。

JRockit JVMでは、ヒープが未使用であるか、他のアプリケーションで追加の物理メモリーが必要な場合は、ヒープが縮小されます。

前のリリースでは、大きいヒープが縮小されて小さくなると、JVMがクラッシュすることがありました。この問題はR28.0で修正されました。

2.8.11 クラスおよびコードのガベージ・コレクションでの変更点

Oracle JRockit JVM R28.0では、コードおよびクラスの古いコレクションのガベージ・コレクション中の休止時間がなくなりました。この変更により、R28.0では、コードおよびクラスのガベージ・コレクションは、ほぼコンカレントに行われます。

2.8.12 R28.0の新しいコマンドライン・オプション

Oracle JRockit JVM R28.0では、複数の新しいコマンドライン・オプションがサポートされています。

詳細は、Oracle JRockitコマンドライン・リファレンスの付録Aのコマンドライン・オプションの変更に関する項を参照してください。

2.8.13 R28.0で非推奨のコマンドライン・オプション

Oracle JRockit JVM R28.0で、一部のコマンドライン・オプションが非推奨になりました。

詳細は、Oracle JRockitコマンドライン・リファレンスの付録Aのコマンドライン・オプションの変更に関する項を参照してください。

2.8.14 R28.0でのコマンドライン・オプションのHotSpot形式への変更

Oracle JRockit JVM R28.0では、複数のコマンドライン・オプションの形式がHotSpot形式に変更されています: -XX:+|-option(たとえば、-XX:+UseClassGCなど)。

HotSpot形式に変更されたコマンドライン・オプションのリストは、Oracle JRockitコマンドライン・リファレンスの付録Aのコマンドライン・オプションの変更に関する項を参照してください。