同情!!!
堆栈溢出的毛病还没见过,是不是程序中有错误的地方,如过多的函数调用,或者递归次数过多的原因。
你也可以自己释放内存或进行垃圾收集,可以把不用的对象 如 obj ,用 obj=null; 的方式释放它。也可以用 System.gc() 来强行垃圾回收。
我也用Swing 做过,程序出现非法错误而停止,或莫名其妙的变得特别慢,甚至有时死机都是常有的事,唉,换大点的内存,运行前祈祷一下,时间长了习惯了就好了。
堆栈溢出的毛病还没见过,是不是程序中有错误的地方,如过多的函数调用,或者递归次数过多的原因。
你也可以自己释放内存或进行垃圾收集,可以把不用的对象 如 obj ,用 obj=null; 的方式释放它。也可以用 System.gc() 来强行垃圾回收。
我也用Swing 做过,程序出现非法错误而停止,或莫名其妙的变得特别慢,甚至有时死机都是常有的事,唉,换大点的内存,运行前祈祷一下,时间长了习惯了就好了。
用完之后一定要置空。
a = null;
保证所有的都为空,此时才可能回收。
还有,升级到 1.3.1 吧。
java -mx128m yourapplication
当然stack也有默认大小,也可以用加开关,不过一般不会是stack的原因。
垃圾回收机制也正是我现在非常关心的。不过讨论这个问题超出了你的20分范围。呵呵。
下一贴讨论吧。
顺便说一句,chglei(笨笨)兄,说System.gc(),并不能使jvm回收内存。只是进行建议了一个垃圾回收。jvm会调用finalize()方法。但不回收那些没有引用的对象的内存。
怎么回收内存,tnnd这个问题困扰了我一段时间了。
我也对内存回收感兴趣,希望以后多多讨论.
用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认为到了应该扔垃圾的时候,它才释放没用对象的内存.但这个某一个时候,你没有办法控制.
~~~~~~~~~~
jvm 在内存不足的时候,会自动调用 System.gc() 回收内存。也许你的程序有内存漏洞(应该要释放的内存引用不能够被释放),或者参考一下 cming 的意见。