如果我用-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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
这应该可以使用HotSpot JVM.
如果您不想以编程方式执行此操作,VisualVM(jvisualvm在JDK中)允许您监视堆使用以及许多其他漂亮的东西.

但请注意,VisualVM缺乏对开箱即用的特定内存池的监控支持; 你需要安装jvmstat.然后,您必须从VisualVM的插件管理器安装Visual GC插件.
安装并重新启动Visual VM后,我们可以通过Visual GC选项卡查看更深入的堆使用情况.