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中各部分代码,最终锁定建立共享内存的代码致使了此问题注释

相关文章
相关标签/搜索