JFR 赛事开始时间

JFR events start time

我有自定义 JFR 事件。我发现 RecodedEvent.getStartTime() 实际上比 really 创建和提交此事件的时间晚了几秒钟。那么 getStartTime() 什么时候显示?

在我的例子中,我将当前时间添加到我的事件中,并在解析 jfr 文件时读取它。但是我怎样才能在内置事件中得到它,比如 jdk.ExecutionSample?

内置事件中有一个字段 getLong("startTime"),但它给出了奇怪的数字,看起来不像当前时间(以毫秒为单位)。这是什么?

默认情况下,JFR 使用不变的 TSC 获取时间戳(System.currentMillis() 或 System.nanoTime() 未使用)。

Invariant TSC让JFR的开销很低,但在某些CPU或某些场景下,时钟可能会漂移。您可以使用命令行标志:

 -xx:-UseFastUnorderedTimeStamps

获得更准确的时钟,但开销更高。

您从 event.getLong("startTime") 获得的时间是原始滴答,通常仅当您想与使用相同计时机制的其他系统进行比较时才有用。