【Java性能诊断利器】:JFR七大核心事件类型实战应用详解

第一章:JFR事件类型概述

Java Flight Recorder(JFR)是JDK内置的高性能诊断工具,用于收集Java应用程序运行时的详细数据。JFR通过发布不同类型的事件来记录虚拟机内部状态、应用程序行为以及系统资源使用情况,这些事件构成了性能分析和故障排查的核心数据源。

事件分类与用途

JFR事件按来源和用途可分为以下几类:
  • GC事件:记录垃圾回收的开始、结束时间及内存变化
  • 线程事件:追踪线程创建、阻塞与等待锁的行为
  • CPU采样:周期性记录线程的调用栈,用于热点方法分析
  • 堆分配样本:捕获对象分配位置,辅助内存泄漏诊断
  • 自定义事件:开发者可通过API定义业务相关事件

事件结构示例

每个JFR事件包含时间戳、持续时间、线程信息和自定义字段。以下为自定义事件的Java代码实现:

@Name("com.example.MyEvent")
@Label("My Application Event")
@Description("An event to trace business logic")
public class MyEvent extends Event {
    @Label("Operation Name")
    private final String operation;

    @Label("Duration (ms)")
    private final long duration;

    public MyEvent(String operation, long duration) {
        this.operation = operation;
        this.duration = duration;
    }
}
// 使用方式:new MyEvent("login", 150).commit();
// commit() 触发事件写入JFR记录流

常见事件类型对照表

事件名称描述启用参数
jdk.GCPhasePause记录每次GC暂停阶段-XX:+FlightRecorderOptions=settings=profile
jdk.ThreadStart线程启动事件-XX:StartFlightRecording=duration=60s
jdk.CPUSample采样线程CPU使用默认关闭,需显式启用
graph TD A[应用程序运行] --> B{是否启用JFR?} B -->|是| C[生成事件数据] B -->|否| D[无监控数据] C --> E[写入环形缓冲区] E --> F[输出到.jfr文件]

第二章:Java应用程序执行事件分析

2.1 方法执行与调用栈采样原理

在程序运行过程中,方法的执行通过调用栈(Call Stack)进行管理。每当一个方法被调用,系统就会在栈中压入一个新的栈帧,包含局部变量、返回地址和操作数栈等信息。
调用栈结构示例

public void methodA() {
    methodB(); // 调用methodB
}

public void methodB() {
    methodC(); // 调用methodC
}

public void methodC() {
    // 执行逻辑
}
当 methodA 被调用时,依次压入 methodA → methodB → methodC 的栈帧。执行完毕后按后进先出顺序弹出。
采样机制
性能分析器通过周期性中断线程,读取当前调用栈的完整快照。这些样本可统计各方法的活跃频率,识别热点路径。
  • 采样频率通常为每毫秒至每10毫秒一次
  • 无需修改代码,对运行时影响小
  • 适用于定位长时间运行的方法调用

2.2 使用ExecutionSample进行CPU使用率诊断

采集与分析机制
ExecutionSample 是一种轻量级运行时采样工具,用于周期性捕获线程堆栈及CPU占用情况。通过高频采样(如每10ms一次),可精准定位高负载代码路径。

ExecutionSample sampler = new ExecutionSample();
sampler.setInterval(10); // 设置采样间隔为10ms
sampler.start();

// 5秒后停止并生成报告
Thread.sleep(5000);
sampler.stop();
sampler.generateReport();
上述代码初始化采样器并启动监控。参数 setInterval 控制采样频率,频率过高可能引入性能开销,过低则可能遗漏短时峰值。
结果可视化
采样数据可按调用栈聚合,生成热点方法排名表:
方法名采样次数CPU占比
com.example.service.Calculator.compute()89244.6%
com.example.dao.UserRepository.query()41220.6%
java.util.HashMap.get()30115.1%
该表格揭示了主要CPU消耗点,辅助开发者快速识别性能瓶颈。

2.3 方法执行耗时热点定位实战

在高并发系统中,精准定位方法执行的耗时热点是性能优化的关键环节。通过引入分布式追踪与监控埋点,可有效识别瓶颈方法。
基于 OpenTelemetry 的埋点实现
// 在关键方法前后插入 Span 记录
func processData(ctx context.Context) {
    ctx, span := tracer.Start(ctx, "processData")
    defer span.End()

    time.Sleep(100 * time.Millisecond) // 模拟业务逻辑
}
上述代码利用 OpenTelemetry 创建 Span,自动记录方法执行时间。Span 的开始与结束时间将被采集至 APM 系统,用于后续分析。
耗时数据聚合分析
方法名平均耗时(ms)调用次数
processData98.71245
validateInput12.31245
通过 APM 工具(如 Jaeger 或 SkyWalking)聚合 Span 数据,生成按耗时排序的方法列表,快速锁定高频高延迟操作。
优化策略建议
  • 对排名靠前的耗时方法引入缓存机制
  • 异步化处理非核心链路逻辑
  • 结合 Flame Graph 分析调用栈深度

2.4 高频方法调用对性能影响的追踪

在高并发系统中,高频方法调用可能成为性能瓶颈。通过精细化监控与采样分析,可定位耗时热点。
性能采样示例
使用 Go 的 runtime/pprof 进行 CPU 采样:
import _ "net/http/pprof"

func main() {
    go func() {
        log.Println(http.ListenAndServe("localhost:6060", nil))
    }()
    // 正常业务逻辑
}
启动后通过 go tool pprof http://localhost:6060/debug/pprof/profile 获取 CPU 剖析数据,识别调用频率高且耗时长的方法。
常见优化策略
  • 引入本地缓存减少重复计算
  • 批量处理合并多次小调用
  • 异步化非关键路径操作
调用频率与延迟对比表
方法名每秒调用次数平均延迟(μs)
ValidateUser15,00085
GenToken12,300120

2.5 结合火焰图可视化执行采样数据

火焰图是一种高效的性能分析可视化工具,能够直观展示程序调用栈的耗时分布。通过将采样数据转换为火焰图,开发者可以快速定位热点函数。
生成火焰图的基本流程
使用 perf 或其他采样工具收集运行时数据后,需将其转化为火焰图可读格式:

# 采集Java进程CPU性能数据
perf record -F 99 -p `pgrep java` -g -- sleep 30
# 生成堆栈折叠文件
perf script | ./stackcollapse-perf.pl > out.perf-folded
# 生成SVG火焰图
./flamegraph.pl out.perf-folded > cpu-flame.svg
上述命令依次完成采样、折叠调用栈和渲染图像。其中 `-F 99` 表示每秒采样99次,避免过高负载;`-g` 启用调用栈记录。
火焰图解读要点
  • 横轴表示总样本时间,宽度越宽说明占用CPU时间越长
  • 纵轴代表调用深度,每一层框为一个函数调用
  • 颜色随机分配,无特定含义,便于区分不同函数
[火焰图可视化区域示意图]

第三章:内存相关事件深度解析

3.1 堆内存分配与对象创建监控

堆内存是Java虚拟机管理的主要运行时数据区,用于存放对象实例。JVM通过Eden区、Survivor区和老年代实现分代收集策略,对象优先在Eden区分配,触发Minor GC后根据存活情况进入 Survivor 或 老年代。
监控工具与参数配置
使用JVM内置工具如jstat可实时监控堆内存分配与GC状态。关键启动参数包括:
  • -Xms:设置初始堆大小
  • -Xmx:设置最大堆大小
  • -XX:+PrintGCDetails:输出详细GC日志
GC日志分析示例

jstat -gc <pid> 1000
该命令每秒输出一次GC统计,包含Eden、Survivor、老年代使用率及GC耗时,帮助定位内存瓶颈。
字段含义
S0CSurvivor0容量
ECEden区容量
OGC老年代当前容量

3.2 利用AllocationInNewTlab定位内存压力源

JVM在对象分配过程中,每个线程会优先在本地TLAB(Thread Local Allocation Buffer)中分配内存。通过监控`AllocationInNewTLAB`这一HotSpot PerfData指标,可精准识别高频率对象创建的线程,进而定位内存压力源头。
监控指标采集方式
可通过JMX或命令行工具获取该计数器数据:

jstat -gc <pid> | tail -n1
输出中的“E”列(Eden区分配总量)结合线程级采样,可辅助判断是否存在异常分配行为。
定位高分配线程
使用JFR(Java Flight Recorder)启用对象分配采样:

<event name="jdk.ObjectAllocationInNewTLAB">
  <setting name="enabled" value="true"/>
</event>
该事件记录每次对象在TLAB中分配的堆栈,结合火焰图可可视化展示热点分配路径。
分析策略
  • 关注短生命周期但高频分配的对象类型
  • 比对不同业务场景下的分配速率差异
  • 结合GC暂停时间判断是否触发过早晋升

3.3 Old Object Sample在内存泄漏排查中的应用

原理与触发机制
Old Object Sample是JVM提供的一种高级诊断功能,通过定期采样老年代中长期存活的对象,辅助定位未及时释放的内存引用。该功能由`-XX:+HeapDumpBeforeFullGC`等参数协同触发,在Full GC前自动生成堆转储文件。
典型应用场景
  • 识别缓存类对象的过度驻留
  • 发现静态集合误持对象引用
  • 分析异步任务回调导致的生命周期错配
jcmd <pid> GC.run_finalization
jcmd <pid> VM.gc_everything
jcmd <pid> GC.class_histogram | head -20
上述命令序列强制执行完整GC并输出类实例分布,结合Old Object Sample数据可精准锁定异常增长的类类型及其引用链。

第四章:垃圾回收事件全流程洞察

4.1 GC生命周期事件解读与触发原因分析

GC(垃圾回收)是保障系统内存稳定的核心机制,其生命周期包含对象分配、标记、清理与压缩四个阶段。理解各阶段的事件触发逻辑对性能调优至关重要。
GC事件的主要触发条件
  • 堆内存分配达到阈值
  • 显式调用如 System.gc()
  • 老年代空间不足
  • 元空间(Metaspace)扩容失败
JVM中GC日志示例解析

[GC (Allocation Failure) [PSYoungGen: 65536K->10240K(76288K)] 65536K->15678K(251392K), 0.0891234 secs]
该日志表明因“Allocation Failure”触发年轻代GC,PSYoungGen表示使用Parallel Scavenge收集器,括号内为“回收前→回收后(总容量)”的内存变化。
常见GC类型对比
GC类型触发场景影响范围
Minor GC年轻代满仅年轻代
Major GC老年代满老年代
Full GCSystem.gc() 或并发失败整个堆

4.2 Young GC与Full GC性能影响对比实践

在JVM垃圾回收机制中,Young GC与Full GC对系统性能的影响存在显著差异。Young GC主要回收新生代对象,频率高但单次暂停时间短;而Full GC涉及整个堆内存,虽频率低却可能导致长时间的STW(Stop-The-World)。
典型GC日志对比

# Young GC示例
[GC (Allocation Failure) [DefNew: 81920K->8192K(92160K), 0.084ms]

# Full GC示例
[Full GC (System.gc()) [Tenured: 40960K->40960K(40960K), 0.456ms]
上述日志显示,Young GC耗时通常在毫秒级以下,而Full GC可达数十至数百毫秒,严重影响响应延迟。
性能影响量化对比
指标Young GCFull GC
发生频率高低
单次停顿时间<50ms>100ms
影响范围新生代全堆

4.3 G1、ZGC等收集器事件特征识别

现代垃圾收集器如G1和ZGC在运行时会生成特定的GC日志事件,识别这些特征对性能调优至关重要。
G1收集器事件特征
G1的典型日志包含年轻代回收(Young GC)与混合回收(Mixed GC),其关键标识为 GC pause (G1 Evacuation Pause)。例如:

2023-04-01T10:00:00.123+0800: 1.234: [GC pause (G1 Evacuation Pause) (young), 0.0056781 secs]
该日志表明一次年轻代回收,持续时间约5.7ms,括号中的 young 标识回收类型。
ZGC低延迟特性体现
ZGC通过并发标记与重定位实现极短停顿,其日志中常见:

[1.234s][info][gc] GC(3) Pause Mark Start 0.123ms
[1.235s][info][gc] GC(3) Pause Relocate Start 0.098ms
两次暂停均低于1ms,体现其亚毫秒级停顿能力。
收集器典型事件平均暂停时间
G1Evacuation Pause10-200ms
ZGCPause Mark/Relocate<10ms

4.4 基于GC事件优化堆参数配置策略

在JVM运行过程中,GC日志是调优堆内存配置的核心依据。通过分析GC频率、停顿时间与对象分配速率,可精准调整堆空间划分。
关键GC指标监控
重点关注Young GC的触发频率与耗时,以及Full GC是否频繁。若Young GC频繁但耗时短,可适当增大年轻代;若Full GC频繁,则需考虑堆总体过大或存在内存泄漏。
JVM参数配置示例

-XX:+UseG1GC \
-XX:MaxGCPauseMillis=200 \
-XX:G1HeapRegionSize=16m \
-XX:InitiatingHeapOccupancyPercent=45
上述配置启用G1垃圾回收器,目标最大暂停时间为200毫秒,设置堆区大小为16MB,当堆占用达到45%时启动并发标记周期,有效平衡吞吐与延迟。
参数调整逻辑分析
  • -XX:MaxGCPauseMillis:控制GC停顿时间,避免影响响应性
  • -XX:InitiatingHeapOccupancyPercent:提前触发并发标记,减少Full GC风险

第五章:I/O操作与系统资源事件探查

监控文件系统事件
在高并发服务中,实时感知配置文件或日志目录的变化至关重要。Linux 提供 inotify 接口用于监听文件系统事件。以下 Go 语言示例展示如何监控目录的写入和删除操作:

package main

import (
    "github.com/fsnotify/fsnotify"
    "log"
)

func main() {
    watcher, err := fsnotify.NewWatcher()
    if err != nil {
        log.Fatal(err)
    }
    defer watcher.Close()

    done := make(chan bool)
    go func() {
        for {
            select {
            case event, ok := <-watcher.Events:
                if !ok {
                    return
                }
                if event.Op&fsnotify.Write == fsnotify.Write {
                    log.Println("修改文件:", event.Name)
                }
                if event.Op&fsnotify.Remove == fsnotify.Remove {
                    log.Println("删除文件:", event.Name)
                }
            }
        }
    }()

    err = watcher.Add("/var/log/app")
    if err != nil {
        log.Fatal(err)
    }
    <-done
}
系统级I/O性能分析工具
生产环境中应结合工具定位瓶颈。常用手段包括:
  • iostat:周期性输出磁盘 I/O 统计,识别高延迟设备
  • iotop:按进程维度展示实时 I/O 使用率
  • strace:跟踪进程系统调用,诊断阻塞式 read/write 调用
资源事件关联告警策略
事件类型触发条件响应动作
磁盘写满使用率 > 90%清理旧日志并发送 PagerDuty 告警
频繁打开文件open() 系统调用突增检查是否存在句柄泄漏

第六章:并发与线程竞争事件剖析

第七章:安全与配置类事件追踪

Java如何使用JFR(Java Flight Recorder)飞行记录分析代码瓶颈 Java JFR的全称是Java Flight Recorder。这是Java开发工具包(JDK)中的一个功能强大的性能分析和故障排查工具。它需要配合JMC(JDK Mission Control)工具来分析收集的记录数据。 阅读详情

相关推荐

JVM 性能调优之通过 JProfile 和 JFR 分析系统瓶颈提升系统性能

JProfiler是一个用于分析运行JVM内部情况的专业工具。在开发中你可以使用它,用于质量保证,也可以解决你的生产系统遇到的问题。方法调用这通常被称为"CPU分析"。方法调用可以通过不同的方式进行测量和可视化, 分析方法调用可以帮助了解你的应用程序正在做什么,并找到提高其性能的方法。分配分析堆上对象的分配、引用链和垃圾回收属于"内存分析"的范畴。这个功能可以让你解决内存泄漏,总之使用更少的内存,分配更少的临时对象。线程和锁线程可以持有锁,例如通过在一个对象上做同步。

yuxingwu9872的博客 1600

Java Flight Record 详解

本文主要介绍Java Flight Record的核心概念,包括事件及缓冲机制,和JFR诊断、解析及使用实例 与其他性能工具相比,JFR 的性能开销非常低,几乎可以忽略不计实时和历史数据记录:使用 JFR,您可以实时记录应用程序的性能数据,例如线程活动、方法执行时间、垃圾收集等。您还可以通过配置持久化设置,将记录的数据保存为 JFR 文件,以供后续分析和排查问题。

若明天不见 2656

Java 性能难排查?JFR 到底能帮上什么忙?

JFR 最早是 Oracle JDK 的商业功能,自 JDK 11 起在 OpenJDK 中也成为开源组件,默认集成在 JVM 中。它通过埋点的方式在 JVM 各个子系统中记录事件数据,这些事件被高效编码为二进制格式,几乎不影响应用运行。Java Flight Recorder 是现代 Java 应用性能诊断的重要工具。无需侵入应用代码、运行时开销小、事件粒度细、可视化支持完善。相比 APM 或 metrics 工具,JFR 更适合精准问题定位,特别是在生产环境中捕捉难以复现的异常行为。

你好,我是橙序员 2037

[Java故障排除指南- JDK11-学习笔记]-2-诊断工具JMC和JFR使用

2 诊断工具 2.1 诊断工具概述 Java Development Kit (JDK) 提供特定于各种操作系统的诊断工具和故障排除工具。还可以使用 JDK 提供的 API 开发自定义诊断工具 本节中描述的大多数命令行实用程序要么包含在 JDK 中,要么包含在本机操作系统工具和实用程序中。 尽管 JDK 命令行实用程序包含在 JDK 下载中,但重要的是要考虑到它们可用于诊断问题并监视使用 Java 运行时环境 (JRE) 部署的应用程序。 通常,诊断工具和选项使用各种机制来获取它们报告的信息。这些机制特定于

宋小生-中间件 2799

Java飞行记录 Jfr 文件分析,JMC工具的安装和使用详解

JMC 可以读取 JFR 事件记录文件,并提供复杂的分析和视图,帮助你深入理解 JVM 的行为和性能表现。

十三月的博客 2353

深入探索Java Flight Recorder:Java性能分析工具

Java Flight Recorder(JFR)是Java虚拟机(JVM)的一个特性,用于捕获Java应用程序的详细运行时信息,以便于性能分析和故障排查。它是Java Mission Control(JMC)工具的一个重要组成部分,提供了一个强大的性能分析框架。本文将详细介绍JFR的概念、功能、使用方法以及如何与JMC结合进行性能分析。 Java Flight Recorder是一个强大的性能分析工具,可以帮助开发者深入理解Java应用程序的行为。通过本文的介绍,读者应该能够了解JFR的主要功能、使用方法以及如何与JMC结合进行有效的性能分析。 Java Flight Recorder是一个强大的性能分析工具,可以帮助开发者深入理解Java应用程序的行为。通过本文的介绍,读者应该能够了解JFR的主要功能、使用方法以及如何与JMC结合进行有效的性能分析。

【云原生Java性能优化指南】:掌握JFR CPU分析配置的5大核心技巧

掌握云原生 Java 的 JFR CPU 分析配置,精准定位性能瓶颈。适用于微服务、容器化场景,通过事件采样、持续监控、阈值告警等五大技巧优化JVM性能,提升系统稳定性与资源利用率,值得收藏。

PixelShoal的博客 790

【QT+VS】如何在现有VS项目中添加Qt界面?【全网最详细】

VS项目有了,就缺个QT界面,怎么办呢?这篇文章帮你一键搞定!

深耕CV 4986

Java性能诊断终极指南:GC日志与async-profiler数据融合分析

在Java应用性能优化领域,GC日志和调用栈分析是定位性能瓶颈的两大核心技术。async-profiler作为一款强大的Java性能分析工具,通过AsyncGetCallTrace和perf_events技术提供低开销的CPU和堆内存采样能力,与GC日志结合使用能实现全链路性能问题诊断。本文将详细介绍如何通过async-profiler采集关键性能数据,结合GC日志进行深度分析,快速定位JVM应用

gitblog_01095的博客 818

fastadmin云快充充电桩系统部署文档uniapp

多商户 嘎嘎快充V1.0部署文档 一、服务器环境: 服务器配置4核心8GB内存5M带宽以上配置 VX next1402 只支持linux环境 nginx1.22 php7.2 开启redis、fileinfo扩展,关闭禁用workerman gatewayworkerman需要的函数,如pcntl相关的函数 mysql5.7 supervisor redis 注意: 1.站点必须配置https、websocket配置wss 2.注意开放直连服务端口:2024,并添加到安全组 二、必

itholiday2014的博客 1630

Win11下CH340串口识别失败的终极排查指南:从驱动更新到硬件电路检查

本文提供了Windows 11系统下CH340串口芯片识别失败的全面排查指南。从驱动更新、系统设置等软件层面入手,逐步深入到USB线缆、电源测量等硬件连接检查,并重点剖析了硬件设计细节,如电源退耦电容容值对设备描述符请求的关键影响,最终帮助开发者系统性地定位并解决识别难题。

weixin_29174013的博客 591

【ZGC内存泄漏检测神器】:20年专家亲授5大核心工具与实战技巧

快速解决ZGC内存泄漏难题,揭秘5大高效检测工具与实战技巧。涵盖常见场景、精准定位方法及性能优化策略,助力Java应用稳定运行。由20年经验专家倾囊相授,工具组合实用性强,值得收藏。

PixelGlow的博客 668

Autodesk激活无无网络选项?许可类型与脱机激活排查修复指南

软件许可激活是保障正版授权正常使用的核心环节,常见的授权模式包括单机版许可和网络版许可,两者在认证机制和应用场景上有所区别。单机版离线授权依托 FlexNet Licensing Service 等底层服务组件,在断网或内网环境下为用户提供可靠的技术支持与授权验证路径。然而在实际部署中,激活窗口并不总是显示“无网络激活方式”入口,这可能与许可类型选择、网络环境干扰、组件安装残留或系统时间偏差有关。理解入口的动态呈现逻辑与排查顺序,有助于在 AutoCAD、Revit 等 Autodesk 产品中高效解决脱机

weixin_28709649的博客 355

Java飞行记录 (JFR)

一、JFR 飞行记录器 Java Flight Recorder(JFR)是一个商业特性,用在生产服务器上是需要商业许可的。 JFR 记录了关于 Java 运行时及运行在其内的 Java 应用程序的详细信息,记录用少量的开销完成。数据是作为时间上的数据点(称为事件)记录的。典型的事件可以是线程等待锁、GC、CPU 周期使用数据等。 在创建飞行记录时,你可以选择哪些事件应当保存,这叫做记录模板。有些模板只保存基本事件,对性能几乎没有影响。其他模板可能有轻微的性能开销,还可能触发 GC 来收集更多信息。通常,超

iloki的博客 3773

基于MicroPython的ESP32与微信小程序MQTT通信实战

本文详细介绍了基于MicroPython的ESP32与微信小程序通过MQTT协议实现远程控制的完整实战方案。项目利用巴法云作为免费MQTT服务器,提供了从设备端编程、小程序开发到通信调试的全流程指南,帮助开发者快速构建低成本、易上手的物联网应用,如智能开关、传感器监控等。

week9的博客 634

Transformer实战(39)——多模态生成式Transformer

能够理解多种类型输入的模型被称为多模态模型。多模态学习是人工智能 (Artificial Intelligence, AI) 领域的重要研究方向之一,长期受到众多研究人员的关注。本节将介绍使用多模态模型的生成式 AI,包括文本到图像 (text-to-image) 和文本到音乐 (text-to-music) 的生成模型。将介绍 Stable Diffusion 及其工作原理,同时也将介绍 MusicGen 和 AudioGen 模型。

盼小辉丶的博客 2449

java jfr

是一个低开销的事件记录工具,用于收集运行时的详细信息,帮助开发人员和运维人员分析和优化 Java 应用程序的性能。JFR 提供了丰富的事件类型,包括垃圾回收、线程、锁、JVM 操作等,并且可以通过配置文件灵活控制事件的捕获。JFR 是一个功能强大的工具,通过事件记录和分析,帮助开发者深入了解 Java 应用程序的运行状态。通过灵活的配置和丰富的事件类型,JFR 可以满足从生产环境监控到性能调优的各种需求。

qq_62784677的博客 1303

第3.4章 机器人第三方库实战总结(四):G2O优化库从入门到实战(附SLAM实例代码)

自定义边同样是满足复杂应用需求的重要手段。自定义边时,需要明确边所连接的顶点类型以及边所表示的误差项的计算方式。假设我们要定义一条边,用于约束两个上述自定义顶点之间的相对位姿和传感器偏移量关系。我们可以这样定义边类:public:// 计算误差// 计算雅可比矩阵// 读盘和存盘函数,这里暂不实现。

行知SLAM 358

使用JFR/JMC(Java Flight Recorder/Mission Control)进行深度性能分析

除了 JVM 提供的内置事件之外,我们还可以自定义 JFR 事件来收集应用程序特定的性能数据。

weixin_41455464的博客 1483

第244篇 视觉SLAM后端之BA优化——Bundle Adjustment的原理

本文介绍了SLAM后端优化中的Bundle Adjustment(BA)技术。BA通过同时优化相机位姿和3D路标点位置,最小化重投影误差,解决前端估计的累积误差问题。文章详细讲解了BA的数学原理,包括目标函数构建、Gauss-Newton法和Levenberg-Marquardt法求解过程,以及利用稀疏性和Schur补加速计算的关键技术。对比了全量BA和增量BA的优缺点,并介绍了Ceres、g2o等工程实现工具。BA作为SLAM后端的核心算法,其理解深度直接影响系统性能优化能力。

郑伟强dev的专栏 347

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

java 事件流_Java中JDK14的新特性之JFR,JMC和JFR事件流(推荐)

简介Java Flight Recorder(JFR)是JVM的诊断和性能分析工具。它可以收集有关JVM以及在其上运行的Java应用程序的数据。JFR是集成到JVM中的,所以JFR对JVM的性能影响非常小,我们可以放心的使用它。一般来说,在使用默认配置的时候,性能影响要小于1%。JFR的历史很久远了。早在Oracle2008年收购BEA的时候就有了。JFR一般和JMC(Java Mission C...

weixin_42502075的博客 402

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

JDK14的新特性:JFR,JMC和JFR事件流

Java Flight Recorder(JFR)是JVM的诊断和性能分析工具。它可以收集有关JVM以及在其上运行的Java应用程序的数据。JFR是集成到JVM中的,所以JFR对JVM的性能影响非常小,我们可以放心的使用它。 一般来说,在使用默认配置的时候,性能影响要小于1%。 JFR的历史很久远了。早在Oracle2008年收购BEA的时候就有了。JFR一般和JMC(Java Mission Control)协同工作。 JFR是一个基于事件的低开销的分析引擎,具有高性能的后端,可以以二进制格式编写事

程序那些事 9574

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

java性能 jfr

Java性能分析工具JFR Java Flight Recorder(简称JFR)是Java平台上的一款性能分析工具,它能够捕获和记录JVM运行时的各种数据,帮助开发人员分析应用程序的性能问题并优化程序性能。JFR通常被用于生产环境中对Java应用程序进行性能调优。 JFR的基本原理 JFR通过事件驱动的方式来记录JVM的...

weixin_40686088的博客 354

(13)性能诊断工具应用

JDK内置的低开销性能监控工具从JDK 11开始完全开源收集运行时信息,几乎不影响应用性能(<1%开销)低开销Java应用分析工具基于采样的异步分析器支持CPU、内存、锁等多种分析模式可生成火焰图直观展示性能瓶颈。

真实的菜的博客 928

JVM生产环境问题定位与解决实战(三):揭秘Java飞行记录器(JFR)的强大功能

是 Oracle JDK 内置的性能分析工具,用于监控 JVM 和 Java 应用程序的运行时行为。低开销:生产环境中通常仅产生1%左右的性能损耗实时监控:可记录 JVM 事件、方法调用、内存分配等详细信息、支持动态启停记录事件驱动:捕获超过 200 种不同类型的事件(JDK 11+)集成分析:与 Java Mission Control (JMC) 工具深度集成。

篱笆女人和狗的博客 2351

Java 命令 jmap、jstack、jstat and JFR

jstat

howeres的博客 929
上一篇: 【实例 main 的调试终极指南】:掌握5大核心技巧,快速定位程序异常
下一篇: 启动太慢被老板骂?Java工程师必备的Spring Boot提速指南,速看!
InitFlow
博客等级 码龄1年 145粉丝 2166原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值