【发布时间】:2012-12-01 21:57:27
【问题描述】:
以下问题:
- 我开始我开发的程序 (-Xmx550M)
- 我加载了一个 90 MB 的文件
这个加载是下图中已用堆的峰值。此后,堆大小从 130 MB 增加到 500 MB,尽管只需要 110 MB。
好吧,没问题,烦人,但没关系。但是,如果我现在启动一个保存过程(大约需要 100 MB),Java VM 会因 java.lang.OutOfMemoryError: Java heap space exception 而崩溃。
如果我以 750 MB 的堆大小启动应用程序,它可以正常工作。您会看到短暂的峰值,并且工作正常:
现在我的问题是:为什么我会得到一个 550 MB 堆大小的 OutOfMemoryError?该应用程序只需要 400 MB(在最高峰)!
我不知道如何解决这个问题:(
请帮帮我!
【问题讨论】:
-
附带问题:你是怎么得到这些漂亮照片的?
-
@thatidiotguy 我正在使用 Netbeans Profiler ;)
-
啊啊啊,现在我得看看 Eclipse 是否为我提供了这样的功能。
-
你是如何加载文件的?如果您不是将其作为字节加载,而是作为
String加载,则编码和解码开销(以及 UTF-16 字符的开销)可能会导致这种峰值。 -
@Ph3n1x 我仍然认为您应该运行某种复杂的内存/GC 分析器,以获取更多信息并推动这件事。
标签: java memory out-of-memory heap-memory