Java Platform Standard Edition

JRockitからHotSpotへの移行ガイド

リリース9

E90925-02(原本部品番号:E76287-05)

2017年10月

このガイドは、Oracle JRockitをJava HotSpot VMに移行する方法について説明します。

Java Platform, Standard Edition JRockitからHotSpotへの移行ガイド, リリース9

E90925-02

Copyright © 1995, 2017, Oracle and/or its affiliates.  All rights reserved.

このソフトウェアおよび関連ドキュメントの使用と開示は、ライセンス契約の制約条件に従うものとし、知的財産に関する法律により保護されています。ライセンス契約で明示的に許諾されている場合もしくは法律によって認められている場合を除き、形式、手段に関係なく、いかなる部分も使用、複写、複製、翻訳、放送、修正、ライセンス供与、送信、配布、発表、実行、公開または表示することはできません。このソフトウェアのリバース・エンジニアリング、逆アセンブル、逆コンパイルは互換性のために法律によって規定されている場合を除き、禁止されています。

ここに記載された情報は予告なしに変更される場合があります。また、誤りが無いことの保証はいたしかねます。誤りを見つけた場合は、オラクル社までご連絡ください。

このソフトウェアまたは関連ドキュメントを、米国政府機関もしくは米国政府機関に代わってこのソフトウェアまたは関連ドキュメントをライセンスされた者に提供する場合は、次の通知が適用されます。

U.S. GOVERNMENT END USERS: Oracle programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, delivered to U.S. Government end users are "commercial computer software" pursuant to the applicable Federal Acquisition Regulation and agency-specific supplemental regulations. As such, use, duplication, disclosure, modification, and adaptation of the programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, shall be subject to license terms and license restrictions applicable to the programs. No other rights are granted to the U.S. Government.

このソフトウェアもしくはハードウェアは様々な情報管理アプリケーションでの一般的な使用のために開発されたものです。このソフトウェアもしくはハードウェアは、危険が伴うアプリケーション(人的傷害を発生させる可能性があるアプリケーションを含む)への用途を目的として開発されていません。このソフトウェアもしくはハードウェアを危険が伴うアプリケーションで使用する際、安全に使用するために、適切な安全装置、バックアップ、冗長性(redundancy)、その他の対策を講じることは使用者の責任となります。このソフトウェアもしくはハードウェアを危険が伴うアプリケーションで使用したことに起因して損害が発生しても、オラクル社およびその関連会社は一切の責任を負いかねます。

OracleおよびJavaはOracle Corporationおよびその関連企業の登録商標です。その他の名称は、それぞれの所有者の商標または登録商標です。

Intel、Intel Xeonは、Intel Corporationの商標または登録商標です。すべてのSPARCの商標はライセンスをもとに使用し、SPARC International, Inc.の商標または登録商標です。AMD、Opteron、AMDロゴ、AMD Opteronロゴは、Advanced Micro Devices, Inc.の商標または登録商標です。UNIXは、The Open Groupの登録商標です。

このソフトウェアまたはハードウェア、そしてドキュメントは、第三者のコンテンツ、製品、サービスへのアクセス、あるいはそれらに関する情報を提供することがあります。適用されるお客様とOracle Corporationとの間の契約に別段の定めがある場合を除いて、Oracle Corporationおよびその関連会社は、第三者のコンテンツ、製品、サービスに関して一切の責任を負わず、いかなる保証もいたしません。適用されるお客様とOracle Corporationとの間の契約に定めがある場合を除いて、Oracle Corporationおよびその関連会社は、第三者のコンテンツ、製品、サービスへのアクセスまたは使用によって損失、費用、あるいは損害が発生しても一切の責任を負いかねます。

目次

タイトルおよび著作権情報

はじめに

- 対象読者

- ドキュメントのアクセシビリティについて

- 関連ドキュメント

- 表記規則

1 概要

- ヒープ・サイズの設定

2 ガベージ・コレクタ

- ガベージ・コレクションのチューニング

3 実行時

- 実行時オプション

4 コンパイル最適化

- コンパイラ考慮事項

- 重要なHotSpot JITコンパイラ・オプション

5 ロギング

- 詳細ロギング

- HotSpotロギング・オプション

6 コマンドライン・オプション

- HotSpotコマンドライン・オプションへのOracle JRockitのマッピング

- jcmdコマンド

7 一般的な移行の問題および解決策

8 トラブルシューティング・ツール

- Java SEで使用可能なトラブル・シューティング・ツール

はじめに

このガイドはOracle JRockitのユーザーがJava HotSpot VM (Java Platform, Standard Edition)に移行する際に役立ちます。このドキュメントは、Oracle JRockitで使用できるコマンドライン・オプションとツール、およびJava HotSpot VM (HotSpot)にある同等のものについて説明します。

対象読者

このドキュメントの対象読者は、Oracle JRockitを使用し、Java Development Kit (JDK)に移行を予定している開発者およびユーザーです。JDKは、Java Platform, Standard Edition (Java SE)のOracleの実装です。現在のリリースはJava SE 9およびJDK 9です。ただし、このドキュメントに記載された情報のほとんどはJDK 9より前のリリースにも適用できます。

このドキュメントは、Java HotSpot VMのコンポーネントを詳しく理解し、加えてガベージ・コレクション、スレッド、ネイティブ・ライブラリなどの概念についてもある程度理解している読者を対象としています。さらに、Javaアプリケーションが開発および実行されるオペレーティング・システムについて読者が適度に習熟しているものと想定します。

ドキュメントのアクセシビリティについて

Oracleのアクセシビリティについての詳細情報は、Oracle Accessibility ProgramのWebサイト(http://www.oracle.com/pls/topic/lookup?ctx=acc&id=docacc)を参照してください。

Oracleサポートへのアクセス

サポートを購入したオラクル社のお客様は、My Oracle Supportを介して電子的なサポートにアクセスできます。詳細情報はhttp://www.oracle.com/pls/topic/lookup?ctx=acc&id=infoか、聴覚に障害のあるお客様はhttp://www.oracle.com/pls/topic/lookup?ctx=acc&id=trsを参照してください。

関連ドキュメント

他のJDK 9ガイドは、Oracle JDK 9のドキュメントを参照してください。

表記規則

このマニュアルでは次の表記規則を使用します。

表記規則

意味

太字

太字は、操作に関連するGraphical User Interface要素、または本文中で定義されている用語および用語集に記載されている用語を示します。

イタリック

イタリックは、ユーザーが特定の値を指定するプレースホルダ変数を示します。

固定幅フォント

固定幅フォントは、段落内のコマンド、URL、サンプル内のコード、画面に表示されるテキスト、または入力するテキストを示します。

1 概要

このドキュメントでは、Oracle JRockitからJava HotSpot VM (HotSpot)にアプリケーションを移行する簡単なガイドラインを説明します。これには、各JVMシステム・コンポーネントの項が含まれており、ここで、Oracle JRockitとHotSpotの両方にあるこれらのコンポーネントと同等のものについて説明しています。このドキュメントでは、これらのコンポーネントの対応するJVMオプションもリストしています。Oracle JRockit -Xコマンドライン・オプションおよび-XXコマンドライン・オプションの完全なセットをHotSpotで使用できるコマンドライン・オプションとマップする表が含まれます。

注意:

このドキュメントで説明しているツールには、本番で使用する場合に商用ライセンスが必要なものがあります。商用の機能とそれを有効化する方法の詳細は、「Oracle Java SE AdvancedとOracle Java SE Suite」を参照してください。

ヒープ・サイズの設定

HotSpotには、Javaヒープの最初および最大サイズを設定するOracle JRockitと同じオプションがあります。

表1-1 ヒープ・サイズ

オプション

Oracle JRockit

HotSpot

-Xms

ヒープの初期サイズおよび最小サイズを設定します。

ヒープの初期サイズおよび最小サイズを設定します。

-Xmx

ヒープ・サイズの最大サイズを設定します

ヒープ・サイズの最大サイズを設定します

注意:
Oracle JRockitからHotSpotに移行する際、Javaヒープ・サイズは基本的に同じままにしておいてください。

2 ガベージ・コレクタ

このトピックでは、Oracle JRockitおよびHotSpotで使用できるガベージ・コレクションのチューニング・オプションを説明し、それらの機能とパフォーマンスを比較します。

ガベージ・コレクションのチューニング

次の表は、Oracle JRockitおよびHotSpotで使用できる重要なガベージ・コレクション(GC)のチューニング・オプションを示します。

表2-1 ガベージ・コレクタ

Oracle JRockitガベージ・コレクタ

HotSpotガベージ・コレクタ

注意

これらのオプションのいずれかを使用するスループット・コレクタ・セット:

- -Xgc:throughput

- -Xgc:genpar

- -Xgc:singlepar

- -Xgc:parallel

スループット・コレクタ:

—XX:+UseParallelGC - 若い世代と古い世代の両方にパラレル圧縮コレクタを使用

-XX:+UseParallelGC -XX:-UseParallelOldGC - 若い世代にパラレル圧縮コレクタを、古い世代にシリアル・マーク・スイープを使用

パラレルGCスレッド数は、次を使用して制御できます

-XX:ParallelGCThreads=n。

次のオプションのいずれかを使用する待機時間の少ないコレクタ・セット:

-Xgc:pausetime

-Xgc:gencon

-Xgc:singlecon

-XX:+UseG1GC

または

-XX:+UseConcurrentMarkSweepGC

HotSpotでは、2つのコンカレントのコレクタ間で選択できます。

- ガベージファースト(G1)・ガベージ・コレクタは、大容量のメモリーを搭載するマルチプロセッサ・マシンを対象とするサーバー形式のコレクタです。ガベージ・コレクション一時停止時間目標を高い確率で満たしながら、高いスループットを実現します

- コンカレント・マーク・スイープ(CMS)コレクタは、ガベージ・コレクションによる一時停止の短縮が優先され、ガベージ・コレクションとプロセッサ・リソースを共有する余裕があるアプリケーションを対象としています

ガベージファースト・ガベージ・コレクタはデフォルトのコレクタです。

HotSpotに含まれている様々なガベージ・コレクタを理解するには、『Java Platform, Standard Edition HotSpot仮想マシン・ガベージ・コレクション・チューニング・ガイド』のガベージ・コレクションのチューニングの概要に関する項を参照してください。

3 実行時

このトピックでは、HotSpotの実行時の動作を制御する重要なオプションを説明します。

実行時オプション

次の表では、Oracle JRockitとHotSpotの実行時サブシステムの同等のオプションで重要なものを示します。

表3-1 実行時オプション

Oracle JRockit

HotSpot

注意

-XX:+UseLazyUnlocking

-XX:+UseBiasedLocking

UseBiasedLockingは競合しない同期のパフォーマンスを向上します。このオプションはデフォルトで有効化されています。ただし、アプリケーションに競合の多い同期がある場合、UseBiasedLockingオプションを無効化するとパフォーマンスが向上します。

-XlargePages

-XX:+UseLargePages

HotSpotでは、このオプションはSolarisプラットフォーム上でデフォルトで有効化されています。Linuxプラットフォームでは、このオプションはバージョン7u60から無効化されました。

-XX:+UseLargePagesを使用して、デフォルトで無効化されているプラットフォーム上の大きなページの使用を有効化します。ただし、 -XX:+UseLargePagesはメタスペースでの大きなページの使用を有効化していません。このオプションを有効化するには、 -XX:+UseLargePagesInMetaspaceを追加してください。

-XX:MaxLargePageSize

-XX:LargePageSizeInBytes=size

Javaヒープに使用される大きなページの最大サイズ(バイト単位)を設定します。デフォルトでサイズは0に設定され、JVMが大きなページのサイズを自動的に選択することを意味します。

-XXcompressedRefs

-XX:+UseCompressedOops

-Xmxが指定されていないときの64ビットHotSpotプロセスおよび-Xmxの値が32GB未満の場合に、デフォルトで圧縮OOPが使用されます。

4 コンパイル最適化

このトピックでは、コンパイルを最適化するためにOracle JRockitおよびHotSpotで使用可能な様々なコンパイラ・オプションを説明します。

- コンパイラ考慮事項

- 重要なHotSpot JITコンパイラ・オプション

コンパイラ考慮事項

Oracle JRockitとは異なり、HotSpotには2つの異なるJust In Time (JIT)コンパイラ(クライアント(C1とも呼ぶ)およびサーバー(C2とも呼ぶ))に加え、Javaバイト・コード・インタプリタの特徴があります。

この項では、使用可能なコンパイラについて詳しく説明します。

HotSpot VMはデフォルトでJavaバイト・コードを解析します。これは、実行時プロファイリングが「hot」と判断するメソッド(事前に定義された回数分実行されるメソッド)をコンパイル(JITコンパイル)します。JITコンパイラは、クライアントまたはサーバー・コンパイラです。

- クライアント・コンパイラ: メソッドをすばやくコンパイルしますが、サーバー・コンパイラほどは最適化されないマシン・コードを生成します。このコンパイラを使用すると、迅速に起動します。また、このコンパイラでは、少ないメモリー・フットプリントが定常パフォーマンスより重要です。

- サーバー・コンパイラ: このコンパイラは、同じメソッドのコンパイルにより多くの時間がかかります(およびより多くのメモリーを消費します)。ただし、クライアント・コンパイラで生成したコードより最適化されたマシン・コードを生成します。アプリケーションが定常に達した後は、実行時パフォーマンスが向上します。

階層型コンパイルは、クライアント・コンパイラを1番目の階層として使用することで、クライアントVMの起動速度と同じサーバーのVM速度を高速化します。サーバーVMは、インタプリタを使用してコンパイラに渡されるメソッドについてのプロファイリング情報を収集します。階層型方式では、インタプリタに加えてクライアント・コンパイラはメソッドのコンパイル・バージョンを生成し、それらが自身のプロファイリング情報を収集します。コンパイルされたコードはインタプリタよりもはるかに高速なため、このプロファイリング段階の実行パフォーマンスが大きく向上します。サーバー・コンパイラによって生成される最終コードをアプリケーション初期化の早い段階で利用できる可能性があるため、多くの場合クライアントVMでの起動速度を向上させることができます。階層型スキームは、通常のサーバーVMより優れたピーク・パフォーマンスを実現する可能性もあります。これは、プロファイリング段階が高速化することでプロファイリングにかけられる時間が長くなるため、最適化の向上につながるためです。

階層型コンパイルはサーバーVMのデフォルト・モードです。64ビット・モードがサポートされています。階層型コンパイルを手動で有効化するには、-XX:+TieredCompilationフラグを使用します。-XX:-TieredCompilationフラグを使用すると、階層型コンパイルを無効化できます。

Oracle JRockit JVMはJavaメソッドをコンパイルし、最初に起動されたときにJavaメソッドのマシン・コードを生成します。この頻繁に起動されるメソッドのコンパイルされたコードは、オプティマイザ・スレッドによってバックグラウンドで最適化されます。このコードは、メソッドが最初に解析され、後にクライアント・コンパイラ(最適化が少ない)またはサーバー・コンパイラ(最適化が多い)によってコンパイルされるHotSpotとは完全に異なります。

重要なHotSpot JIT コンパイラ・オプション

次の表では、Oracle JRockitおよびHotSpotの重要なコンパイラ・オプションをいくつか示します。

表4-1 JITコンパイラ・オプション

Oracle JRockit

HotSpot

注意

-XnoOpt

-XXoptFile:<file>

HotSpotのJITコンパイルは、Oracle JRockitの最適化と類似していると考えられるため(つまり、どちらの方法でも使用されるのは、プロファイルで「hot」と判断されているメソッドのみのため)、HotSpotでOracle JRockitの-XnoOptと同等のオプションは-Xintです。この技術ではJITコンパイルはまったく実行されず、バイト・コード・インタプリタのみがすべてのメソッドを実行するために使用されます。このコンパイルは、パフォーマンスに影響を与える可能性があります。ただし、-XnoOptをトラブルシューティングおよびOracle JRockitのコンパイラの想定される問題への対処に使用する場合に役立つことがあります。

Oracle JRockitのように、HotSpotもコンパイルからメソッドを除外する方法または特定の最適化を無効化する方法を提供します。

メソッドの最適化で問題が発生した場合、Oracle JRockit VMでXnoOptまたはXXoptFile オプションを使用して、これらのメソッドの最適化を無効化します。ただし、コンパイルを除外するか、これらのメソッドで特定の最適化を無効化する場合、直接、HotSpotオプションに変換しないでください。

特定メソッドのOracle JRockit JVMに見られるのと同じコンパイルまたは最適化の問題が、HotSpot JVMにも存在することはほとんどありません。そのため、HotSpot JVMに移行する際に、まずこれらのオプションを削除することが最適です。

同等のHotSpot JVMオプションは次のとおりです。

- -XX:CompileCommand=command,method[,option]
メソッドで実行するコマンドを指定します。たとえば、Stringクラスの indexOf()メソッドをコンパイルから除外するには、次を使用します。

-XX:CompileCommand=exclude,java/lang/String.indexOf

- -XX:CompileCommandFile=<filename>
JITコンパイラ・コマンドが読み取られるファイルを設定します。デフォルトで、.hotspot_compilerファイルは、JITコンパイラによって実行されるコマンドを格納するために使用されます。

- -XX:CompileOnly=<methods>
コンパイルを制限する必要があるメソッドのリスト(カンマ区切り)を設定します。

- -XX:CompileThreshold=<invocations>
コンパイル前に解析対象メソッドの呼出しの数を設定します。デフォルトで、サーバーJVMでは、JITコンパイラは10,000回の解析対象メソッドの呼出しを実行して、効率的なコンパイルのための情報を収集します。クライアントJVMの場合、デフォルトの設定は1,500回の呼出しです。

特定のメソッドのコンパイルの無効化または遅延に、オプションのCompileCommand、CompileCommandFile、CompileOnlyおよびCompileThresholdを使用できます。

-XX:OptThreads

HotSpot JVMには、最適化スレッドはありません。コンパイルおよび最適化の両方を実行するコンパイラ・スレッドの数は次を使用して設定できます。

-XX:CICompilerCount=<threads>

コンパイルに使用するコンパイラ・スレッド数を設定します。デフォルトで、スレッド数はサーバーJVMの場合に2に設定され、クライアントJVMの場合に1に設定され、階層型コンパイルが使用される場合はコア数まで拡大されます。

-XX:+ReserveCodeMemory

-XX:MaxCodeMemory=<size>

-XX:ReservedCodeCacheSize=<size>

JITでコンパイルされたコードの最大コード・キャッシュ・サイズ(バイト単位)を設定します。このオプションは -Xmaxjitcodesizeと同等です。

なし

-XX:+TieredCompilation

階層化コンパイルの使用を有効にします。このオプションは、JDK 8以降はデフォルトで有効化されています。Java HotSpot Server VMのみが、このオプションをサポートしています。

5 ロギング

このトピックでは、Oracle JRockitおよびHotSpotで使用可能な様々なロギング・オプションを説明します。

- 詳細ロギング

- HotSpotロギング・オプション

詳細ロギング

HotSpotの詳細ロギングは、-verboseオプションを使用して有効化できます。エリア別の詳細な出力を取得するために、このオプションとともに使用できる特定のフラグがいくつかあります。

次の表は、Oracle JRockitで使用可能な様々なロギング・オプションを示し、HotSpotで使用可能なオプションと比較します。

表5-1 詳細ロギング

Oracle JRockit詳細モジュール

HotSpotオプション

注意

alloc

なし

なし

class

-verbose:class

ロードされているクラスに関する情報が示されます。

codegen

なし

なし

compaction

なし

なし

cpuinfo

なし

なし

exceptions

なし

なし

gc

-verbose:gc

各ガベージ・コレクション(GC)イベントに関する情報を表示します。

gcheuristic

なし

なし

gcpause

なし

なし

gcpausetree

なし

なし

gcreport

なし

なし

load

なし

なし

memory

なし

なし

memdbg

なし

なし

opt

なし

なし

refobj

なし

なし

starttime

なし

なし

shutdown

なし

なし

systemgc

なし

なし

timing

なし

なし

なし

-verbose:jni

ネイティブ・メソッドおよびその他のJava Native Interface (JNI)アクティビティの使用に関する情報を表示します。

HotSpotロギング・オプション

これらは、HotSpot JVM内の特定のサブシステムの診断出力を有効にするためにHotSpotで使用できる一般的なロギング・オプションです。

表5-2 ロギング・オプション

HotSpotロギング・オプション

注意

-Xloggc:<filename>

ロギングのために詳細GCイベント情報をリダイレクトする必要があるファイルを設定します。このファイルに書き込まれる情報は、ロギングされた各イベントの前の最初のGCイベントから経過した時間での-verbose:gcの出力と似ています。同じjavaコマンドで両方が指定された場合に、-Xloggcオプションは、-verbose:gcをオーバーライドします。

-XX:LogFile=<path>

ログ・データが書き込まれるパスとファイル名を設定します。

-XX:+PrintCommandLineFlags

コマンドラインに表示される、選択されたJVMフラグの出力を有効にします。

-XX:+PrintNMTStatistics

メモリー追跡が有効になっている場合、JVMで収集されたネイティブ・メモリー追跡データの出力が有効になります

-XX:+LogCompilation

現在の作業ディレクトリ内のhotspot.logというファイルへのコンパイル・アクティビティのロギングを有効にします。-XX:LogFileオプションを使用して、別のログ・ファイル・パスと名前を指定できます。-XX:+LogCompilationオプションは、診断JVMオプションのロックを解除する-XX:UnlockDiagnosticVMOptionsオプションと一緒に使用する必要があります。

-XX:+PrintAssembly

外部disassembler.soライブラリを使用すると、Javaバイト・コードのJITコンパイル結果のアセンブリ・コードの出力が有効になります。このオプションにより、生成されたコードを表示できるため、パフォーマンス問題の診断に役立ちます。このオプションは、診断JVMオプションのロックを解除する-XX:UnlockDiagnosticVMOptionsオプションと一緒に使用する必要があります。

-XX:+PrintCompilation

メソッドがコンパイルされるたびに、コンソールにメッセージを出力することによって、JVMからの詳細診断出力を有効にします。

-XX:+PrintInlining

インライン化の出力の決定を有効にします。このオプションにより、インライン化されるメソッドを確認できます。

-XX:+PrintClassHistogram

Control+Cイベント(SIGTERM)後のクラス・インスタンス・ヒストグラムの出力を有効にします。デフォルトでは、このオプションは無効になっています。

-XX:+PrintConcurrentLocks

[Control]+[C]イベント(SIGTERM)後にjava.util.concurrentロックの出力を有効にします。デフォルトでは、このオプションは無効になっています。

-XX:+G1PrintHeapRegions

割り当てられる領域とG1コレクタによって再生される領域に関する情報の出力を有効にします。

-XX:+PrintAdaptiveSizePolicy

適応型世代サイズ変更に関する情報の出力を有効にします。

-XX:+PrintGC

すべてのGCでメッセージの出力を有効にします。

-XX:+PrintGCApplicationConcurrentTime

最後の一時停止(GCの一時停止など)から経過した時間の出力を有効にします。

-XX:+PrintGCApplicationStoppedTime

一時停止(GCの一時停止など)が続いた時間の出力を有効にします。

-XX:+PrintGCDateStamps

すべてのGCで日付スタンプの出力を有効にします。

-XX:+PrintGCDetails

すべてのGCで詳細メッセージの出力を有効にします。

-XX:+PrintGCTaskTimeStamps

個々のすべてのGCワーカー・スレッド・タスクのタイム・スタンプの出力を有効にします。

-XX:+PrintGCTimeStamps

すべてのGCでのタイムスタンプの出力を有効にします。

-XX:+PrintStringDeduplicationStatistics

詳細な重複除外統計を印刷します。

-XX:+PrintTenuringDistribution

殿堂入りの年齢情報の出力を有効にします。

-Xlog

すべてのJVMコンポーネントに共通のロギング・システムを有効化します。

6 コマンドライン・オプション

このトピックでは、様々なHotSpotコマンドライン・オプションを説明し、Oracle JRockitで使用できるコマンドライン・オプションと比較します。

- HotSpotコマンドライン・オプションへのOracle JRockitのマッピング

- jcmdコマンド

HotSpotコマンドライン・オプションへのOracle JRockitのマッピング

特定のOracle JRockitコマンドライン・オプションは、HotSpotオプションと同様です。

この項では、Oracle JRockitオプションとHotSpotオプションの1対1のマッピングを示すか、またはこのドキュメントの他の項への参照を示します。対応するHotSpot JVMオプションが存在しないOracle JRockitオプションがいくつかあります。また、マップされたHotSpotオプションにもOracle JRockitオプションと完全に同じではないオプションもあり、それらはHotSpot上では若干異なる動作をする可能性があります。

移行時に、Oracle JRockitで使用されているすべてのオプションを類似するHotSpotオプションに単純に変換することはお薦めしません。特にパフォーマンス関連オプションでは、Javaヒープ・サイズおよびガベージ・コレクタ(CMS、G1など)の指定のみから始めることがベスト・プラクティスです。HotSpotの追加チューニングが仮に必要な場合でも、HotSpotで行われた新しいベンチマークおよびプロファイリングに基づいて実行する必要があります。Oracle JRockit構成用のほとんどのJVMレベル・チューニング判断(存在する場合)が、HotSpot構成にも適用できると想定することはお薦めしません。

表6-1 -Xコマンドライン・オプション

Oracle JRockit

HotSpot

注意

-Xbootclasspath

同じ

なし

-Xbootclasspath/a

同じ

なし

-Xbootclasspath/p

同じ

なし

-Xcheck:jni

同じ

なし

-Xdebug

同じ

なし

-Xgc

なし

「ガベージ・コレクションのチューニング」を参照してください。

-XgcPrio (非推奨)

なし

「ガベージ・コレクタ」を参照してください。

-XlargePages

-XX:+UseLargePages

なし

-Xmanagement

なし

なし

-Xms

同じ

なし

-Xmx

同じ

なし

-XnoClassGC (非推奨)

同じ

トラブルシューティング以外には使用しないでください。

-XnoOpt

なし

「コンパイル最適化」を参照してください。

-Xns

同じ

なし

-XpauseTarget

-XX:MaxGCPauseMillis=n

「ガベージ・コレクタ」を参照してください。

-Xrs

同じ

なし

-Xss

同じ

なし

-XstrictFP

なし

なし

-Xverbose

-verbose

「ロギング」を参照してください。

-Xverbosedecorations

なし

「ロギング」を参照してください。

-XverboseLog

なし

「ロギング」を参照してください。

-XverboseTimeStamp

なし

「ロギング」を参照してください。

-Xverify

同じ

なし

表6-2 -XXコマンドライン・オプション

Oracle JRockit

HotSpot

HotSpotオプションに関する注意

-XXaggressive

-XX:+AggressiveHeap

-XX:+AggressiveOpts

-XX:+AggressiveHeapは、Javaヒープ最適化を有効にします。これにより、コンピュータの構成(RAMおよびCPU)に基づいて、メモリーが集中的に割り当てられる長時間実行ジョブに最適になるように、各種パラメータを設定します。デフォルトでは、このオプションは無効になっており、ヒープは最適化されません。

-XX:+AggressiveOptsは、その他の非ヒープ関連の最適化を有効にします。

-XX:AllocChunkSize

関連オプション:

- -XX:AllocateInstancePrefetchLines=<lines>

- -XX:AllocatePrefetchDistance=<size>

- -XX:AllocatePrefetchInstr=<instruction>

- -XX:AllocatePrefetchLines=<lines>

- -XX:AllocatePrefetchStepSize=<size>

- -XX:AllocatePrefetchStyle=<style>

なし

-XX:+|-CheckJNICalls

-Xcheck:jni

なし

-XX:+|-CheckStacks

なし

なし

-XXcompaction

なし

なし

-XXcompactRatio (非推奨)

なし

なし

-XXcompactSetLimit (非推奨)

なし

なし

-XXcompactSetLimitPerObject (非推奨)

なし

なし

-XXcompressedRefs

-XX:-UseCompressedOops

「実行時オプション」を参照してください。

-XX:+|-CrashOnOutOfMemoryError

同じ

なし

-XX:+|-DisableAttachMechanism

同じ

なし

-XXdumpFullState

なし

HotSpot側には、Windowsプラットフォームの致命的なエラー発生時にミニダンプをダンプできるようにするオプションCreateMinidumpOnCrashがあります。

-XXdumpSize

なし

なし

-XX:ExceptionTraceFilter

なし

なし

-XX:+|-ExitOnOutOfMemoryError

同じ

なし

-XX:ExitOnOutOfMemoryErrorExitCode

なし

なし

-XXexternalCompactRatio (非推奨)

なし

なし

-XX:+|-FailOverToOldVerifier

同じ

なし

-XX:+|-FlightRecorder

同じ

アプリケーション実行時のJava Flight Recorder (JFR)の使用を有効にします。これは、-XX:+UnlockCommercialFeaturesオプションを同時に指定する必要がある商用機能です。

-XX:FlightRecorderOptions

同じ

なし

-XX:+|-FlightRecordingDumpOnUnhandledException

なし

なし

-XX:FlightRecordingDumpPath

なし

なし

-XXfullSystemGC

関連オプション:

- -XX:+DisableExplicitGC

- -XX:+ExplicitGCInvokesConcurrent

- -XX:+ExplicitGCInvokesConcurrentAndUnloadsClasses

「ガベージ・コレクタ」を参照してください。

-XXgcThreads

関連オプション:

- -XX:ParallelGCThreads=<threads>

- -XX:ConcGCThreads=<threads>

「ガベージ・コレクタ」を参照してください。

-XX:GCTimePercentage

なし

なし

-XX:GCTimeRatio

なし

なし

-XXgcTrigger

関連オプション:

- -XX:CMSInitiatingOccupancyFraction=<percent>

- -XX:CMSTriggerRatio=<percent>

「ガベージ・コレクタ」を参照してください。

-XX:+|-HeapDiagnosticsOnOutOfMemoryError

-XX:OnOutOfMemoryError=<command>を使用することで同じものを取得可能

例:

java -XX:OnOutOfMemoryError="jmap -heap %p" JavaProgram

-XX:HeapDiagnosticsPath

なし

なし

-XX:+|-HeapDumpOnCtrlBreak

なし

なし

-XX:+|-HeapDumpOnOutOfMemoryError

同じ

なし

-XX:HeapDumpPath

同じ

なし

-XX:HeapDumpSegmentSize

なし

なし

-XXheapParts (非推奨)

なし

なし

-XXinternalCompactRatio (非推奨)

なし

なし

-XX:+|-JavaDebug

なし

なし

-XXkeepAreaRatio

XX:SurvivorRatio=<ratio>

Eden領域サイズとSurvivor領域サイズの比率を設定します。デフォルトでは、このオプションは8に設定されます。

スループット・ガベージ・コレクタによって使用されている初期Survivor領域率を設定するための、別のオプション-XX:InitialSurvivorRatio=ratioがあります。適応型のサイズ変更は、-XX:+UseParallelGCおよび-XX:+UseParallelOldGCオプションを使用して、スループット・ガベージ・コレクタによってデフォルトで有効にされ、Survivor領域は、初期値から、アプリケーションの動作に従ってサイズ変更されます。

-XXlargeObjectLimit (非推奨)

なし

なし

-XX:MaxCodeMemory

-XX:ReservedCodeCacheSize=<size>

「コンパイル最適化」を参照してください。

-XX:MaxDirectMemorySize

同じ

なし

-XX:MaximumNurseryPercentage

-XX:NewRatio=<ratio>

Young世代のサイズとOld世代のサイズの比率を設定します。デフォルトでは、このオプションは2に設定されます。

-XX:MaxLargePageSize

-XX:LargePageSizeInBytes=<size>

「実行時オプション」を参照してください。

-XX:MaxRecvBufferSize

なし

なし

-XXminBlockSize (非推奨)

なし

なし

-XXnoSystemGC

関連オプション:

- -XX:+DisableExplicitGC

- -XX:+ExplicitGCInvokesConcurrent

- -XX:+ExplicitGCInvokesConcurrentAndUnloadsClasses

「ガベージ・コレクタ」を参照してください。

-XX:OptThreads

-XX:CICompilerCount=threads

「コンパイル最適化」を参照してください。

-XX:+|-RedoAllocPrefetch

関連オプション:

- -XX:AllocateInstancePrefetchLines=<lines>

- -XX:AllocatePrefetchDistance=<size>

- -XX:AllocatePrefetchInstr=<instruction>

- -XX:AllocatePrefetchLines=<lines>

- -XX:AllocatePrefetchStepSize=<size>

- -XX:AllocatePrefetchStyle=<style>

なし

-XX:+|-ReserveCodeMemory

-XX:ReservedCodeCacheSize=<size>

「コンパイル最適化」を参照してください。

-XX:SegmentedHeapDumpThreshold

なし

なし

-XXsetGC (非推奨)

なし

なし

-XX:+|-StrictFP

なし

なし

-XX:StartFlightRecording

同じ

なし

-XXtlaSize

XX:TLABSize=<size>

スレッドローカル割当てバッファ(TLAB)の初期サイズ(バイト単位)を設定します。このオプションが0に設定されている場合、JVMは初期サイズを自動的に選択します。

-XX:TreeMapNodeSize

なし

なし

-XX:+|-UseAdaptiveFatSpin

なし

なし

-XX:+|-UseAllocPrefetch

関連オプション:

- -XX:AllocateInstancePrefetchLines=<lines>

- -XX:AllocatePrefetchDistance=<size>

- -XX:AllocatePrefetchInstr=<instruction>

- -XX:AllocatePrefetchLines=<lines>

- -XX:AllocatePrefetchStepSize=<size>

- -XX:AllocatePrefetchStyle=<style

なし

-XX:+|-UseCallProfiling

-XX:+UseTypeProfile

なし

-XX:+|-UseCfsAdaptedYield

なし

なし

-XX:+|-UseClassGC

-Xnoclassgc

クラスのガベージ・コレクション(GC)を無効にします。これによりGC時間が節約され、アプリケーション実行時の割込みが短くなります。

起動時にXnoclassgcを指定すると、GC時にアプリケーションのクラス・オブジェクトがそのままの状態にされ、常にアクティブであるとみなされます。

-XX:+|-UseCPoolGC

なし

なし

-XX:+|-UseFastTime

なし

なし

-XX:+|-UseFatSpin

なし

なし

-XX:+|-UseLargePagesFor[Heap|Code]

- -XX:+UseLargePages

- -XX:+UseLargePagesInMetaspace

「実行時オプション」を参照してください。

-XX:+|-UseLazyUnlocking

-XX:+UseBiasedLocking

「実行時オプション」を参照してください。

-XX:+|-UseLockProfiling

なし

なし

-XX:+|-UseLowAddressForHeap

なし

直接対応するオプションはHotSpotにはありませんが、HeapBaseMinAddressオプションを使用して低ヒープ・ベースを明示的に指定することはできます。

-XX:+|-UseNewHashFunction

同じ

JDK 5のみに適しています。このオプションはJDK 6以降のバージョンで使用しないでください。

-XX:+|-UseThreadPriorities

同じ

HotSpotでは、このオプションはWindowsプラットフォーム上でデフォルトで有効化されています。JRockitでは、このオプションはWindowsプラットフォーム上でデフォルトで有効化されています。

表6-3 診断コマンド

Oracle JRockit

HotSpot

check_flightrecording

JFR.check

command_line

VM.command_line

dump_flightrecording

JFR.dump

exception_trace_filter

なし

force_crash

なし

heap_diagnostics

GC.heap_info

help

help

hprofdump

GC.heap_dump

kill_management_server

ManagementAgent.stop

list_vmflags

VM.flags

lockprofile_print

なし

lockprofile_reset

なし

memleakserver

なし

print_class_summary

GC.class_stats

print_exceptions

なし

print_memusage

VM.native_memory

print_object_summary

GC.class_histogram

print_threads

Thread.print

print_utf8pool

VM.stringtableおよびVM.symboltable

print_vm_state

VM.info

runsystemgc

GC.run

set_filename

なし

start_flightrecording

JFR.start

start_management_server

ManagementAgent.start

ManagementAgent.start_local

stop_flightrecording

JFR.stop

stop_management_server

ManagementAgent.stop

timestamp

なし

verbosity

なし

version

VM.version

jcmdコマンド

次に、jcmdコマンドのリストを示します。

- JFR.configure

- JFR.stop

- JFR.start

- JFR.dump

- JFR.check

- VM.log

- VM.native_memory

- VM.check_commercial_features

- VM.unlock_commercial_features

- ManagementAgent.status

- ManagementAgent.stop

- ManagementAgent.start_local

- ManagementAgent.start

- Compiler.directives_clear

- Compiler.directives_remove

- Compiler.directives_add

- Compiler.directives_print

- VM.print_touched_methods

- Compiler.codecache

- Compiler.codelist

- Compiler.queue

- VM.classloader_stats

- Thread.print

- JVMTI.data_dump

- JVMTI.agent_load

- VM.stringtable

- VM.symboltable

- VM.class_hierarchy

- GC.class_stats

- GC.class_histogram

- GC.heap_dump

- GC.finalizer_info

- GC.heap_info

- GC.run_finalization

- GC.run

- VM.info

- VM.uptime

- VM.dynlibs

- VM.set_flag

- VM.flags

- VM.system_properties

- VM.command_line

- VM.version help

コマンドの完全なリストは、Java Platform, Standard Editionツール・リファレンスのガイドのjcmdコマンドに関する項を参照してください。

7 一般的な移行の問題および解決策

このトピックでは、Oracle JRockitからHotSpotへ移行する際に起こる一般的な問題とその解決策を説明します。

次の表では、移行プロセスで起こりうる一般的な問題とそれを解決するための方法を示します。

表7-1 移行の問題および解決策

問題点

Oracle JRockitオプション

HotSpotオプション

注意

JDK 7に移行した後のパフォーマンスの悪化。

-XX:ReservedCodeCacheSize=1gの使用により問題が解決

-XX:+ReserveCodeMemory

デフォルト値:

- -XX:+UseLargePagesForCodeを使用する場合: 64MB

- -XX:-UseLargePagesForCodeを使用する場合: 1024MB

-XX:ReservedCodeCacheSize

ほとんどのプラットフォームでデフォルト値は48 MB。

HotSpot VMでは、いくつかのケースでReservedCodeCacheSize値を増やすと(たとえば、-XX:ReservedCodeCacheSize=1g)パフォーマンスの著しい向上が見られます。

HotSpotに切り替えた後、ロック/ロック解除イベントの増加が見られました。

UseBiasedLockingの無効化が全体パフォーマンスの向上に役立ちました。

-XX:-UseLazyUnlocking (無効化)

-XX:-UseBiasedLocking (無効化)

UseBiasedLockingオプションは競合しない同期のパフォーマンスを向上させます。このオプションはデフォルトで有効化されています。

ただし、アプリケーションに競合の多い同期がある場合、UseBiasedLockingを無効化するとパフォーマンスが向上します。

HotSpotに移行した後にロック/同期によるパフォーマンスの問題に直面している場合、このオプションを無効化するとパフォーマンスがいくらか向上する可能性があります。

8 トラブルシューティング・ツール

このトピックでは、Java SEで使用可能な様々なトラブルシューティング・ツールを説明し、それらの機能をOracle JRockitで使用できるツールと比較します。

Java SEで使用可能なトラブル・シューティング・ツール

次の表は、Java SEでトラブルシューティングに使用できる様々なツールを示します。これらのツールには、Oracle JRockitからHotSpot VMに移行され、同等の機能を提供しているものもあります。

表8-1 ツール

Java SEトラブルシューティング・ツール

注意およびリソース

Javaフライト・レコーダおよびMission Control

『Java Platform, Standard Editionラブルシューティング・ガイド』の次のピックを参照してください。

- Java Mission Control

- Javaフライト記録とは

- フライト記録の作成方法

- フライト記録の検査

- Javaフライト・レコーダを使用したメモリー・リークのデバッグ

サービスアビリティ・エージェント

2012年7月発行の『Java Magazine』のサービスアビリティ・エージェントに関する次の記事を参照してください。
HotSpotの秘宝

JConsole

次を参照してください
『Java Platform, Standard Editionラブルシューティング・ガイド』のJConsoleでのトラブルシューティングに関する項

jcmdコマンド・ユーティリティ

次を参照してください。

- jcmdコマンド・ユーティリティを使用したトラブルシューティング 『Java Platform, Standard Editionラブルシューティング・ガイド』

- jcmd Java Platform, Standard Editionツール・リファレンス

JDKユーティリティ

JDKとバンドルされている便利なユーティリティは次に示すように多数あります。『Java Platform, Standard Editionラブルシューティング・ガイド』の次のピックを参照してください。

- jdb

- jinfo

- jmap

- jps

- jstack

- jstat

- jrunscript

- jsadebugd

- jstatd

visualgc

次を参照してください
『Java Platform, Standard Editionラブルシューティング・ガイド』のvisualgcツールに関する項。

ネイティブ・メモリー追跡ツール

『Java Platform, Standard Edition Java仮想マシン・ガイド』のネイティブ・メモリーの追跡に関する項を参照してください。

Oracleの法律上の注意点

コピーライト

Copyright © 1994-2018, Oracle and/or its affiliates. All rights reserved.

ライセンス制約の保証と結果的に生じる損害の免責

このソフトウェアおよび関連ドキュメントの使用と開示は、ライセンス契約の制約条件に従うものとし、知的財産に関する法律により保護されています。ライセンス契約で明示的に許諾されている場合もしくは法律によって認められている場合を除き、形式、手段に関係なく、いかなる部分も使用、複写、複製、翻訳、放送、修正、ライセンス供与、送信、配布、発表、実行、公開または表示することはできません。このソフトウェアのリバース・エンジニアリング、逆アセンブル、逆コンパイルは互換性のために法律によって規定されている場合を除き、禁止されています。

保証免責

ここに記載された情報は予告なしに変更される場合があります。また、誤りが無いことの保証はいたしかねます。誤りを見つけた場合は、オラクルまでご連絡ください。

制限付権利について

このソフトウェアまたは関連ドキュメントを、米国政府機関もしくは米国政府機関に代わってこのソフトウェアまたは関連ドキュメントをライセンスされた者に提供する場合は、次の通知が適用されます。

U.S. GOVERNMENT END USERS: Oracle programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, delivered to U.S. Government end users are "commercial computer software" pursuant to the applicable Federal Acquisition Regulation and agency-specific supplemental regulations. As such, use, duplication, disclosure, modification, and adaptation of the programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, shall be subject to license terms and license restrictions applicable to the programs. No other rights are granted to the U.S. Government.

危険な用途への使用について

このソフトウェアまたはハードウェアは様々な情報管理アプリケーションでの一般的な使用のために開発されたものです。このソフトウェアまたはハードウェアは、危険が伴うアプリケーション(人的傷害を発生させる可能性があるアプリケーションを含む)への用途を目的として開発されていません。このソフトウェアまたはハードウェアを危険が伴うアプリケーションで使用する際、安全に使用するために、適切な安全装置、バックアップ、冗長性(redundancy)、その他の対策を講じることは使用者の責任となります。このソフトウェアまたはハードウェアを危険が伴うアプリケーションで使用したことに起因して損害が発生しても、Oracle Corporationおよびその関連会社は一切の責任を負いかねます。

商標と登録商標について

OracleおよびJavaはオラクルおよびその関連会社の登録商標です。その他の社名、商品名等は各社の商標または登録商標である場合があります。

Intel、Intel Xeonは、Intel Corporationの商標または登録商標です。すべてのSPARCの商標はライセンスをもとに使用し、SPARC International, Inc.の商標または登録商標です。AMD、Opteron、AMDロゴ、AMD Opteronロゴは、Advanced Micro Devices, Inc.の商標または登録商標です。UNIXは、The Open Groupの登録商標です。

第三者のコンテンツ、製品、サービスに対する免責事項

このソフトウェアまたはハードウェア、そしてドキュメントは、第三者のコンテンツ、製品、サービスへのアクセス、あるいはそれらに関する情報を提供することがあります。適用されるお客様とOracle Corporationとの間の契約に別段の定めがある場合を除いて、Oracle Corporationおよびその関連会社は、第三者のコンテンツ、製品、サービスに関して一切の責任を負わず、いかなる保証もいたしません。適用されるお客様とOracle Corporationとの間の契約に定めがある場合を除いて、Oracle Corporationおよびその関連会社は、第三者のコンテンツ、製品、サービスへのアクセスまたは使用によって損失、費用、あるいは損害が発生しても一切の責任を負いかねます。

Pre-General Availability (一般提供前)版のドキュメントについて

このドキュメントがPre-General Availability (一般提供前)版の場合:

このドキュメントはPre-General Availability (一般提供前)版であり、デモおよび暫定使用のみを目的としたものです。このソフトウェアを使用するハードウェアに限定するものではありません。Oracle Corporationおよびその関連会社は、このドキュメントに関して一切の責任を負わず、いかなる保証もいたしません。また、このドキュメントを使用したことによって損失、費用、あるいは損害が発生しても、一切の責任を負いかねます。

非公開のPre-General Availability (一般提供前)版のドキュメントについて

このドキュメントが非公開のPre-General Availability (一般提供前)版の場合:

このドキュメントに含まれる情報は、情報の共有のみを目的としたものであって、顧客諮問委員会(Customer Advisory Board)のメンバーとしてのお客様の立場でのみ、またはお客様のPre-General Availability Trial Agreement (Pre-GAトライアル契約)のみに従って検討されるべきものとします。マテリアル、コード、または機能の提供をお約束するものではなく、購入決定を行う際の判断材料とすべきではありません。このドキュメントに記載されている特徴または機能の開発、リリースおよび時期については、オラクルの裁量により決定されます。

このドキュメントには、ソフトウェアまたは印刷物などの形式を問わず、オラクルが独占的な権利を有する財産的情報が含まれています。この機密資料へのアクセスと使用は、お客様とオラクルとの間で締結され、お客様が遵守に同意した、Oracle Master Agreement、Oracle License and Oracle Services Agreement (オラクル・ライセンスおよびサービスに関する契約書)、Oracle Partner Network Agreement、Oracle Distribution Agreementまたはその他のライセンス契約の条件に従うものとします。このドキュメントとその内容の開示、コピー、複製および配布には、オラクルによる事前の承諾を必要とします。このドキュメントはライセンス契約の一部となるものではなく、オラクルおよびその子会社や関連会社との契約を構成するものではありません。

ドキュメントのアクセシビリティ

オラクルのアクセシビリティについての詳細情報は、Oracle Accessibility ProgramのWebサイト(http://www.oracle.com/pls/topic/lookup?ctx=acc&id=docacc)を参照してください。

Oracle Supportへのアクセス

サポートをご契約のお客様には、My Oracle Supportを通して電子支援サービスを提供しています。詳細情報は(http://www.oracle.com/pls/topic/lookup?ctx=acc&id=info)か、聴覚に障害のあるお客様は(http://www.oracle.com/pls/topic/lookup?ctx=acc&id=trs)を参照してください。