我如何知道 java 堆中每一代的大小与 jmx

how can I know size of each generation in java heap with jmx

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

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

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

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

pool.getUsage().getUsed() returns 以及该区域的已用内存量。