在JNI方法中的GetStringUTFChars期间,具有垃圾字符大小的java中的内存不足错误

时间:2013-09-23 12:25:09

标签: java memory crash java-native-interface

在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。

任何想法,我们如何在这里诊断主要问题? 谢谢你的帮助!

1 个答案:

答案 0 :(得分:1)

如果您的环境支持,请将-verbose:jni传递给java。如果您的JVM支持它,请将-Xcheck:jni传递给java。要查看支持的内容,请转到java -helpjava -X -help