An unrecoverable stack overflow has occurred.
#
# An unexpected error has been detected by HotSpot Virtual Machine:
#
# EXCEPTION_STACK_OVERFLOW (0xc00000fd) at pc=0x0be73fa7, pid=2228, tid=3384
#
# Java VM: Java HotSpot(TM) Client VM (1.5.0_12-b04 mixed mode)
# Problematic frame:
# C [SC.dll+0x13fa7]
我搞了好久都不明白这个错误是怎么回事。能帮忙看一下么?log的头文件是这么写的。我试过了,系统的dll调用不会出错,SC.dll是我自己写的,我在VS2008里面调用这个DLL都是正确的。但是在java中就是不能调用这个DLL里面的方法。总是出现上面这个错误。
希望能帮我解答一下!

解决方案 »

  1.   

    使用jmap将运行时内存dump下来,然后用mat插件分析dump的内存中对象的情况,应该能找出问题所在。你说过在vs2008里面调用dll没有问题,这就说明你的本地栈是没有溢出的,那么溢出的必然是你的jvm中的方法栈。你也可以在运行调用这个dll的java类时设置方法栈的大小。
      

  2.   

    我以往的经验,问题总是出在DLL中,Java侧不需要考虑什么。
      

  3.   

    我也这么认为。因为DLL是我自己写的。
    但是,这个dll在我用VC调戏又没有错误的嘛。
    能够正常运行的啊
      

  4.   

    感谢2楼。
    但是 我已经试过了,感觉不是这个问题。
    JVM堆栈大小我也设置了。还是一直说事堆栈溢出
      

  5.   

    我把帖子结了。
    问题原因已经找到了。
    我在C++中使用的是BYTE类型,也就是说用的是unsigned byte。储存数据范围是0-255
    但是java中没有unsigned byre 类型。byte的储存范围是-127-128
    所以导致了堆栈溢出。我正在想办法解决这个问题。
    感谢大家回答