我从示例中编译了一个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秒后:
线程“main”中出现异常 java.lang.OutOfMemoryError:TestFlightRecorder.main(TestFlightRecorder.java:12) 处的 Java 堆空间 [jfr][ERROR][1014.291] 关闭时无法删除存储库
结果flight.jfr
大小为 0 字节。(当我使用简单的 hello world java 类执行相同的命令时,创建的 Flight.jfr 大小为 125Kb,其中包含“空”信息 - 我猜这是因为应用程序运行得如此之快,飞行记录尚未开始 - 而这个问题不是关于那种空虚)。
此类错误的网络搜索没有结果。为什么会出错,是不是我录音时做错了什么?
翻翻过去那场雪
狐的传说
相关分类