我希望在JVM崩溃时能够收集堆转储。因此,我编写了一个简单的代码。
public class Test {
private String name;
public Test(String name) {
this.name = name;
}
public void execute() {
Map<String,String> randomData = new HashMap<String,String>();
for(int i=0;i<1000000000;i++) {
randomData.put("Key:" + i,"Value:" + i);
}
}
public void addData() {
}
public static void main(String args[]) {
String myName = "Aniket";
Test tStart = new Test(myName);
tStart.execute();
}
}
我正在运行以下代码:
[aniket@localhost Desktop]$ java -cp . -Xms2m -Xmx2m Test
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at Test.execute(Test.java:15)
at Test.main(Test.java:25)
我遇到了 OutOfMemoryError 的错误,但是在工作目录中没有堆转储文件(例如我预期的 hs_err_pidXXXX.log
文件)。我错过了什么?如何获得堆转储文件?
更新:
我尝试了 -XX:ErrorFile=.
,但仍然没有用。如果以上方法无法获取堆转储文件(崩溃 JVM),那么该如何崩溃 JVM 以获取这些日志?
hs_err_pidXXXX.log
只有在 JVM 崩溃时才会创建,而不是应用程序。 - Levente Kurusa