加载100MB文件时出现OutOfMemoryError,尽管有550MB堆

时间:2012-12-13 22:21:42

标签: java memory heap out-of-memory heap-memory

以下问题:

  1. 我启动了我开发的程序(-Xmx550M)
  2. 我加载了一个90 MB的文件
  3. 此加载是下图中已用堆的峰值。在此之后,堆大小从130增加到500 MB,但只需要110 MB。

    好吧,没问题,烦人,但还可以。但是如果我现在开始一个保存过程(需要大约100 MB),Java VM就会崩溃,因为java.lang.OutOfMemoryError:Java堆空间异常。

    Heap Size and Used Heap (-Xmx550M)

    如果我使用750 MB堆大小启动应用程序,它可以正常工作。你看到短峰,它工作正常: Heap Size and Used Heap (-Xmx750M)

    现在我的问题:为什么我得到一个550 MB堆大小的OutOfMemoryError?该应用程序只需要400 MB(在最高峰)!

    我不知道如何解决这个问题:(

    请帮助我!

2 个答案:

答案 0 :(得分:1)

如果你加载100Mb文件,它还不意味着在内存中用于此文件的结构占用100M。例如,如果你有String,你的长度也有4字节的开销。

答案 1 :(得分:1)

对数据进行采样。就在它失败之前它使用了400 MB,然后一段时间之后它尝试使用更多内存,例如600 MB,但这没有显示,因为在下一个样本拍摄时,OOME已经发生了,现在你的使用率已经低了很多。

简而言之,您的程序可以比图表中看到的更快地使用内存。