繁体   English   中英

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

[英]OutOfMemoryError when loading 100MB file, despite 550MB heap

以下问题:

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

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

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

堆大小和已用堆 (-Xmx550M)

如果我以 750 MB 的堆大小启动应用程序,它工作正常。 你会看到短峰,它工作正常:堆大小和已用堆 (-Xmx750M)

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

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

请帮我!

如果加载 100Mb 的文件,并不意味着内存中用于该文件的结构占用 100M。 例如,如果您有 String,那么它的长度也有 4 个字节的开销。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM