为了账号安全,请及时绑定邮箱和手机立即绑定

来自命令行的 Java Flight Recorder (JFR):[jfr] [错误]

来自命令行的 Java Flight Recorder (JFR):[jfr] [错误]

一只萌萌小番薯 2023-06-28 16:08:07
我从示例中编译了一个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.jfrjava的Windows任务管理器中的内存使用量上升,然后在超过200秒后:线程&ldquo;main&rdquo;中出现异常 java.lang.OutOfMemoryError:TestFlightRecorder.main(TestFlightRecorder.java:12) 处的 Java 堆空间 [jfr][ERROR][1014.291] 关闭时无法删除存储库结果flight.jfr大小为 0 字节。(当我使用简单的 hello world java 类执行相同的命令时,创建的 Flight.jfr 大小为 125Kb,其中包含&ldquo;空&rdquo;信息 - 我猜这是因为应用程序运行得如此之快,飞行记录尚未开始 - 而这个问题不是关于那种空虚)。此类错误的网络搜索没有结果。为什么会出错,是不是我录音时做错了什么?
查看完整描述

2 回答

?
翻翻过去那场雪

TA贡献2065条经验 获得超14个赞

当应用程序结束时,Java Flight Recorder 将转储写入 Java 关闭挂钩中。如果没有足够的内存来生成转储,它将失败。

发生该错误的原因是,当关闭挂钩线程尝试删除该文件时,该文件仍由 JVM 保留。


查看完整回答
反对 回复 2023-06-28
?
狐的传说

TA贡献1804条经验 获得超3个赞

OOMError 可能会严重破坏 JVM,导致飞行记录器无法写入

我运行代码的重新编码时间为 20 秒,而不是 200 秒(在任务管理器中,我看到 java 内存使用量也在大约这段时间内增长到了 2Gb 的最大堆),并获得了与课程中呈现的图表类似的记录结果。所以我认为当前的问题已经解决。


查看完整回答
反对 回复 2023-06-28
  • 2 回答
  • 0 关注
  • 269 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号