在JNI调用期间,我一直在讨论
这个问题“详细错误:#,#Java Runtime内存不足 环境继续。,#本机内存分配(malloc)失败 为GetStringUTFChars分配 18446744073203188961 字节,#“。
我已经验证GetStringUTFChars读取的变量只有3个字符长,所以我确定这是JNI抛出的错误中提供的垃圾值。我已经尝试将Xms和Xmx增加到512m到6g,但这并没有帮助。
来自JVM的堆栈跟踪是:
当前线程(0x000000004bef4800):JavaThread“main” [_thread_in_vm,id = 638,stack(0x0000000040a9b000,0x0000000040b9c000)]
Stack:[0x0000000040a9b000,0x0000000040b9c000], sp = 0x0000000040b9a840,可用空间= 1022k原始帧:(J =已编译 Java代码,j =解释,Vv = VM代码,C =本机代码)V [libjvm.so + 0x861275] VMError :: report_and_die()+ 0x265 V. [libjvm.so + 0x3e5668] report_vm_out_of_memory(char const *,int, unsigned long,char const *)+ 0x68 V [libjvm.so + 0x511450] 无符号+ 0x210。
任何想法,我们如何在这里诊断主要问题? 谢谢你的帮助!
答案 0 :(得分:1)
如果您的环境支持,请将-verbose:jni
传递给java
。如果您的JVM支持它,请将-Xcheck:jni
传递给java
。要查看支持的内容,请转到java -help
和java -X -help
。