我的JVM初始内存为256 MB。最大内存为512 MB。当我收到OutofMemory错误时,创建的HPROF文件大小小于200MB。 (不是所有的时间) (很难分析这些小的HPROF文件。因为HPROF中的所有对象只占用了少量内存)
有人能说出原因吗?
提前致谢
答案 0 :(得分:1)
如果堆的可用空间少于分配新对象所需的空间,则可能发生OutOfMemory错误。因此即使如果 hprof文件将是你的内存的完全副本,它自然会小于最大内存。 但是,hpref 不是内存的精确副本,但是它的状态表示,与线程转储相同并不是CPU状态的精确副本,而是表示它
答案 1 :(得分:0)
如何分析hprof文件?某些工具不显示通过引用保存的内存量。
您应该使用Eclipse Memory Analyzer等分析软件打开并分析hprof文件。在那里,您可以通过打开" Dominator Tree"
找到具有最大内存量的引用的对象。