Java VM が EXCEPTION_ACCESS_VIOLATION でクラッシュし、hs_err_pidXXX.log ファイルが生成される場合、それは何を示していますか? エラー自体は基本的にヌルポインタ例外です。これは常に JVM のバグが原因ですか? それとも、ハードウェアの誤動作やソフトウェアの競合など、他の原因がありますか?
編集: ネイティブ コンポーネントがあります。これは win32 上の SWT アプリケーションです。
ほとんどの場合、これは VM のバグです。ただし、ネイティブ コード (JNI 呼び出しなど) が原因である可能性があります。
hs_err_pidXXX.log ファイルには、問題が発生した場所に関する情報が含まれているはずです。
ファイル内の「ヒープ」セクションも確認できます。VM のバグの多くは、ガベージ コレクションが原因です (特に古い VM で)。このセクションには、クラッシュ時にガベージが実行されていたかどうかが表示されます。また、このセクションは、ヒープの一部のセクションがいっぱいかどうかを示します (パーセンテージの数値)。
また、VM はメモリ不足の状況でクラッシュする可能性が高くなります。
答え発見!
同じエラーが発生し、pid ログ ファイルの内容を提供した他のユーザーが 64 ビット Windows を実行していることに気付きました。私のように。最後のログ ファイルには、PATH ステートメントが含まれていました。C:\Windows\SysWOW64 が誤って %SystemRoot%\system32 の前にリストされていることがわかりました。修正したら、例外は消えました。
最初にすべきことは、JVM を可能な限り最新のものにアップグレードすることです。
問題を繰り返していただけますか?それともランダムに発生するようですか?最近、JVM があちこちでランダムにクラッシュするという問題が発生しました。ハードウェアの問題であることが判明しました。ドライブを新しいサーバーに配置すると、完全になくなりました。
要するに、JVM がクラッシュすることはありません。上記のポスターで述べたように、JNI を実行していない場合、私の直感はハードウェアに問題があるということです。
何を探すべきか分かっていれば、問題の原因は hs_err* ファイルに記録されます。見てみて、それでもはっきりしない場合は、スタック トレースの最初の 5 行または 10 行とその他の関連情報を投稿することを検討してください (すべてを投稿しないでください。役に立たない情報がたくさんあります -しかし、どの 1%が重要なのかを把握する必要があります:-) )
ブラウザ ウィジェットを使用していて、ブラウザ ウィジェットで JavaScript を実行していますか? その場合、SWT の一部のバージョンには、さまざまな Windows ライブラリのネイティブ コードで JVM がクラッシュする原因となるバグがあります。
(私が開いた) 2 つの例はバグ 217306とバグ 127960です。ただし、SWT で JVM がクラッシュするというバグ レポートは、これら 2 つのバグ レポートだけではありません。
ブラウザ ウィジェットを使用していない場合、これらの提案は役に立ちません。その場合、 JVM クラッシュを引き起こす SWT バグのリストを検索できます。これらのいずれも問題でない場合は、SWT でバグ レポートを開くことを強くお勧めします。
私は長い間使用しており、かなり信頼できる JNLP アプリケーションでも同じ問題を抱えています。Windows 7 から Windows 10 にアップグレードした直後に問題が発生しました。私の調査によると、Win 10 のバグである可能性が最も高いです。
以下は解決策ではありませんが、醜い回避策です。jre/bin ディレクトリにjavaws.exeがあります。/Properties/Compatibilityを右クリックし て Run this program as an administratorにチェックを入れると、JNLP アプリが動作し始めました。
このアプローチはセキュリティ上の問題を引き起こす可能性があることに注意してください。他に選択肢がなく、何をしているのかを 100% 理解している場合にのみ使用してください。