Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何获取jar在执行期间使用的内存空间_Java_Memory Management_Jar - Fatal编程技术网

Java 如何获取jar在执行期间使用的内存空间

Java 如何获取jar在执行期间使用的内存空间,java,memory-management,jar,Java,Memory Management,Jar,我已经编写了一个java程序,可以使用它生成的jar运行该程序 java -jar foo.jar 我感兴趣的是获取jar程序在执行期间请求的最大内存大小。实际上,我只是查看内存管理(如htop),但它并不准确 我想知道在启动jar时是否设置了一个特殊参数,允许在执行结束时获取此类信息?您是否尝试过visualVM,它是跟踪java性能应用程序的免费且功能强大的工具,它将向您显示JVM从物理内存中提交了多少内容,还有当前JVM运行的应用程序的总内存,以及一些功能: 提供CPU配置文件 提供有

我已经编写了一个java程序,可以使用它生成的jar运行该程序

java -jar foo.jar
我感兴趣的是获取jar程序在执行期间请求的最大内存大小。实际上,我只是查看内存管理(如
htop
),但它并不准确


我想知道在启动jar时是否设置了一个特殊参数,允许在执行结束时获取此类信息?

您是否尝试过visualVM,它是跟踪java性能应用程序的免费且功能强大的工具,它将向您显示JVM从物理内存中提交了多少内容,还有当前JVM运行的应用程序的总内存,以及一些功能:

  • 提供CPU配置文件
  • 提供有关线程的所有信息
  • 提供JVM堆和内存状态
  • 提供有关GC活动的信息
它与JDK软件包一起提供,所以您不必安装它,更多信息请查看

在您的情况下,您可以执行以下操作:

java -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.port=8484 -Dcom.sun.management.jmxremote.ssl=false -jar foo.jar

打开
visualVM
,然后选择
文件->添加JMX连接
,然后键入您的主机ip和在参数“在本例中为其8484”中指定的端口,以:,例如
localhost:8484
,然后您就可以开始了。

也许可以从TaskList获取它。我不知道有任何方法可以跟踪使用的最大堆。大多数工具都会定期对JVM堆进行采样,但您可能会错过最大采样间隔。如果您对此没有异议,下面提到的VisualVM很不错,因为它提供了堆使用的图表,它并不是专门针对JavaEE(J2EE是一个过时的术语)应用程序的。它连接到任何正在运行的JVM。@Yuba是否可以在jar文件上启动
虚拟VM
?你能提供一个样品吗?