同情!!!
堆栈溢出的毛病还没见过,是不是程序中有错误的地方,如过多的函数调用,或者递归次数过多的原因。
你也可以自己释放内存或进行垃圾收集,可以把不用的对象 如 obj ,用 obj=null; 的方式释放它。也可以用 System.gc() 来强行垃圾回收。
我也用Swing 做过,程序出现非法错误而停止,或莫名其妙的变得特别慢,甚至有时死机都是常有的事,唉,换大点的内存,运行前祈祷一下,时间长了习惯了就好了。

解决方案 »

  1.   

    对于 object 的引用,
    用完之后一定要置空。
    a = null;
    保证所有的都为空,此时才可能回收。
    还有,升级到 1.3.1 吧。
      

  2.   

    ram 应该大于 128m 吧。
      

  3.   

    堆栈溢出,out of stack,out of memory,heap太小会产生这种错误,因为jvm的heap默认大小是24m,就算物理内存有余,jvm也无法利用,应该算是jvm的bug.解决方法是启动加开关。
    java -mx128m yourapplication
    当然stack也有默认大小,也可以用加开关,不过一般不会是stack的原因。
    垃圾回收机制也正是我现在非常关心的。不过讨论这个问题超出了你的20分范围。呵呵。
    下一贴讨论吧。
    顺便说一句,chglei(笨笨)兄,说System.gc(),并不能使jvm回收内存。只是进行建议了一个垃圾回收。jvm会调用finalize()方法。但不回收那些没有引用的对象的内存。 
    怎么回收内存,tnnd这个问题困扰了我一段时间了。
      

  4.   

    在外面catch住堆栈溢出的exception,就可以不死了
      

  5.   

    cming,System.gc()应该有效果,我做过一次测试,让程序不断产生对象,5分钟后内存不足,加了System.gc()后坚持了两小时也没事.
    我也对内存回收感兴趣,希望以后多多讨论.
      

  6.   

    to lhj_fmx(逍遥子) 
    用java -mx128m -jar isee.jar启动.
    开关-mx128m 设置jvm能利用的最大heap大小是128m,突破24m的限制,不会影响系统性能.
    运行时间长会死机,这倒有点奇怪.你先说说你的程序是干嘛的,我想应该是你程序的问题了.
    另外我在上海.而且我在公司是不能上网的.
    you can email to:[email protected]_kevin,你可以改进一下做的实验,在大量(没有引用的)对象产生后,调一下System.gc(),你会发现调用前的内存于调用后的内存,是一样的.重载对象的finalize(),你会发现jvm已经调用了这些对象的finalize(),说明System.gc(),只是把符合垃圾回收的对象打上了标志,但没有释放这些对象的内存,就象把垃圾扔倒了垃圾桶,但没有清楚垃圾桶.
    你说System.gc()起倒了作用,没错,那是因为,到了某一个时候,jvm认为到了应该扔垃圾的时候,它才释放没用对象的内存.但这个某一个时候,你没有办法控制.
                               ~~~~~~~~~~ 
      

  7.   

    堆栈溢出与 System.gc() 无关的。
    jvm 在内存不足的时候,会自动调用 System.gc() 回收内存。也许你的程序有内存漏洞(应该要释放的内存引用不能够被释放),或者参考一下 cming 的意见。