我想找出某个Java进程在特定时间使用的总堆大小是多少,我必须使用jmap。
jmap -heap <pid>的输出给我这样的东西:

附加到进程ID 2899,请稍候...
调试器附加成功。
检测到服务器编译器。
JVM版本是14.2-b01

使用线程局部对象分配。
具有2个线程的并行GC

堆配置:
MinHeapFreeRatio = 40
MaxHeapFreeRatio = 70
MaxHeapSize = 1258291200(1200.0MB)
NewSize = 1048576(1.0MB)
MaxNewSize = 4294901760(4095.9375MB)
原来的大小= 4194304(4.0MB)
NewRatio = 8
SurvivorRatio = 8
PermSize = 16777216(16.0MB)
MaxPermSize = 67108864(64.0MB)

堆使用情况:
PS青年一代
伊甸园空间:
容量= 119013376(113.5MB)
使用的= 117277608(111.84464263916016MB)
免费= 1735768(1.6553573608398438MB)
98.54153536489882已使用
从太空:
容量= 131072(0.125MB)
使用的= 81920(0.078125MB)
免费= 49152(0.046875MB)
使用了62.5%
前往太空:
容量= 131072(0.125MB)
已使用= 0(0.0MB)
免费= 131072(0.125MB)
使用了0.0%
PS老一代
容量= 954466304(910.25MB)
使用的= 80791792(77.04905700683594MB)
免费= 873674512(833.2009429931641MB)
8.46460390077846%使用
PS烫发生成
容量= 57671680(55.0MB)
使用的= 41699008(39.76727294921875MB)
免费= 15972672(15.23272705078125MB)
72.30413263494319%使用

我可以对这些值使用公式来找出已使用的总内存吗?

欢迎提供其他有关如何在Linux上找到它的建议,但建议使用jmap。

谢谢

最佳答案

如果您尝试与jconsole或jvisualvm之类的东西进行比较,并且主窗口显示“总堆使用量”,我发现通过添加“used eden space”和“used ps old generation space”,我得到了与该图所示等效的结果在上述程序中-这就是我现在倾向于继续的事情

10-04 13:08