关于outofmemory的问题,请高手赐教

yanzt 2000-10-08 03:33:00
我用servlet作一比较复杂的服务程序,程序的流程如下:
在servelt的init方法中初始化几个线程,其中的一个线程是一个socket server,在
程序运行过程中,运行一段时间之后就出现java.lang.outofMemoryError.然后线程就掉下来了错误出在我的socket server线程当中,我仔细检查了程序,每个new都在后面让它等于null,不知道为什么还出现这样的错误?我是在Sun E450上,环境是resin1.1.哪位大侠能提供一点思路?我现在感觉都蒙了。
...全文
134 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
cming 2001-09-23
  • 打赏
  • 举报
回复
建立jvm的时候用-mx 开关来设置jvm能使用的最大heap的大小,默认是64m,即使物理内存再大,jvm也不能用。
如;java -mx12m Application
这个确实我现在也非常担心,根本解决方法还是要保证程序没有内存漏洞.
lhj_fmx 2001-09-23
  • 打赏
  • 举报
回复
gz
kare 2001-09-22
  • 打赏
  • 举报
回复
请大家畅所欲言
kare 2001-09-21
  • 打赏
  • 举报
回复
to:zfff(pighead)非常感谢
我的错误提示:
Exception occurred during event dispatching:

java.lang.OutOfMemoryError

<<no stack trace available>>
程序里没有死循环或死递归调用,因为不是每次运行都会出这个错误,大部分都是正常的
我用的是JB5,编写的是普通的应用程序
请问在那里可以设置程序的调用堆栈大小,或有什么有效的解决办法
zfff 2001-09-21
  • 打赏
  • 举报
回复
1. OutOfMemory不一定是没有内存,检查一下是不是程序里有死循环或死递归调用,后者将使stack overflow,出的错也是OutOfMemory, kare你的错肯定是这个,:)
2. 你可以在程序里定期(比如每次循环结束或处理请求时),打印一下Runtime.getRuntime().freeMemory(),看是不是真的没有内存了。
3. 给VM发-QUIT信号,VM会打印出stack trace和heap状态,在solaris下用kill -QUIT vm_pid就可以,分析生成的报表可以知道看程序在干什么
4. 可以用JOptimizeIt等工具实时看程序的状态,是最有效的方法,可以设置起来比较麻烦。

另外,最基本的是,你在启动resin时,加了-J-Xmx256m之类的选项了吧,否则VM最大只会用64m内存的
kare 2001-09-21
  • 打赏
  • 举报
回复
我也碰到这个问题
但我是作Appliction,该Appliction中有n多个递归调用,急阿……

62,616

社区成员

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

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