67,513
社区成员
发帖
与我相关
我的任务
分享
import java.lang.management.*;
import java.io.*;
class Test {
public static void main(String[] args) {
try {
System.out.println(ManagementFactory.getRuntimeMXBean().getName());
String pid = ManagementFactory.getRuntimeMXBean().getName().replaceAll("(\\d+)@.*", "$1");
String cmd = "jmap -histo " + pid;
System.out.println(cmd);
final Process p = Runtime.getRuntime().exec(cmd);
Thread t = new Thread() {
public void run() {
BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
String buf;
try {
while ((buf=br.readLine()) != null) {
System.out.println(buf);
}
} catch (Exception e) {
e.printStackTrace();
}
}
};
t.start();
} catch (Throwable e) {
e.printStackTrace();
}
}
}
RuntimeMXBean bean = ManagementFactory.getRuntimeMXBean();
String name = bean.getName();
int index = name.indexOf('@');
String pid = name.substring(0, index);
//这里要区分操作系统
HotSpotVirtualMachine machine = (HotSpotVirtualMachine) new sun.tools.attach.WindowsAttachProvider().attachVirtualMachine(pid);
InputStream is = machine.heapHisto("-all");
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int readed;
byte[] buff = new byte[1024];
while((readed = is.read(buff)) > 0)
os.write(buff, 0, readed);
is.close();
machine.detach();
System.out.println(os);