日期:2014-05-20  浏览次数:20813 次

郁闷我三天的问题
我写的程序运行时间一长就报outOfMemoryError!,我用jprofiler分析发现char[]占了大部分的内存,但是我根本就没有使用char[],这是为什么??gc不能回收char[]吗?程序中用到String,   StringBuffer,byte[]


------解决方案--------------------
Java虚拟机默认分配64M内存,如果你的应用比较大,超出64M内存,Java虚拟机就会抛出OutOfMemoryError,并停止运行。
你去看看这篇文章
http://blog.csdn.net/zzr173/archive/2006/12/11/1438691.aspx

------解决方案--------------------
String使用的太多,要知道String内部是用char[]来实现的。
String一但创建,就不可改变,如果改变(我们看来的改变)的话都是会new新的String
如果经常要改变值的String,建议改成StringBuffer,减少String的从堆上不停分配内存

------解决方案--------------------
String = char[]
事实上很可能是没有关闭连接,那些String 可能是连接里临时的sql语句和得到的数据对象。
------解决方案--------------------
String = char[]

应该是程序内存没有被释放。GC也是有条件的,满足条件的(比如没有被引用)才会被GC掉
------解决方案--------------------
另外stirng=string+string多了的话,会浪费大量的内存,改称stringbuffer
------解决方案--------------------
java -Xmx200m就可以让你的程序使用200M的内存。
------解决方案--------------------
这些 String 可能是被存储在 Stirng[] 里面或者容器对象里面,以致于无法回收。
------解决方案--------------------
学习了
------解决方案--------------------
小声问下:InputStreamReader关了没?
------解决方案--------------------
是否是这句出了问题:
pageBuffer.append(line + "\n ");

LZ可否改为
pageBuffer.append(line).append( "\n ");
试试。