2008-09-26 59 views
27

當一個Java虛擬機與一個EXCEPTION_ACCESS_VIOLATION崩潰併產生一個hs_err_pidXXX.log文件時,這表明什麼?錯誤本身基本上是一個空指針異常。它是否總是由JVM中的錯誤引起的,還是有其他原因,例如硬件或軟件故障衝突?Java VM EXCEPTION_ACCESS_VIOLATION的可能原因?

編輯:有一個本地組件,這是一個在win32上的SWT應用程序。

+1

你是否在做任何涉及Java3D之類的本地代碼? – 2008-09-26 15:12:35

回答

14

大多數情況下,這是虛擬機中的一個錯誤。 但它可能是由任何本機代碼(例如,JNI調用)引起的。

hs_err_pidXXX.log文件應包含有關發生問題的位置的一些信息。

您還可以檢查文件中的「堆」部分。許多虛擬機錯誤是由垃圾收集引起的(特別是在較舊的虛擬機中)。本部分應該顯示垃圾是否在崩潰時運行。此部分還顯示,如果堆的某些部分被填充(百分比數字)。

虛擬機在內存不足的情況下崩潰的可能性也要大得多。

+0

如何檢查垃圾收集器是否在崩潰期間運行? – 2016-01-18 07:21:12

1

您應該做的第一件事就是將您的JVM升級到最新版本。

你能重複一下這個問題嗎?或者它似乎是隨機發生的?我們最近出現了一個問題,我們的JVM在隨機時間在各處崩潰。原來這是一個硬件問題。我們把硬盤放在一臺新的服務器上,它完全消失了。

底線,JVM不應該崩潰,如上面提到的海報,如果你沒有做任何JNI,那麼我的直覺是你有硬件問題。

+0

您能否介紹一下確切的問題?我正在努力解決這樣的錯誤,並思考如何檢測硬件問題。 – 2010-03-03 12:30:31

+0

檢測硬件問題的一種方法是查看窗口的「事件查看器」。硬件問題在那裏會有很大的變化。 – frewper 2012-12-28 06:09:40

1

如果您知道要查找什麼,問題的原因將記錄在hs_err *文件中。看一看,如果還不清楚,可以考慮發佈堆棧跟蹤的前5行或10行以及其他相關信息(不要發佈整個事情,那裏有大量信息無法幫助 - 但你必須弄清楚哪個1%重要:-))

0

您是否使用瀏覽器小部件並在瀏覽器小部件中執行javascript?如果是這樣,那麼在某些版本的SWT中會出現一些錯誤,導致JVM在各種Windows庫中的本地代碼中崩潰。

兩個例子(我打開)是bug 217306bug 127960。但是,這兩個錯誤報告並不是SWT中JVM崩潰的唯一錯誤報告。

如果您不使用瀏覽器小部件,那麼這些建議不會對您有所幫助。在這種情況下,您可以搜索SWT bugs causing a JVM crash的列表。如果這些都不是你的問題,那麼我強烈建議你用SWT打開一個錯誤報告。

3

找到了答案!

我有同樣的錯誤,並注意到其他誰提供的pid日誌文件的內容運行64位Windows。就像我。在結束日誌文件中,它包含PATH語句。在那裏我可以看到C:\ Windows \ SysWOW64錯誤地列在%SystemRoot%\ system32之前。一旦我糾正它,例外消失。

0

我有一個長期使用JNLP應用程序的問題,並且相當可靠。從Windows 7升級到Windows 10後,問題立即開始。根據我的調查,這很可能是Win 10中的一個bug。

以下不是解決方案,而是一種醜陋的解決方法。在jre/bin目錄中,有javaws.exe。如果我右鍵點擊/屬性/兼容性並打勾以管理員身份運行該程序,JNLP應用程序開始工作。

請注意,這種方法可能會導致安全問題,只有在沒有其他選擇的情況下才能使用,並且100%知道您在做什麼。