この章では、Oracle JRockit R28.xリリースにおける新機能および変更点について説明します。
この付録の内容は以下のとおりです。
この項では、Oracle JRockit JDK R28.3.2での変更点について説明します。
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コマンドライン・リファレンス』を参照してください。
多数のリフレクションやシリアライズを使用するアプリケーションには、ランタイム共有定数プールから不要なデータを除去するために必要なガベージ・コレクション・アクティビティのパフォーマンス・オーバーヘッドがかかっていました。このオーバーヘッドは、新しいコマンドライン・オプション-XX:-UseCPoolGC
で解消できます。このオプションを使用すると、ネイティブ・メモリー・リークが発生することがあります。
このオプションの詳細は、-XX:-UseCPoolGC
(Oracle JRockitコマンドライン・リファレンス)を参照してください。
-Xverbose
オプションに新しいパラメータshutdown
が追加されました。このパラメータを設定すると、JVMの正常な停止をトリガーしたイベントに関する情報が得られます。
詳細は、Oracle JRockitコマンドライン・リファレンスの-Xverbose
の説明を参照してください。
この項では、Oracle JRockit JDK R28.2.3での変更点について説明します。
以前のバージョンのJRockit R28では、-XX:MaxLargePageSize
オプションのデフォルト値はゼロでした。つまり、大規模ページの最大サイズに制限はなく、値はオペレーティング・システムで指定されていました。
JRockit R28.2.3以降のバージョンでは、このオプションのデフォルト値は256MBです。
この項では、Oracle JRockit JDK R28.2.2での変更点について説明します。
以前のバージョンのJRockit R28には、一部のファイナライザがまったく実行されないことがあるという問題がありました。この問題はJRockit R28.2.2で解決されました。JRockitではファイナライザを内部的に使用してクラスの定数プール・データを管理しているため、この問題を修正したことによる副次的作用として、アプリケーションでsun.reflect.ConstantPoolを使用してクラスの定数プール・データのロードとアクセスを絶えず実行する場合は、R28.2.2以降へのアップグレード後にJavaヒープに格納されるファイナライズ可能オブジェクトの数が増加することがあります。このメモリー・サブシステムへの負荷の増加により、パフォーマンスの問題(ヒープ消費量の増加やGCアクティビティの増加など)やOutOfMemoryErrorがごくまれに発生します。このようなパフォーマンスの問題は、アプリケーションを変更して冗長なクラス・ロードを排除すれば、ほぼ確実に解決できます。
この項では、Oracle JRockit JDK R28.2での変更点について説明します。変更点は次のとおりです。
JRockit R28より前のバージョンでは、ガベージ・コレクションが長く行われると、プロファイリング記録中にアプリケーションが休止します。
アプリケーションが長時間休止されることがないように、JRockitフライト・レコーダのヒープ統計イベントが改善されました。
新しいコマンドライン・オプション-XX:ExceptionTraceFilter
および新しい診断コマンドexception_trace_filter
を使用すると、指定した例外タイプに基づいてJVM例外ロギングおよびJRockitフライト・レコーダの例外イベントがフィルタ処理されます。
これらのコマンドの詳細は、『Oracle JRockitコマンドライン・リファレンス』を参照してください。
この項では、Oracle JRockit JDK R28.1.5での変更点を示します。
Oracle JRockit Mission Control 4.0.1を含むOracle JRockit JDK R28.1.5のインストーラでは、デフォルトでJRockit Mission Controlのサンプルがインストールされません。JRockit Mission Controlのサンプルをインストールするには、オプションのコンポーネントデモおよびサンプルを選択する必要があります。
製品のインストールの詳細は、Oracle JRockitインストレーション・ガイドを参照してください。
この項では、JRockit JDK R28.1.0での変更点を示します。変更点は次のとおりです。
genpar
ガベージ・コレクション・モードでは、古い世代でメモリー不足になると、古い領域に昇格されるオブジェクトがナーサリ内で昇格され、これによってナーサリの断片化が生じていました。この状況は昇格の障害と呼ばれています。
R28.1のJRockit JVMでは、メモリー不足が生じている若いコレクションのために古いコレクションが早期にトリガーされ、昇格の障害を防ぎます。
ネットワーク・ソケットからの読取りの際に、新しいコマンドライン・オプション-XX:MaxRecvBufferSize
を使用して、受信バッファ・サイズを制限できます。
このオプションの詳細は、-XX:MaxRecvBufferSize
(Oracle JRockitコマンドライン・リファレンス)を参照してください。
Oracle JRockit R28.1では、-XX:[+|-]CrashOnOutOfMemoryError
コマンドライン・オプションが導入されました。このオプションが有効な場合、メモリー不足エラーが発生すると、JRockit JVMがクラッシュし、クラッシュ・ファイルが作成されます。クラッシュする前のJVMの状態は、オフライン分析のためにコア・ダンプ・ファイルに保存されます。
このオプションの詳細は、-XX:+|-CrashOnOutOfMemoryError
(Oracle JRockitコマンドライン・リファレンス)を参照してください。
このリリースのOracle JRockitでは、コマンドライン・ツールoracle.jrockit.jfr.tools.ConCatRepository
が導入されています。このツールを使用すると、ディスクに書き込まれたがフライト記録として処理およびパッケージされていないJRockitフライト・レコーダ・データを抽出し、そこからフライト記録を作成できます。ディスク上にフライト記録バッファがあり、JVMが終了したが.jfr
ファイルがアセンブルされていないためにフライト記録ファイルが完了しなかった場合、この機能が役立ちます。
このオプションの詳細は、『Oracle JRockitフライト・レコーダ・ラン・タイム・ガイド』を参照してください。
この項では、JRockit JDK R28.0.1での変更点を示します。
JRockit JDK R28.0.0の新機能および変更点を次に示します。これらの変更点は次のとおりです:
JVMのスレッド停止メカニズムが変更されました。前のリリースのJRockit JVMでは、シグナルを送信してスレッドを停止させていました(たとえば、ガベージ・コレクションの実行などのため)。JRockit JVM R28.0では、スレッドが定期的にチェックを行って自動的に停止されます。
この変更による、明白な動作の変更はありませんが、JRockit JVMの管理が簡素化され、エラーが減少します。
HPROFバイナリ形式のヒープ・ダンプを生成して、ヒープ分析ツールで解析できます。-XX:+HeapDumpOnOutOfMemoryError
または-XX:+HeapDumpOnCtrlBreak
コマンドライン・オプションを使用すると、OutOfMemory
発生時にHPROFバイナリ形式のJavaヒープ・ダンプが生成されます。HPROF形式のヒープ・ダンプは、hprof
診断コマンドやJRockit Mission Controlでも生成できます。
詳細は、Oracle JRockit診断およびトラブルシューティング・ガイドのHPROFバイナリ形式のJavaヒープ・ダンプの生成に関する項を参照してください。
コードの生成および最適化で粒度の細かいログを指定できるようになり、すばやい診断およびトラブルシューティングが可能になりました。-Xverbose:opt
および-Xverbose:codegen
オプションで、より詳細な情報が出力されます。詳細は、Oracle JRockitコマンドライン・リファレンスを参照してください。
JRockit JVMの以前のリリースでは、optfileにディレクティブを指定し、-Djrockit.optfile
プロパティを使用してoptfileの名前と場所を示すことで、コードの最適化を制御することができました。
JRockit JVM R28.0では、optfileでのコンパイラ制御ディレクティブの指定形式が拡張および改善され、より細かいレベルでコードの最適化を制御できるようになりました。新しい診断コマンドライン・オプション-XX:OptFile
を使用して、optfileの名前とパスを指定できます。
詳細は、Oracle JRockit診断およびトラブルシューティング・ガイドの最適化ディレクティブの指定に関する項を参照してください。
JRockit JVM R28.0では、-Xgc
コマンドライン・オプションを使用してthroughput
またはpausetime
ガベージ・コレクション・モードを指定すると、指定したモードに関連する方式(デフォルトでは、genpar
およびgencon
)がランタイム全体を通じて使用されます。ランタイム中にガベージ・コレクタが世代別から非世代別に変更されることはありません。
この変更は、ランタイム中のガベージ・コレクションの不確定な動作を減少させるために行われました。
-XgcPrio
オプションは、R28.0で引続き使用できます。-XgcPrio
のかわりに、-Xgc
オプションの使用をお薦めします。
-Xgc
の詳細は、Oracle JRockitコマンドライン・リファレンスを参照してください。
Oracle JRockit JVM R28.0では、オブジェクトのサイズが-XXtlaSize:wasteLimit
コマンドライン・オプションで指定された制限の範囲内であれば、ラージ・オブジェクトをナーサリに割り当てます。
この変更により、ナーサリの使用率が改善され、古い領域のガベージ・コレクションの頻度が減少します。
-XXtlaSize:wasteLimit
の詳細は、Oracle JRockitコマンドライン・リファレンスを参照してください。
Oracle JRockit R28.0では、新しいコマンドライン・オプション-XXcompaction
のサポートにより、圧縮に関連する動作を指定できるようになりました。このオプションでは、圧縮率や最大参照数など、圧縮に関するすべてのパラメータを使用できます。
圧縮に関連する他のすべてのオプションは、R28.0では非推奨です。
-XXcompaction
の詳細は、Oracle JRockitコマンドライン・リファレンスを参照してください。
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オプションの項を参照してください。
Oracle JRockit JVM R28.0では、様々なヒープ・サイズで最大64GBの圧縮参照をサポートします。圧縮参照のサイズは、-XXcompressedRefs
コマンドライン・オプションを使用して、JVMを起動する際に定義できます。
-XXcompressedRefs
の詳細は、Oracle JRockitコマンドライン・リファレンスを参照してください。
JRockit JVM R28.0では、以前と比較して、ヒープ・サイズが速く増加します。また、OutofMemoryエラーが生じる前に、ヒープ・サイズがJavaヒープの最大サイズ(-Xmx
)に達したかどうかが確認されます。さらに、64ビット・プラットフォームの-Xmx
オプションのデフォルト値は、1GBから3GBに変更されています。
JRockit JVMでは、ヒープが未使用であるか、他のアプリケーションで追加の物理メモリーが必要な場合は、ヒープが縮小されます。
前のリリースでは、大きいヒープが縮小されて小さくなると、JVMがクラッシュすることがありました。この問題はR28.0で修正されました。
Oracle JRockit JVM R28.0では、コードおよびクラスの古いコレクションのガベージ・コレクション中の休止時間がなくなりました。この変更により、R28.0では、コードおよびクラスのガベージ・コレクションは、ほぼコンカレントに行われます。
Oracle JRockit JVM R28.0では、複数の新しいコマンドライン・オプションがサポートされています。
詳細は、Oracle JRockitコマンドライン・リファレンスの付録Aのコマンドライン・オプションの変更に関する項を参照してください。
Oracle JRockit JVM R28.0で、一部のコマンドライン・オプションが非推奨になりました。
詳細は、Oracle JRockitコマンドライン・リファレンスの付録Aのコマンドライン・オプションの変更に関する項を参照してください。
Oracle JRockit JVM R28.0では、複数のコマンドライン・オプションの形式がHotSpot形式に変更されています: -XX:+|-
option
(たとえば、-XX:+UseClassGC
など)。
HotSpot形式に変更されたコマンドライン・オプションのリストは、Oracle JRockitコマンドライン・リファレンスの付録Aのコマンドライン・オプションの変更に関する項を参照してください。