学info的请进,(问题解决了,非常感谢大家的tips,dank e God, danke euch!)
我在用eclipse写一个关于算法的程序,算法中产生的中间值以tree 的形势和 堆栈的形势保存。根据eingabe 的不同,搜索产生的中间值的个数也不同。debug时产生 StackOverFlowException, 首先我想到的是不是有死循环,检查过了没有,其次,检查递归方法,好像也没有逻辑错误。
用一个相对简单的 eingabe 测试, 得到 1800 个中间值, 没有StackOverFlowException,能运行。
又用一个相对复杂的 eingabe 测试, 产生 StackOverFlowException,运行不能通过, debug 运行到 14000 个中间值时,产生 StackOverFlowException。
我是新手,请问,StackOverFlowException 产生有没有可能是系统分配的内存不够? 不过其实 99% 的情况应该是死循环,可是我有的eingabe是可以运行的,所有的测试的eingabe 都是同样格式的,就是int[] 和 String 值封装的对象,问题应该不是出在eingabe的值上,有不像是 算法的逻辑错误。
郁闷ing,求高人给些建议。
ok了, 问题解决了,非常抱歉暂时还不能把代码贴出来,sorry。 正象很多朋友说的那样 堆栈溢出99。9999%的问题是,在 死循环(判断条件不严谨),和 递归过深,
解决方案:
1。 死循环,那就没话说了,找出logische Fehler。
2。 关于递归过深,简单的说就是算法不够优化。解决方法:1,专业一点的方法,就得优化算法,避免过深的递归。 2,或者 偷懒的方法 -Xss 的参数加大,把VM栈深度加大。
谢谢大家。
[ 本帖最后由 @Deutschland 于 2008-9-8 21:27 编辑 ] 如果系统分配的内存不够够的话,报的不是StackOverFlowException错误。如果可以的话,可以贴一段代码出来,大家讨论一下。 这个很像是最开始的参数没有初始化,所以没预留空间,所以最后指针指到别的地方去了。 不是学info的,但是给你们加油啊。ms这个eclipse这几天也在用,但是老是不会用,哈哈 试过设个Exception breakpoint吗? 就是debug的时候,如果出现这个exception就停住的那种。。。
然后分析一下那个时候的Zwischenzustand$考虑$ 不过不知道StackOverFlow能不能抓住。。呵呵,试试吧。。
另外,如果没记错的话,Stack存object的?看看是不是instance生成的太多了。。。
ps: 假设你用的是java。。。$汗$
[ 本帖最后由 krap 于 2008-9-6 10:27 编辑 ] 我用C++的时候也出过这种问题。
我当时就是单纯的打印int[ ]出来,每次打印到1000多时,就溢出。
总而言之,这是个很简单的问题,就是和你分配空间,初始化有关。你试试其他表达方式就能看出了 不应该是程序的问题,可能是JVM的配置问题
可适当提高一下java应用程序的最大可用内存量, 将下列参数填入Eclipse--> Run--> VM arguments
-Xmx512m(最大 512M可用)
java -Xmx512m -Xms64mcom.yourfirma.classname
[ 本帖最后由 BMW-DaMi 于 2008-9-6 15:22 编辑 ] 感谢大家的tips, 我再试试, 非常感谢大家!
ps:不好意思,我作的是java , 忘说了,呵呵
[ 本帖最后由 @Deutschland 于 2008-9-6 22:15 编辑 ] 原帖由 BMW-DaMi 于 2008-9-6 15:17 发表 http://www.dolc.de/forum/images/common/back.gif
不应该是程序的问题,可能是JVM的配置问题
可适当提高一下java应用程序的最大可用内存量, 将下列参数填入Eclipse--> Run--> VM arguments
-Xmx512m(最大 512M可用)
java -Xmx512m -Xms64mcom.yourfirma.cl ...
哦, 我试过了,但还是不行,schade。唉。。。
对了,跟大家探讨一下 eclipse的功能, 以前也大概看到过eclipse中 JVM 最大可配置512M, 我试过了fogendes:
配置 512M ok
配置 1024M 时, 运行不了,break了,提示配置错误。
我又试了配置 700M ,und 900M 也ok。
我的问题是当我配置 700 和900 也就是说> 512M 时, 是不是虽然配置检查通过了,但是JVM其实并没有 达到 > 512M的效果?
请大家解答,谢谢 lZ,我觉得应该是你的算法自身的问题,出现这个问题说明你的算法不够优化,所以在复杂的eingabe的情况下,会出现几何级数的递归调用,从而造成stack overflow, 你还是看看你的自己的算法吧,比如能不能要精简的冒泡算法的替代schleifen,.....从而降低递归的调用。