2011-07-03 38 views
16

我一直在一年的Java項目工作。我的代碼幾個月來一直工作正常。幾天前,我將我的Mac上的Java SDK升級到最新版本1.6.0_26(Snow Leopard 10.6.8)。升級後,發生了一些非常奇怪的事情。當我運行一些類,我得到這個錯誤:在Java中的位置無效的內存訪問

位置0x202 RIP的無效的內存訪問= 0x202

但是,如果我-Xint(解釋)他們的工作,緩慢但工作運行它們精細。我在使用按位運算符的類中遇到了這個問題(遊戲「黑白棋」的棋盤)。我不能在這裏放任何代碼,因爲我沒有得到一個錯誤,異常或類似的東西。我只是得到那個令人討厭的消息。

這是正常的代碼不運行沒有-XINT,但它的作品呢?我該怎麼辦?

在此先感謝

+1

非常奇怪。這是否顯示爲例外?編譯錯誤?還有別的嗎?錯誤消息中是否有更多文本?它是否表示行號?程序是否繼續運行,還是炸燬?每次在沒有-Xint的情況下運行代碼時都會發生嗎?您是否在使用Swing作爲GUI?是否有任何潛在的併發問題? –

+2

不顯示爲例外,只是一條消息。它編譯好。這是唯一的消息,有時會顯示不同的內存地址,但只是相同的消息。程序停止運行。我沒有使用Swing,但我正在使用線程。這可能是一個併發問題,但爲什麼在解釋運行時不起作用?這是令人討厭的部分。 –

+3

看起來像虛擬機中的一個錯誤。試着通過減少你的程序來分離問題(刪除你認爲不重要的東西 - 如果它不會再發生,請撤消並嘗試其他部分,如果仍然存在,重複)。然後向任何製作您的JRE的人提交錯誤。 –

回答

4

當JVM開始崩潰那樣,這是一個跡象,表明事情已經打破了JVM的執行模型。

您的應用程序是否包含任何本機代碼?它是否使用任何帶有本機代碼組件的第三方庫?如果兩者都不是這樣,那麼很有可能這是JVM的Apple端口中的一個錯誤。它可能是JIT編譯器錯誤,或者是某些JVM本機代碼庫中的錯誤。

你能做些什麼呢?

不是很多。

  • 通過逐漸削減位來減少您的應用程序,直到您有一個顯示問題的小型測試用例。
  • 基於測試用例,看看是否有一些經驗的方法來避免這個問題。
  • 用測試用例向Apple提交錯誤報告。
+0

不,我的應用程序不包含任何本機代碼,我沒有使用任何第三方庫。我會按照你的建議,讓我們看看我花了多少時間來找到這個bug。謝謝! –

0

此外,請確認您正在構建的GUI上the event dispatch thread並且從不更新任何其他線程的GUI組件。

相關錯誤是非常難以複製的,但與改變時間相關的變化是暗示性的。

4

我剛剛遇到這種情況,事實證明這是與一段代碼序列化一個JSON對象的循環引用本身。我刪除了這個循環,錯誤消失了。我懷疑這與一個內存溢出錯誤有關,現在Mac OSX上的較新的JVM處理方式不同。在這種情況下,我運行的是Mac OSX 10.7。

爲了完整性,我收到的錯誤是:

Invalid access of stack red zone 0x10e586d30 rip=0x10daabba6 
Bus error: 10 

和:

Invalid memory access of location 0x10b655890 rip=0x10a8baba6 
Segmentation fault: 11 
+0

我有一個類似的問題,使用傑克遜。通過使用@JsonIgnore解決了我的問題 – Yevgeniy

0

請檢查/etc/hosts是空的,並驗證它包含以下配置:

127.0.0.1  localhost 
255.255.255.255 broadcasthost 
::1    localhost 
fe80::1%lo0  localhost 
相關問題