Java堆转储有许多巨大的数组

时间:2013-07-02 14:35:44

标签: java arrays memory heap-dump

我正在分析我的程序的内存使用情况,并且我意识到它使用了50 MB的内存......它可能需要它的全部内容? (程序相当简单,它不是hello world,但它只有937个非空白行)。所以我把它放入jhat,我得到了很多信息,没有任何关于所有这些Integer,Character和Byte数组的引用的信息。

这是显示最大记忆力的图像:

Overall memory usage

当您点击class[I时,会出现很多类似的内容:

Unknown reference array examples

在近5000个实例计数中,大部分内存使用量都在最大的22个阵列中(我认为使用excel),其中15个的大小为2677104.而且它们似乎是几乎完全为零的数组,如所见这里:

Example large array

rootset中的引用链没有提供任何内容。点击“从这里可以到达的对象”并没有给出任何有用的东西,我想:

enter image description here

什么是使用这个记忆?我使用以下库:netty 3.6.5,mbassador 1.1.7,guice 3.0,guava 14.0.1,logback 1.0.11,joda-time 2.1,gson 2.2.3。

更新:我将完全相同的堆转储运行到Eclipse MAT中并获得了不同的结果......

MAT dump

我想知道那些大型数组是否已安排用于GC而MAT正在过滤掉它们?也许我过早地分析我的程序......“大约97%的时间:过早优化是所有邪恶的根源” - Donald Knuth

0 个答案:

没有答案