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上执行:

相关推荐
wand codemonkey36 分钟前
SpringbootWeb【入门】+MySQL【安装】+【DataDrip安装 】+【连接MySQL】
java·mysql·mybatis
Mahir088 小时前
Spring 循环依赖深度解密:从问题本质到三级缓存源码级解析
java·后端·spring·缓存·面试·循环依赖·三级缓存
RyFit10 小时前
SpringAI 常见问题及解决方案大全
java·ai
石山代码10 小时前
C++ 内存分区 堆区
java·开发语言·c++
绝知此事10 小时前
【算法突围 01】线性结构与哈希表:后端开发的收纳术
java·数据结构·算法·面试·jdk·散列表
无风听海10 小时前
C# 隐式转换深度解析
java·开发语言·c#
一只大袋鼠11 小时前
Git 进阶(二):分支管理、暂存栈、远程仓库与多人协作
java·开发语言·git
德思特12 小时前
从 Dify 配置页理解 RAG 的重要参数
java·人工智能·llm·dify·rag
YOU OU12 小时前
Spring IoC&DI
java·数据库·spring
один but you12 小时前
从可变参数到 emplace:现代 C++ 性能优化的核心组合
java·开发语言