问题描述:
我使用JNA调用一个第三方dll(必须要用,且自己无法修改,对方也不给修改的那种)时,该dll中其他方法均正常调用,唯独调用某个固定方法时,JVM直接crash,出现0xC00000FD的错误,这个错误是stack overflow,而且必现!
在vs2017中用C调用该dll也会出现这种现象,不过如果把vs2017的属性-->连接器-->系统-->堆栈保留大小设置为大于16M,即可运行正常。所以猜测是dll的这个方法是有过深的递归或者过大的局部数组。
运行环境
64位jdk1.8;JNA版本是5.12;操作系统是64位 win10;其他硬件环境是10代i7、16G内存。
已尝试过的方案
jvm运行配置参数 Xms4G、Xmx8G,其他参数比如-Xcheck:jni,Xss从128K--50M都试过,XX:StackShadowPages从3--50也都试过,均无法解决问题。
代码中使用“System.setProperty("jna.protected", "true")”,无法解决问题。
此外,jdk也试过11和13,JNA版本也用过目前最新的5.14,JNI方式也试过,均无法解决问题。
在C中起新线程调用那个有问题的方法——不能解决问题。
Java中起新线程指定stacksize为500M——不能解决问题。
2024年7月28日 结题了!
没有回答能解决问题,手动结题不返还悬赏,应该会每个回答者都分点儿吧?
这次提问咋说呢,回答里780%都是“参照GPT”啥的,每5条建议里会有34条我在提问里明确说过尝试过、没用的建议。