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

问题描述 投票:4回答:2

以下问题:

  1. 我开始开发我的程序(-Xmx550M)
  2. 我加载了一个90 MB的文件

此加载是下图中使用堆的峰值。在此之后,堆大小从130增加到500 MB,尽管只需要110 MB。

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

如果我使用750 MB堆大小启动应用程序,它工作正常。你看到短峰,它工作正常:

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

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

请帮我!

java memory heap out-of-memory heap-memory
2个回答
1
投票

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


1
投票

数据被采样。就在它失败之前它使用了400 MB,然后一段时间之后它尝试使用更多内存,例如600 MB,但这没有显示,因为到下一次采样的时候,OOME已经发生了,现在你的使用率要低得多。

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

© www.soinside.com 2019 - 2024. All rights reserved.