[该贴被banq于2007年06月12日 10:20修改过]
banq是这样的,其实就是有一个列表,列表中存很多条目,每点击一个条目,就会产生在个数据集(可能有很多数据)。在各个条目之间进行切换的时候,后台就会报内在溢出的错误。
一开始,我对她说,可能是对象引用没能及时的释放,所以才导致内存溢出。然后,我就用JProfiler查看系统运行时的Memory Views, Heap Walker, VM Telemetry Views。在条目切换时,VM Telemetry Views中显示内存增加的很快,从30M一下增到60M这样。但也不是一直在增长,如果不再切换条目,内增也就稳定下来了。但是如果,多切换几次,就报内存溢出。
在Memory Views查看其中涉及到的DataSet实例,也不多,就几个,而且也不大,就100K左右。我一开始以为,VM Telemetry Views中堆的数量增加,Memory Views也会相应的变大,但是变是变了,幅度非常的小。其中char[] 和 String实例最多。也是最大的。
变大正常,如果执行GC,应该一下子缩小,如果就是执行GC,还是不停增大,就是存在内存泄漏。
但是,它仍会报出out of memory ,所以我就不懂了。难道就是因为数据量太大了吗?
java -xms256m -xmx512m ...
>但是,它仍会报出out of memory
两者矛盾的,GC后变小,是不是恢复到原来的大小,如果增大100,变小50,其实还是增大50,时间长了,能不out of memory ?
另外,在程序中,确定不要无限制一下子读取巨大数据,分批读取。
[该贴被xinying_ge于2007年06月22日 19:18修改过]