java—如何确定jvm中每个堆代的大小?

4c8rllxm  于 2021-07-09  发布在  Java
关注(0)|答案(2)|浏览(233)

如果我用-xms256m和-xmx512m启动jvm,在任何时候,我都可以确定专门分配给堆的年轻代和终身代的空间量吗?

a2mppw5e

a2mppw5e1#

使用jconsole可以轻松地监视堆大小。在内存选项卡中可以看到不同的gen大小。从图表下拉列表中选择所需的发电机。

dfty9e19

dfty9e192#

我想你的意思是用程序来决定这个。你应该看看 java.lang.management . 特别地, ManagementFactory.getMemoryPoolMXBeans 在这里应该有用。

final List<MemoryPoolMXBeans> pools = ManagementFactory.getMemoryPoolMXBeans();
for (final MemoryPoolMXBean pool : pools) {
  if (pool.getType() == MemoryType.HEAP) {
    final String name = pool.getName();
    final MemoryUsage usage = pool.getUsage();
    if (name.startsWith("Eden")) {
      System.out.println("found eden: " + usage);
    } else if (name.startsWith("Tenured")) {
      System.out.println("found tenured: " + usage);
    }
  }
}

这应该可以使用hotspot jvm工作。
如果您不想通过编程方式来实现这一点,那么visualvm( jvisualvm 在jdk中)允许您监视堆的使用情况以及许多其他漂亮的东西。

(来源:java.net)
但是请注意,visualvm缺乏对特定内存池的即时监控支持;您需要安装jvmstat。然后必须从visualvm的插件管理器安装visualgc插件。
http://puu.sh/ycpx
在安装并重新启动visualvm之后,我们可以通过visualgc选项卡看到堆使用情况的更深入的视图。
http://puu.sh/ycqd

相关问题