我想创建一个用于教育目的的 Java 堆转储分析器项目。我更喜欢在应用程序中捕获转储文件,而不是将转储文件作为参数。但我不知道该怎么做。
我想通过提供 PID 来使用运行时运行 jmap -dump...
命令,但我不确定这是否是正确的方法。你能帮我吗?
最佳答案
您仍然需要指定保存转储的文件名。
import com.sun.tools.attach.VirtualMachine;
import sun.tools.attach.HotSpotVirtualMachine;
import java.io.InputStream;
public class HeapDump {
public static void main(String[] args) throws Exception {
String pid = args[0];
HotSpotVirtualMachine vm = (HotSpotVirtualMachine) VirtualMachine.attach(pid);
try (InputStream in = vm.dumpHeap("/tmp/heapdump.hprof")) {
byte[] buf = new byte[200];
for (int bytes; (bytes = in.read(buf)) > 0; ) {
System.out.write(buf, 0, bytes);
}
} finally {
vm.detach();
}
}
}
关于java - 如何在 Java 应用程序中创建堆转储?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59164729/