可以通过池来检查堆内存使用情况吗?

7

我一直在优化一个程序,该程序存在许多内存泄漏问题。现在漏洞已经消失了,但是偶尔运行主要GC仍会对PS老年代造成很大的影响。我知道可以通过Runtime检查基本的整体内存信息,但是是否可以从程序内部检查PS Eden、PS Survivor和PS Old的使用情况呢?

3个回答

3

这篇文章可以帮助您了解垃圾回收。

您可以编写自定义代码来分析内存,输出将以某种形式呈现。

collection time: 82037
collection count: 116
PS Survivor Space: init = 1703936(1664K) used = 65536(64K) committed = 32047104(31296K) max = 32047104(31296K)
PS Eden Space: init = 10551296(10304K) used = 0(0K) committed = 69795840(68160K) max = 113049600(110400K)
PS Old Gen: init = 27983872(27328K) used = 239432344(233820K) committed = 357957632(349568K) max = 357957632(349568K)
Code Cache: init = 2555904(2496K) used = 19949568(19482K) committed = 20185088(19712K) max = 50331648(49152K)
PS Perm Gen: init = 21757952(21248K) used = 148450536(144971K) committed = 155058176(151424K) max = 268435456(262144K)

好的阅读


0

jstat工具 - Java虚拟机统计监控工具是用于监控JVM使用情况的工具。

请查看此链接


除非我理解有误,这不是我正在寻找的。我说的是从正在运行的程序内部监视它。我知道可以从控制台进行检查的选项。 - SaxSalute

0
你可以使用 Runtime 类来获取堆内存的详细信息。
public class GetHeapMemory {
    public static void main(String[] args) {
        System.out.println(Runtime.getRuntime().freeMemory());
        System.out.println(Runtime.getRuntime().maxMemory());
        System.out.println(Runtime.getRuntime().totalMemory());
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接