如果我用-xms256m和-xmx512m启动jvm,在任何时候,我都可以确定专门分配给堆的年轻代和终身代的空间量吗?
a2mppw5e1#
使用jconsole可以轻松地监视堆大小。在内存选项卡中可以看到不同的gen大小。从图表下拉列表中选择所需的发电机。
dfty9e192#
我想你的意思是用程序来决定这个。你应该看看 java.lang.management . 特别地, ManagementFactory.getMemoryPoolMXBeans 在这里应该有用。
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
jvisualvm
2条答案
按热度按时间a2mppw5e1#
使用jconsole可以轻松地监视堆大小。在内存选项卡中可以看到不同的gen大小。从图表下拉列表中选择所需的发电机。
dfty9e192#
我想你的意思是用程序来决定这个。你应该看看
java.lang.management
. 特别地,ManagementFactory.getMemoryPoolMXBeans
在这里应该有用。这应该可以使用hotspot jvm工作。
如果您不想通过编程方式来实现这一点,那么visualvm(
jvisualvm
在jdk中)允许您监视堆的使用情况以及许多其他漂亮的东西。(来源:java.net)
但是请注意,visualvm缺乏对特定内存池的即时监控支持;您需要安装jvmstat。然后必须从visualvm的插件管理器安装visualgc插件。
http://puu.sh/ycpx
在安装并重新启动visualvm之后,我们可以通过visualgc选项卡看到堆使用情况的更深入的视图。
http://puu.sh/ycqd