如果我在任何时候使用 -Xms256M 和 -Xmx512M 启动我的 JVM,我是否可以确定专门分配给堆的年轻代和终身代的空间量?
问问题
874 次
2 回答
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(jvisualvm
在 JDK 中)允许您监视堆使用情况以及许多其他漂亮的东西。
(来源:java.net)
但是请注意,VisualVM 不支持开箱即用地监控特定的内存池。你需要安装jvmstat。然后,您必须从 VisualVM 的插件管理器安装Visual GC插件。
安装并重启 Visual VM 后,我们可以通过 Visual GC 选项卡更深入地查看堆使用情况。
于 2012-08-25T07:47:48.770 回答
1
使用JConsole轻松监控堆大小。您可以在内存选项卡中看到不同的生成大小。从图表下拉列表中选择您想要的生成。
于 2012-08-25T07:46:40.277 回答