如何确定JVM中每个堆代的大小?

时间:2012-08-25 07:36:35

标签: java jvm heap

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

2 个答案:

答案 0 :(得分:8)

我认为你的意思是以编程方式确定 。你应该看看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(JDK中的jvisualvm)允许您在许多其他漂亮的东西中监视堆使用情况。

但请注意,VisualVM缺乏对开箱即用的特定内存池的监控支持;您需要安装jvmstat。然后,您必须从VisualVM的插件管理器安装 Visual GC 插件。

http://puu.sh/YCpX

安装并重新启动Visual VM后,我们可以通过Visual GC选项卡查看更深入的堆使用情况。

http://puu.sh/YCqD

答案 1 :(得分:1)

使用JConsole轻松监控堆大小。您可以在内存选项卡中看到不同的gen大小。从图表下拉列表中选择所需的gen。