JNI建立共享內存致使JVM terminated的問題解決(segfault,shared memory,內存越界,內存泄漏,共享內存)

此問題研究了將近一個月,最終發現因爲JNI不支持C中建立共享內存而致使虛擬機沒法識別這塊共享內存,形成內存衝突,最終虛擬機崩潰。java

注意:JNI的C部分所使用的內存也是由JVM建立並管理的,因此C建立了共享內存,而JVM不知道,產生衝突而崩潰。spa

 

解決方法:日誌

1 採用JNI本身的共享內存建立方式(未詳細調查)內存

2 僅經過JNI讀取其餘C程序(非JNI)建立的共享內存(未調查,應該沒問題)虛擬機

 

查此問題小技巧:技巧

經過/var/log/message文件查出JVM terminated的問題緣由:segfault程序

經過java dump文件查出具體程序運行細節問題:沒法獲取shared memory等日誌內容方法

不斷註釋掉c中各部分代碼,最終鎖定建立共享內存的代碼致使了此問題註釋

相關文章
相關標籤/搜索