以下问题:
此加载是下图中已用堆的峰值。在此之后,堆大小从130增加到500 MB,但只需要110 MB。
好吧,没问题,烦人,但还可以。但是如果我现在开始一个保存过程(需要大约100 MB),Java VM就会崩溃,因为java.lang.OutOfMemoryError:Java堆空间异常。
如果我使用750 MB堆大小启动应用程序,它可以正常工作。你看到短峰,它工作正常:
现在我的问题:为什么我得到一个550 MB堆大小的OutOfMemoryError?该应用程序只需要400 MB(在最高峰)!
我不知道如何解决这个问题:(
请帮助我!
答案 0 :(得分:1)
如果你加载100Mb文件,它还不意味着在内存中用于此文件的结构占用100M。例如,如果你有String,你的长度也有4字节的开销。
答案 1 :(得分:1)
对数据进行采样。就在它失败之前它使用了400 MB,然后一段时间之后它尝试使用更多内存,例如600 MB,但这没有显示,因为在下一个样本拍摄时,OOME已经发生了,现在你的使用率已经低了很多。
简而言之,您的程序可以比图表中看到的更快地使用内存。