我怎么知道用jmx在java堆中每一代的大小

aun*_*low 0 garbage-collection jvm jmx heap-dump

jmap可以知道每一代的大小,但是我想实时监视我的java进程。

使用jmxMemoryMXBean.getHeapMemoryUsage().getUsed()可以获得总堆大小。但是我找不到任何获取方法:

  1. 新(年轻)一代和终身(老)一代的大小;
  2. 伊甸园和新生代中每个幸存者的大小。

Ali*_*ouk 5

您可以使用ManagementFactory.getMemoryPoolMXBeans()。它显示所有内存区域。根据所使用的GC,名称会有所不同。pool.getCollectionUsage().getInit()给出池的初始大小。pool.getName()例如,如果您使用G1 GC,则为“ G1 Eden Space”或“ G1 Old Gen”或“ G1 Survivor Space”。

pool.getUsage().getUsed() 返回该区域的已用内存量。