【发布时间】:2019-08-25 02:01:21
【问题描述】:
jmap可以知道每一代的大小,但我想实时监控我的java进程。
使用jmx,MemoryMXBean.getHeapMemoryUsage().getUsed()可以得到总堆大小。但我找不到任何方法得到:
- 新(年轻)代和终身(老)代的规模;
- 伊甸园的大小和新一代的每个幸存者。
【问题讨论】:
标签: garbage-collection jvm jmx heap-dump
jmap可以知道每一代的大小,但我想实时监控我的java进程。
使用jmx,MemoryMXBean.getHeapMemoryUsage().getUsed()可以得到总堆大小。但我找不到任何方法得到:
【问题讨论】:
标签: garbage-collection jvm jmx heap-dump
您可以使用ManagementFactory.getMemoryPoolMXBeans()。它显示了所有的内存区域。根据您使用的 GC,名称会有所不同。 pool.getCollectionUsage().getInit() 给出了池的初始大小。如果您使用 G1 GC,pool.getName() 是例如“G1 Eden Space”或“G1 Old Gen”或“G1 Survivor Space”。
pool.getUsage().getUsed() 还返回该区域的已用内存量。
【讨论】:
pool.getCollectionUsage().getUsed() 总是得到0。 pool.getUsage().getUsed() 有效。