java.lang.StackOverflowError 怎么办

woshigefantong 2011-11-14 03:09:21
我的程序中有一个递归函数,这个函数本身不是死循环,当数据量不是特别大的时候,比如说100.程序可以得出正常结果
但是当我把数据改成200的时候,就会出现java.lang.StackOverflowError这个异常,我知道这个异常产生的原因是因为我的对递归层数太多。
大家有什么好办法帮我解决这个问题吗?
我看到jvm的栈内存默认只有0.5-1m,有点太小了
我想增加jvm的栈内存,可是不知道应该怎么增加。
我按照网上的说法,修改了我的eclipse.ini文件成这样

# Automatically generated by the VMware Installer - DO NOT REMOVE
-vm
/usr/bin/java
# Automatically generated by the VMware Installer - DO NOT REMOVE
-startup
plugins/org.eclipse.equinox.launcher_1.1.0.v20100507.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.gtk.linux.x86_1.1.1.R36x_v20100810
-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
1000m
--launcher.defaultAction
openFile
-vmargs
-Xms500m
-Xmx1500m

可是问题还是您没有解决,因为据我所知这个方法只是增大了jvm的堆内存,而没有增大栈内存。

大家有什么好办法帮我解决这个问题吗?

最好能有有效的办法增加jvm的栈内存

据说把递归函数改写成循环可以避免这个问题,但是如果改写这个的话太麻烦了。
而且把递归改成循环是不是可以解决问题,这个也不清除。
请大家帮帮我
谢谢拉。
...全文
5276 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
kaukiyou 2011-11-14
  • 打赏
  • 举报
回复
改栈大小要用参数xss,
kouyiSC 2011-11-14
  • 打赏
  • 举报
回复
引用
-Xms384m
-Xmx384m
-Duser.language=en
-XX:PermSize=512M
-XX:MaxPermSize=512M


我的配置,,你最好配置一个最大值。。。增加可伸缩性。。。

引用别人的话
栈溢出了,JVM依然是采用栈式的虚拟机,这个和C和Pascal都是一样的。函数的调用过程都体现在堆栈和退栈上了。

你调用构造函数的“层”太多了,以致于把栈区溢出了。

通常来讲,一般栈区远远小于堆区的,因为函数调用过程往往不会多于上千层,而即便每个函数调用需要1K的空间(这个大约相当于在一个C函数内声明了256个int类型的变量),那么栈区也不过是需要1MB的空间。通常栈的大小是1-2MB的。

通常递归也不要递归的层次过多,很容易溢出
24K純帥 2011-11-14
  • 打赏
  • 举报
回复
http://developer.51cto.com/art/200906/129346.htm
安心逍遥 2011-11-14
  • 打赏
  • 举报
回复
楼主加夜班啊,这么勤奋。还有人这么早回帖

祝你好运啊,这一块不是很懂
若鱼1919 2011-11-14
  • 打赏
  • 举报
回复
-Xss
uastation 2011-11-14
  • 打赏
  • 举报
回复
java.lang.StackOverflowError

栈溢出错误哦..

程序写得不好..可能存在死循环
孟祥月 2011-11-14
  • 打赏
  • 举报
回复
楼主单步调试一下
CherryMs 2011-11-14
  • 打赏
  • 举报
回复
全部改成循环是一定可以解决这个问题的
simimasaiya 2011-11-14
  • 打赏
  • 举报
回复
据说,所有的递归都能用迭代循环代替。
据说,能不用递归就不用递归。
都只是据说,楼主参考。
今天起得很早,感觉不错。
woshigefantong 2011-11-14
  • 打赏
  • 举报
回复
自己先顶一下
请大家帮忙
huntor 2011-11-14
  • 打赏
  • 举报
回复
run configuration

-Xss32m
woshigefantong 2011-11-14
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 kaukiyou 的回复:]

改栈大小要用参数xss,
[/Quote]
可是怎么用xss改栈的大小呢?我是ubuntu下面的用eclipse
能告诉我具体怎么改xss吗?
是再run configuration里面设置
-xss=100 就可以了吗?我的理解对吗

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧