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

java内存溢出
很简单的一段代码,为什么会报

Java code
for(int i = 0 ; i< n ; i ++ ){
                //这段只是查询数据,每次返回结果最多只有1000行
               List list = query.getSql(sql,startResult,size);             
          }



以上代码,第一次、第二次、第三次、第四次都成功,第五次或者第六次以上的时候就会出现
java.lang.OutOfMemoryError : java heap space 错误,这是为什么求神人指导,谢谢。


------解决方案--------------------
比较内存的话,看前几次之间的内存变化也能看出一些
getSql的实现挺关键的
------解决方案--------------------
探讨
我数据库连接关闭了..我把查询方法贴出来,请大神们帮帮忙了.
回答7楼: 每次返回到list后,接着我就把list = null;..这样的话内存应该没有存5K的数据了吧?

我查看过代码,不存在死循环了.

Java code


public List getSQLQuery(String sql,int fisrtResult,int row) throws Dao……

------解决方案--------------------
单步调试才是硬道理,你这样人家谁也看不出来。一般要不你死循环,或不你代码那里数据处理有问题。
------解决方案--------------------
-Xms512m -Xmx1024m -XX:PermSize=512m -XX:MaxPermSize=512m
------解决方案--------------------
看不出来的话,在某些关键节点安插

Runtime类的

freeMemory() 
Returns the amount of free memory in the Java Virtual Machine.

查看到底哪里内存泄露
------解决方案--------------------
OM时把内存dump出来,然后分析dump文件,还有jvm参数设置是否正确
------解决方案--------------------
创建过多的对象

我以前也碰到过的。

设置好JVM参数就行。