我正在学习 Java Flight Recorder 用法java-flight-recorder-monitoring 的课程。
我从示例编译了一个java代码(添加class
并且imports
因为它没有编译它们):
import java.util.ArrayList;
import java.util.List;
class TestFlightRecorder {
public static void main(String[] args) {
List<Object> items = new ArrayList<>(1);
try {
while (true){
items.add(new Object());
}
} catch (OutOfMemoryError e){
System.out.println(e.getMessage());
}
assert items.size() > 0;
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
System.out.println(e.getMessage());
}
}
}
然后我按照课程运行:
C:\Program Files\Java\jdk1.8.0_191\bin>java -XX:+UnlockCommercialFeatures -XX:+F lightRecorder -XX:StartFlightRecording=duration=200s,filename=c:\am\out\flight.j fr - cp c:\am\out TestFlightRecorder
之后立即输出:
开始录制 1. 结果将写入:
C:\AM\out\flight.jfr
java的Windows任务管理器中的内存使用量上升,然后超过200秒:
线程“主”java.lang.OutOfMemoryError 中的异常:TestFlightRecorder.main(TestFlightRecorder.java:12) 处的 Java 堆空间 [jfr][ERROR][1014.291] 关闭时无法删除存储库
结果flight.jfr
大小为 0 字节。(当我使用简单的 hello world java 类发出相同的命令时,flight.jfr 的创建大小为 125Kb,其中包含“空”信息——我猜这是因为应用程序运行得如此之快,飞行记录尚未开始——而这问题不在于那种空虚)。
对此类错误的网络搜索没有结果。为什么出错,我做错了什么来录制?