从 Java 堆转储中获取已使用和释放的内存

Posted

技术标签:

【中文标题】从 Java 堆转储中获取已使用和释放的内存【英文标题】:Get used and free memory from Java heap dump 【发布时间】:2015-01-19 11:59:51 【问题描述】:

我有一个 Java 堆转储,我想了解已用堆的大小以及可用的空闲内存量。我正在使用 Eclipse 内存分析器。这可能吗?

【问题讨论】:

Programmatically analyze java heap dump file的可能重复 不,我正在寻找 Runtime.freeMemory() 的等价物。我根本看不出链接的答案是如何提供的。 【参考方案1】:

我不认为堆转储在创建堆转储时会有系统可用内存的信息。堆转储是 Java 虚拟机堆中所有对象在某个时间点的快照。 JVM 软件为所有类实例和数组的堆中的对象分配内存。当不再需要某个对象并且没有对该对象的引用时,垃圾收集器会回收堆内存。通过检查堆,您可以找到创建对象的位置并在源中找到对这些对象的引用。

【讨论】:

以上是关于从 Java 堆转储中获取已使用和释放的内存的主要内容,如果未能解决你的问题,请参考以下文章

释放从核心中排除的内存后核心转储大小增加

程序中内存从哪里来2之堆内存详解

在 Java 中删除部分数组以释放堆内存

关于内存溢出和内存泄漏

使用sun.misc.Cleaner或者PhantomReference实现堆外内存的自动释放

使用sun.misc.Cleaner或者PhantomReference实现堆外内存的自动释放