Java25新特性:JFR CPU时间性能分析

JEP509:该特性是一个实验特性,增强了JFR以便获取更准确的CPU时间信息,目前仅在Linux平台可用。

在这之前,JFR使用的是墙钟时间,无法捕获原生代码如Native 代码的CPU消耗**;**线程阻塞在I/O时,时间仍然在走,并且无法区分线程是真正消耗CPU还是处于等待状态。

JEP 509 引入新的 JFR 事件 jdk.CPUTimeSample,基于线程实际消耗的 CPU 时间。

java 复制代码
public class CPUProfiling {
    void main() {
        IO.println("开始执行计算任务...");
        for (long i = 0; i < 2_000_000_000L; i++) {
            Math.sqrt(Math.log(i + 1));
        }
        IO.println("完成");
    }
}

编译:

java 复制代码
javac --enable-preview --release 25 CPUProfiling.java

运行并记录CPU时间:

java 复制代码
java '-XX:StartFlightRecording=jdk.CPUTimeSample#enabled=true,jdk.CPUTimeSample#throttle=500/s,filename=cpu.jfr' CPUProfiling

执行结果:(非Linux平台,告警CPU time method sampling not supported)

生成jfr文件:

分析结果:

java 复制代码
/jdk/jdk-25.0.2.jdk/Contents/Home/bin/jfr view cpu-time-hot-methods cpu.jfr
java 复制代码
/jdk/jdk-25.0.2.jdk/Contents/Home/bin/jfr summary cpu.jfr

在Linux上执行:

相关推荐
wuminyu10 分钟前
JDK21中虚拟线程和FFM协同实现高并发源码剖析
java·linux·c语言·jvm·c++
SWAGGY..22 分钟前
【C++进阶】:(1)继承机制详解
java·jvm·c++
码匠许师傅1 小时前
【C++ 面试真题】27. 聊聊 C++ 的内存泄漏与内存布局
java·c++·面试
PPPPickup2 小时前
金证秋招笔试
java·开发语言
不正经学生2 小时前
C语言结构体:自定义数据类型,让变量打包出行
java·c语言·开发语言·数据结构·算法
ycjunhua2 小时前
Spring AI 2.0 GA:ToolCallingAdvisor 重构与 Java Agent 新范式
java·人工智能·spring
开源必胜2 小时前
Future的异常处理以及CompletableFuture传播链、异常处理
java
林森lsjs3 小时前
队列 FIFO 原理 & 手撕两种队列实现(链表 + 循环数组)—数据结构陆
java·开发语言·数据结构·队列
孙克旭_4 小时前
数据结构基础:Java数组实现一次性队列
java·开发语言·数据结构·队列
lisin-lee-cooper4 小时前
简单聊聊 OpenFeign 框架源码
java·微服务