我有linux系统,其中我有一个JVM,它由3个java进程使用。
/home/codesrc>java -version
java version "1.7.0_09"
Java(TM) SE Runtime Environment (build 1.7.0_09-b05)
Java HotSpot(TM) 64-Bit Server VM (build 23.5-b02, mixed mode)
因此,我使用相同的JRE运行3个进程。 当进行像
这样的操作时,每个进程都有自己的命令行定义的内存java -Xms256m -Xmx1024m -cp $CLASSPATH <class name>
java -Xms256m -Xmx512m -cp $CLASSPATH <class name>
java -Xms256m -Xmx705m -cp $CLASSPATH <class name>
linux系统上的内存为4GB。我试图分别为每个进程找到堆使用情况。由于我在系统上没有JDK,因此我无法使用jmap,jconsole或jstack。 我试过了
Runtime.getRuntime().totalMemory()
但这并没有给我基于流程,而且上面的输出也没有看到 任何人都知道如何仅在使用JRE时检查堆使用情况,这与
相当jmap -heap <PID>
答案 0 :(得分:2)
当您在服务器上启动Java VM并使用enable the JMX agent可用于连接的主机时,最好的选择是JConsole。
或者,您可以使用使用JMX检索详细信息的本地应用程序(see other question):
List memBeans = ManagementFactory.getMemoryPoolMXBeans();
for (Iterator i = memBeans.iterator(); i.hasNext(); ) {
MemoryPoolMXBean mpool = (MemoryPoolMXBean)i.next();
MemoryUsage usage = mpool.getUsage();
String name = mpool.getName();
float init = usage.getInit()/1000;
float used = usage.getUsed()/1000;
float committed = usage.getCommitted()/1000;
float max = usage.getMax()/1000;
float pctUsed = (used / max)*100;
float pctCommitted = (committed / max)*100;
}
答案 1 :(得分:2)
您正在寻找正在运行的进程的当前内存使用情况?你试过以下这个吗?
Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory()