如何获取我的Java应用程序使用的最大堆大小?

3

我正在通过命令行运行我的Java应用程序,没有传递任何JVM设置(即java -cp some.jar)。

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

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


这个答案有帮助吗?链接 - Raman Sahasi
@rD,谢谢但是不需要。 jps -lvm 只显示被传递的显式参数,它没有显示 JVM 为应用程序设置的 Xmx - Glide
最大堆通常为主存储器的四分之一,除非您使用32位Windows JVM。我猜您的最大内存约为3 GB,如果740 MB是您的最大值。 - Peter Lawrey
@PeterLawrey 我的机器有16GB的内存。您是指所有内存的1/4还是可用内存?如果我在启动Java应用程序时不指定Xmx,JVM将分配多少堆空间是否有限制? - Glide
1
@Glide堆大小将是操作系统所述内存的1/4(可能略少),这是堆限制,但JVM可以为其他目的使用更多内存。 - Peter Lawrey
2个回答

3
您可以使用java.lang.management.MemoryUsage:
MemoryUsage mu = ManagementFactory.getMemoryMXBean().getHeapMemoryUsage();

并从中获取最大内存


有没有可能不修改代码就能找到最大内存?我目前可以使用VisualVM找到最大内存。我只是好奇当启动应用程序时没有传递VM参数时,我的应用程序正在使用哪些JVM设置。 - Glide
@Glide:好的,你可以使用JVisualVM。等等,你已经在用了...那么,你的问题是什么? - Holger
@Holger 您是对的,我一定是瞎了,因为在堆栈选项卡下面,我没有看到Max与Size和Used一起列出来。 - Glide

1
我会使用性能分析工具来分析内存。如果您知道有多少内存被使用,问题并没有解决。下一步是要知道为什么使用了这么多内存。
请尝试使用Java Mission Control对您的程序进行分析。
该工具是任何较新JDK的一部分,例如: “C:\ Program Files(x86)\ Java \ jdk1.8.0_20 \ bin \ jmc.exe”

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接