HotSpot VMでは、SetUnhandledExceptionFilter API(32ビット・システムの場合)またはAddVectoredExceptionHandler API(64ビット・システムの場合)を使用して、初期化中に最上位の例外ハンドラをインストールします。
また、作成される各スレッドのスレッド(内部)起動関数呼出しの周囲に、C++の__try /__exceptブロックを使用してwin32 SEHをインストールします。
最後に、JNI関数の周囲に例外ハンドラをインストールします。
アプリケーションでJNIコード内の構造化例外を処理する必要がある場合は、C++の__try /__except文を使用できます。 ただし、JNIコード内でベクトル化例外ハンドラを使用する必要がある場合、そのハンドラはVMの例外ハンドラに進むためにEXCEPTION_CONTINUE_SEARCHを返す必要があります。
一般に、例外が発生する状況には2つのカテゴリがあります。
例外が予想され、処理されるとき。 例として、前述の(NULLへのアクセスによってEXCEPTION_ACCESS_VIOLATIONが発生し、処理される)暗黙的なNULL処理があります。
予想外の例外。 例として、VMコード、JNIコード、またはネイティブ・コード内で実行されているときのEXCEPTION_ACCESS_VIOLATIONがあります。 これらの場合、このシグナルは予想されていないため、エラー・ログを作成してプロセスを終了するために致命的エラー処理が呼び出されます。