2009-11-05 68 views
0

如果一個線程設置使用通過JNAJNA調用崩潰的VM

Runtime.getRuntime().addShutdownHook(); 

呼叫的方式關閉掛鉤:

kernel32.CreateToolhelp32Snapshot (0x00000002, 0) 

它崩潰的VM。 如果我調用相同的方法在

WindowListener.windowClosing() 

鉤,呼叫沒有崩潰的VM。

任何想法爲什麼?

我可以發佈部分虛擬機崩潰錯誤報告,如果它可以有任何用處。

編輯:看到VM crash report on pastebin

回答

0

發佈虛擬機崩潰報告應該有所幫助。

0

有關pastebin之類的崩潰報告的一部分,也許有些人可以從中得到一些信息。

好吧,我不知道肯定,但如果你讀了Java文檔在一個微妙的時間 在虛擬機 的生命週期運行addShutdownHook()

關閉掛鉤,因此應編碼防守。 他們應該在 中特別寫成 線程安全,並儘量避免死鎖 。他們也應該 不要盲目地依賴服務即 可能已經註冊了自己的關機 掛鉤,因此可能自己在 關閉的過程。 .... 關閉掛鉤也應完成 他們的工作很快。 ...

這導致我,也許調用這種方法無論是從那些不再出售,或者,這個調用時間太長JVM需要服務的結論。