Я не думаю, что вы можете сделать это в одной и той же JVM, потому что вам нужно пересечь кучу объектов, и вы можете оказаться в бесконечном цикле.Просто из любопытства я пытался порождать jmap
, используя Runtime.exec
против той же JVM и даже против другой JVM, и он просто зависает?
String pid = ManagementFactory.getRuntimeMXBean().getName().split("@")[0];
//pid=2520
System.out.println("PID: " + pid);
Process p = Runtime.getRuntime().exec("jmap -histo " + pid);
p.waitFor();
BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line ;
while((line = br.readLine())!=null){
System.out.println(line);
}
br = new BufferedReader(new InputStreamReader(p.getErrorStream()));
while((line = br.readLine())!=null){
System.out.println(line);
}