Java Platform, Standard Editionトラブルシューティング・ガイド
目次      

その他のコマンド行オプション

-XXオプションに加えて、ほかにも多くのコマンド行オプションがトラブルシューティング情報を提供できます。このセクションでは、これらのオプションのいくつかについて説明します。

-Xcheck:jniオプション

このオプションは、Java Native Interface (JNI)を使用するアプリケーションの問題を診断する際に役立ちます。ネイティブ・コードにバグが含まれているせいで、HotSpot VMがクラッシュしたり、正しく動作しなかったりする場合があります。

次の例にあるように、-Xcheck:jniオプションは、アプリケーションを起動するコマンド行に追加されます。

java -Xcheck:jni MyApp

-Xcheck:jniオプションを指定すると、VMではJNI関数に渡された引数に対して追加の検証を行います。注意: このオプションにより、すべての無効な引数が見つかること、またはアプリケーション・コード内のロジックのバグが診断されることは保証されていませんが、このような問題の多くを診断するのに役立ちます。

無効な引数が検出されると、VMはアプリケーション・コンソールまたは標準出力にメッセージを出力し、問題のスレッドのスタック・トレースを出力して、VMを強制的に終了させます。

例D-3は、null値を許可しないJNI関数にnull値が間違って渡された例を示しています。

例D-4は、jfieldID引数を必要としているJNI関数に不適切な引数が渡された例を示しています。

次のリストは、-Xcheck:jniオプションが診断に役立つ可能性のある、その他の問題の例を示しています。

  • 間違ったスレッド用のJNI環境が使用される場合

  • 無効なJNI参照が使用される場合

  • 配列以外の型への参照が、配列型を必要とする関数に渡される場合

  • 非staticフィールドIDが、staticフィールドIDを必要とする関数に渡される場合

  • 例外が保留になっている状態で、JNI呼出しが行われる場合

通常、-Xcheck:jniオプションによって検出されるエラーはすべて致命的エラーです(つまり、エラーが出力されて、VMが中止される)。この動作には例外が1つあります。JNI呼出しがJNIクリティカル・リージョン内で行われた場合です。例D-5に示すように、この場合は、次の致命的でない警告メッセージが出力されます。

JNIクリティカル・リージョンは、ネイティブ・コードがJNI関数GetPrimitiveArrayCriticalまたはGetStringCriticalを使用して、Javaヒープ内の配列または文字列への参照を取得するときに作成されます。この参照は、ネイティブ・コードが対応するrelease関数を呼び出すまで保持されます。getとreleaseの間にあるコードはJNIクリティカル・セクションと呼ばれ、その間HotSpot VMは、ガベージ・コレクションの発生を許可する状態にVMを移行できません。一般的な推奨事項は、JNIクリティカル・セクション内部でその他のJNI関数、特にデッドロックを発生させる可能性のあるJNI関数を使用しないことです。したがって、-Xcheck:jniオプションによって出力された上記の警告は、潜在的な問題を示すものであり、必ずしもアプリケーションのバグを示すとはかぎりません。

JNIの詳細は、Javaネイティブ・インタフェースのドキュメントをを参照してください。

-verbose:classオプション

このオプションは、クラスのロードとアンロードのロギングを有効にします。

-verbose:gcオプション

このオプションは、ガベージ・コレクション(GC)情報のロギングを有効にします。これを他のHotSpot VM固有のオプション(-XX:+PrintGCDetails-XX:+PrintGCTimeStampsなど)と組み合わせることで、GCに関する詳細情報を取得できます。その情報の出力には、各GCの前後の世代のサイズ、ヒープの合計サイズ、昇格されたオブジェクトのサイズ、所要時間などが含まれています。

これらのオプションおよびGCの解析とチューニングの詳細は、GC Portalの記事に記載されています。

-verbose:gcオプションは、実行時に管理APIまたはJVM TIを使用して動的に有効にできます。これらのAPIの詳細は、「カスタム診断ツール」を参照してください。

JConsoleモニタリングおよび管理ツールが管理VMに接続されているときは、そのツールでこのオプションを有効または無効にすることもできます。詳細は、JConsoleを参照してください。

-verbose:jniオプション

このオプションは、JNIのロギングを有効にします。JNIまたはネイティブ・メソッドが解決されると、HotSpot VMはアプリケーション・コンソール(標準出力)にトレース・メッセージを出力します。また、ネイティブ・メソッドがJNI RegisterNative関数を使用して登録されるときもトレース・メッセージを出力します。-verbose:jniオプションは、ネイティブ・ライブラリを使用するアプリケーションの問題を診断するのに役立つ可能性があります。

目次      

Copyright © 1993, 2020, Oracle and/or its affiliates. All rights reserved.