如何获得java应用程序使用的最大堆大小?

如何获得java应用程序使用的最大堆大小?,java,jvm,visualvm,Java,Jvm,Visualvm,我通过命令行运行我的Java应用程序,而不传递任何JVM设置(即Java-cp some.jar) VisualVM显示了Java应用程序分配的约740M堆空间 由于我没有传入任何JVM设置,如何查看我的应用程序正在使用的JVM设置?您可以使用java.lang.management.MemoryUsage: MemoryUsage mu = ManagementFactory.getMemoryMXBean().getHeapMemoryUsage(); 并从中获取最大内存我将使用分析工具分

我通过命令行运行我的Java应用程序,而不传递任何JVM设置(即
Java-cp some.jar

VisualVM显示了Java应用程序分配的约740M堆空间


由于我没有传入任何JVM设置,如何查看我的应用程序正在使用的JVM设置?

您可以使用java.lang.management.MemoryUsage:

MemoryUsage mu = ManagementFactory.getMemoryMXBean().getHeapMemoryUsage();

并从中获取最大内存

我将使用分析工具分析内存。另外,如果您知道使用了多少内存,则问题不会得到解决。下一步是了解为什么要使用这么多内存

尝试使用

该工具是任何较新JDK的一部分,如:
“C:\Program Files(x86)\Java\jdk1.8.0\u 20\bin\jmc.exe”

答案有用吗?@rD.谢谢,但是没有。
jps-lvm
只显示传入的显式参数。它没有显示JVM为应用程序提供的
Xmx
。除非您使用32位windows JVM,否则最大堆通常是主内存的1/4。如果740MB是您的最大容量,我想您大概有3GB。@PeterLawrey我的机器有16GB的ram。你是说全部内存的1/4还是可用内存?如果我在启动java应用程序时没有指定
Xmx
,JVM将分配多少堆有限制吗?@Glide堆将是操作系统所说的内存量的1/4(可以稍微少一点)这是堆限制,但JVM可以将更多内存用于其他目的。是否可以不修改代码以找到最大内存?我目前可以通过VisualVM找到最大内存。我只是好奇,当启动应用程序时没有传入VM参数时,我的应用程序正在使用什么JVM设置。@Glide:好吧,你可以使用JVisualVM。等等,你已经这么做了……那么……你的问题是什么?@Holger你是对的,我一定是瞎了,因为我没有看到最大值和大小一起列出,并在“堆”选项卡下使用。