java发生了不可恢复的堆栈溢出
我正在尝试集成Java和C函数,但遇到了一些问题。 我试图以这种方式初始化变量char DataString[32][900];我不断得到“发生了无法恢复的堆栈溢出。” 如果我删除它,程序就不会再崩溃了。 你知道是什么引起的吗
你可以在下面搜索框中键入要查询的问题!
我正在尝试集成Java和C函数,但遇到了一些问题。 我试图以这种方式初始化变量char DataString[32][900];我不断得到“发生了无法恢复的堆栈溢出。” 如果我删除它,程序就不会再崩溃了。 你知道是什么引起的吗
# 1 楼答案
听上去,您(实际上)在Java线程的堆栈上分配了一个大数组(同时调用C方法),这会导致堆栈溢出。这将是“不可恢复的”,因为超出堆栈末尾的写入可能会破坏内存中接下来出现的任何内容1。面对潜在的内存损坏,JVM别无选择,只能退出
如果这个诊断是正确的,那么解决方案就是不要在C代码的堆栈上分配大数据结构!使用
malloc
来分配它们。。。别忘了free
它们,否则你会有一个本机代码内存泄漏需要追踪或者,您可以尝试使用更大的Java线程堆栈:
-Xss<size>
选项更改默认堆栈大小。这可能会影响所有线程李>Thread
构造函数的某些重载有一个参数用于覆盖默认堆栈大小李>1-相比之下,如果纯Java方法导致堆栈溢出,则在代码有机会破坏其他堆栈或数据结构之前,总是检测到堆栈溢出。因此,JVM抛出
StackOverflowError
并为应用程序提供尝试恢复的机会是安全的