コンパイラ異常発生時の自動リカバリ機能はFJVM固有機能です。
Java VMはJavaアプリケーションとして実行されるJavaメソッドに対して必要に応じて自動的にコンパイル処理を行いますが、コンパイル処理を行っている際にコンパイラ内で何らかの異常が発生すると、当該Javaメソッドに対するコンパイル処理だけでなくJava VMとしての動作も異常状態として停止させてしまう場合があります。
FJVMでは、コンパイラ内で何らかの異常が発生した場合に自動的にリカバリ処理を行い、Java VMとしての動作を継続させる機能を「コンパイラ異常発生時の自動リカバリ機能」として実装しています。
本機能によるリカバリ処理が行われた際にコンパイル対象となっていたJavaメソッドは、以降、コンパイル処理の対象とはなりません。当該Javaメソッドについてはコンパイルされず、インタプリタモードのままJavaアプリケーションとしての実行が継続されます。
リカバリ処理実施後に通知を受け取るオプション
本機能はFJVMの内部処理として動作する機能であるため、コンパイラ内で何らかの異常が発生してもリカバリ処理が正常に行われた場合には、外部に対する通知などは何も行いません。リカバリ処理が正常に行われた場合でもコンパイラ内で何らかの異常が発生したことを情報として受け取る場合には、以下のオプションを指定してください。
-XX:+PrintCompilerRecoveryMessage |
リカバリ処理実施後に通知を受け取るオプションを指定した場合の出力形式
CompilerRecovery: Information:The compilation was canceled for method method_name Reason for the cancellation: reason [code:c, addr:xxxxxxxx] |
リカバリ処理の情報が上記の形式で標準出力に出力されます。
コンパイル処理で異常が発生した際にコンパイル対象となっていたJavaメソッドの名前。
コンパイル処理で発生した異常の原因情報。原因情報として以下の項目があります。
assert: コンパイル処理で内部処理矛盾を検出した
error: コンパイル処理で何らかの誤りを検出した
stack overflow: コンパイル処理でスタックオーバーフローを検出した
異常コード。
コンパイル処理で異常が発生した際のアドレス。