Ani*_*kur 3 java jvm jvm-crash heap-dump
我想在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();
}
}
Run Code Online (Sandbox Code Playgroud)
我按如下方式运行它
[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)
Run Code Online (Sandbox Code Playgroud)
我得到了OutOfMemoryError我想要但工作目录中没有堆转储(就像hs_err_pidXXXX.log我期望的那样).我错过了什么?我如何获得堆转储?
更新:
我试过-XX:ErrorFile=.还没用.如果上面不是获取堆转储(Crash JVM)的方法,我怎么能让我的JVM崩溃才能获得这些日志?
您混淆了因JVM崩溃而引发的异常或错误.
由于JVM中的内部错误导致JVM崩溃,您无法通过编写正常的Java程序来触发此问题(除非您发现错误,否则不应该触发)
你正在做的是触发一个错误,这意味着程序继续运行,直到所有非守护程序线程退出.
检查堆的最简单工具是JDK附带的VisualVM.如果要在OutOfMemoryError上触发堆转储,则可以使用-XX:+HeapDumpOnOutOfMemoryError
| 归档时间: |
|
| 查看次数: |
6585 次 |
| 最近记录: |