Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java堆转储有许多巨大的数组_Java_Arrays_Memory_Heap Dump - Fatal编程技术网

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

Java堆转储有许多巨大的数组,java,arrays,memory,heap-dump,Java,Arrays,Memory,Heap Dump,我正在分析我的程序的内存使用情况,我意识到它使用了50MB的内存。。。它可能需要这些做什么?(该程序相当简单,它不是hello world,但只有937行非空白行)。所以我把它放进jhat中,我得到了很多信息,这些信息没有显示所有这些整数、字符和字节数组的引用 下图显示了最大的内存占用: 当你点击class[I,有很多东西看起来像: 在近5000个实例计数中,大部分内存使用在最大的22个数组中(我使用excel计算得出),其中15个大小为2677104。它们似乎是几乎完全为零的数组,如下所示

我正在分析我的程序的内存使用情况,我意识到它使用了50MB的内存。。。它可能需要这些做什么?(该程序相当简单,它不是hello world,但只有937行非空白行)。所以我把它放进jhat中,我得到了很多信息,这些信息没有显示所有这些整数、字符和字节数组的引用

下图显示了最大的内存占用:

当你点击
class[I
,有很多东西看起来像:

在近5000个实例计数中,大部分内存使用在最大的22个数组中(我使用excel计算得出),其中15个大小为2677104。它们似乎是几乎完全为零的数组,如下所示:

根集中的引用链没有提供任何信息。单击“从此处可访问的对象”不会提供任何有用的信息,我认为:

什么在使用这个内存?我在使用以下库: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中运行了完全相同的堆转储,得到了不同的结果


我想知道这些大型阵列是否计划用于GC,而MAT正在过滤掉它们?也许我分析我的程序太早了……”大约97%的时间里:过早优化是万恶之源”-Donald Knuth

你确定你正确关闭了所有资源等吗?@fge我知道logback至少打开了一个日志文件,netty打开了一个频道(这是一个客户端程序)什么时候进行这些转储?在程序启动后,稍后?@fge该转储是在启动后几分钟进行的。它似乎没有“泄漏”,只是使用了大量不必要的内存ID检查大数组是否被弱引用?