繁体   English   中英

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

[英]How do I determine the size of each of the heap generations in my JVM?

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

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


(来源: java.net

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

http://puu.sh/YCpX

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

http://puu.sh/YCqD

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM