JProfiler

07-06-11 colingo
用JProfiler如何区分内存溢出的种类。到底是因为数据太大,还是对象没有及时释放?
         

banq
2007-06-12 10:19
根据JVM垃圾回收原理啊,你需要深入了解这方面知识,无论“数据太大(只要不超过可用内存),还是对象没有及时释放”,只要对象不被引用,就能被垃圾回收机制回收。

[该贴被banq于2007年06月12日 10:20修改过]

colingo
2007-06-13 09:13
终于有人回复了。

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实例最多。也是最大的。

banq
2007-06-13 09:44
>从30M一下增到60M这样

变大正常,如果执行GC,应该一下子缩小,如果就是执行GC,还是不停增大,就是存在内存泄漏。

colingo
2007-06-13 14:15
执行了GC后,是变小了。说明内在应该没有泄漏。

但是,它仍会报出out of memory ,所以我就不懂了。难道就是因为数据量太大了吗?

猜你喜欢
2Go 1 2 下一页