当前位置: 首页 > article >正文

JVM生产环境问题定位与解决实战(二):JConsole、VisualVM到MAT的高级应用

生产问题定位指南:几款必备的可视化工具

引言

在上一篇文章中,详细的介绍了JDK自带的一系列命令行工具,,如jps、jmap、jstat、jstack以及jcmd等,这些工具为排查和诊断Java虚拟机(JVM)问题提供了坚实的基础。这些工具虽然强大,但使用门槛相对较高,且信息的呈现方式较为原始,不易于直观理解。为了弥补这一不足,本篇将重点介绍三个可视化工具:JConsole、VisualVM和MAT(Memory Analyzer Tool)。这些工具以图形界面的形式,将复杂的Java虚拟机信息以直观、易懂的方式呈现出来,极大地降低了问题定位的难度。

工具选型全景图

问题类型
性能问题
内存问题
线程问题
VisualVM
JConsole
MAT
VisualVM

1. JConsole

简介

JConsole 是 Java 开发工具包(JDK)自带的一个监控和管理工具,主要用于监控 Java 应用程序的性能和资源消耗。它通过 JMX(Java Management Extensions)技术连接到 Java 虚拟机(JVM),并提供实时的监控数据。

使用场景

JConsole 适用于需要快速查看 JVM 状态和性能指标的场景,尤其是在开发环境和测试环境中。它的简单易用性使得开发者和运维人员可以迅速定位内存泄漏、线程死锁等问题。

核心功能矩阵

功能模块监控指标示例使用价值
内存监控各分区使用趋势、GC次数/耗时发现内存泄漏征兆
线程监控活动线程数、死锁检测诊断线程阻塞问题
MBean操作动态修改日志级别、触发GC实时干预生产环境
类加载监控已加载类数量/卸载情况检测类加载泄漏

启动JConsole

启动JConsole,选择目标Java进程进行连接。连接成功后,丰富的监控信息即刻呈现。例如,通过内存视图,您可以直观观察到内存使用的变化趋势,及时发现并解决内存泄漏的隐患。

# 启动jconsole
jconsole
# 带鉴权的远程连接
jconsole -J-Djavax.net.ssl.keyStore=/path/to/keystore \-J-Djavax.net.ssl.keyStorePassword=changeit \service:jmx:rmi:///jndi/rmi://192.168.1.100:9999/jmxrmi

启动JConsole,选择目标Java进程进行连接

核心功能

1. 概览(Overview)
  • 作用:显示Java虚拟机(VM)和监控值的概览信息。
  • 用法:在“概述”标签中,可以查看CPU使用率、内存使用率、线程数以及Java VM中加载的类的数量等关键性能指标。这些指标通常以折线图的形式展示,帮助开发者快速了解应用程序的整体性能状况。此外,对着图表点击右键可以保存数据到CSV文件,以便后续使用其他工具进行深入分析。
    在这里插入图片描述
2. 内存 (Memory)
  • 作用:显示内存使用信息,包括堆内存、非堆内存以及内存池的状况。
  • 用法:在“内存”标签中,开发者可以查看堆内存和非堆内存的使用量,以及内存池(如Eden Space、Survivor Space、Tenured Gen等)的使用情况。此外,还可以查看不同垃圾回收器(GC)进行垃圾回收的次数和时间。这些信息对于调优内存性能和诊断内存泄漏非常有用。开发者可以手动触发垃圾回收操作,并观察内存变化以评估性能。
    在这里插入图片描述
3. 线程 (Threads)
  • 作用:显示线程使用信息。
  • 用法:线程标签展示了当前 JVM 中所有活动线程的状态,包括它们的名称、状态、阻塞计数、等待计数以及堆栈跟踪信息 2。此标签还包括一个“检测死锁”按钮,可以帮助识别线程间是否存在死锁的情况。这对于调试多线程应用中的同步问题至关重要。
    在这里插入图片描述
    在这里插入图片描述
4. 类(Classes)
  • 作用:显示类装载信息。
  • 用法:在“类”标签中,可以监控 JVM 中类的加载和卸载情况。提供类加载器的相关信息,有助于排查类加载问题。
    在这里插入图片描述
5. VM 摘要(VM Summary)
  • 作用:显示Java虚拟机信息。
  • 用法:在“VM概要”标签中,可以查看有关Java虚拟机的详细信息,包括JVM版本、内存设置(如堆大小和非堆大小)、垃圾回收器类型等。这些信息对于了解JVM的配置和调优性能非常有帮助。
    在这里插入图片描述
6.MBeans
  • 作用:显示MBean信息。
  • 用法:在“MBeans”标签中,可以浏览和管理Java管理扩展(MBean)服务器中的MBean。MBean是一种Java对象,它符合特定的管理接口,使得开发者可以通过标准的方式对应用程序进行管理。通过MBeans,开发者可以监控和管理应用程序的各种资源,如数据库连接池、消息队列等。此外,还可以执行自定义的管理操作,如重启服务、更改配置参数等。
    在这里插入图片描述

2. VisualVM

简介

VisualVM 是另一个 JDK 自带(Oracle JDK 9 中已经不再捆绑,需单独下载)的工具,它集成了多个监控和诊断工具,提供了一个统一的界面来监控 Java 应用程序的性能和资源使用情况。VisualVM 支持本地和远程监控,并且可以通过插件扩展功能。同时,VisualVM 支持对 jmap 生成的堆转储文件和 jstack 生成的线程转储文件进行分析,为离线数据检测提供了有力支持。

使用场景

VisualVM,这一集多种功能于一身的Java性能监控与分析工具,不仅提供CPU使用率、内存使用率、线程活动等实时监控功能,还支持生成性能与内存快照,为您的后续分析与报告提供坚实基础。此外,VisualVM的插件扩展机制,更使其功能无限延伸,满足您的多样化需求。

核心功能矩阵

功能模块监控指标/操作示例使用价值
CPU Profiling热点方法分析、调用树、采样/精确模式定位性能瓶颈
内存分析堆/非堆内存使用、GC活动、对象直方图发现内存泄漏、优化内存分配
线程监控线程状态、死锁检测、线程Dump诊断线程阻塞、死锁问题
MBean操作动态修改配置、触发GC、查看运行时信息实时干预生产环境
快照分析性能快照、内存快照、线程快照历史问题回溯分析
插件扩展BTrace脚本、TDA分析、GC日志可视化深度定制分析能力

启动VisualVM

在 Oracle JDK 6~8 版本中会默认包含在里面,直接使用命令启动

jvisualvm   

JDK8的8u361版本及Oracle JDK9之后需要单独下载工具,具体可以参考这篇博客。
启动VisualVM,选择本地或远程Java进程进行监控。在监控界面中,CPU使用率、内存使用率等关键指标一目了然。通过内置的分析器,您可以轻松生成快照与报告,深入挖掘应用性能的秘密。例如,内存分析器将助您发现内存泄漏问题,并详细展示对象的内存使用情况及引用关系。
在这里插入图片描述

核心功能

1. 概述(Overview)

作用
概述标签提供了Java应用程序的基本信息和性能概览。它显示应用程序的启动时间、持续时间、JVM版本、类路径、系统属性等基本信息,以及CPU使用率、内存使用率等关键性能指标。
在这里插入图片描述

2. 监视(Monitor)标签

作用
监视页面用于实时查看 JVM 的关键性能指标,包括堆内存使用情况、非堆内存(如永久代或元空间)使用情况、垃圾回收活动以及加载的类的数量 。用户可以通过此页面手动触发垃圾回收,并观察其对内存的影响。当出现 OutOfMemoryError 时,还可以配置生成堆转储文件。

用法

  • 在监视标签中,你可以看到CPU使用率的实时变化,以及内存的使用情况,包括堆内存的使用量、垃圾回收次数和时间等。
  • 类部分显示已加载的类数量和卸载的类数量,帮助你了解类的加载和卸载情况。
  • 线程部分显示当前活动的线程数量,以及线程的状态(如运行、等待、阻塞等)。
  • 你可以通过监视这些数据,及时发现性能瓶颈或异常行为。
    在这里插入图片描述

3. 线程(Threads)标签

作用
线程页面展示了当前 JVM 中所有活动线程的状态,包括线程名称、状态、CPU 使用率等 。这里有一个特别有用的功能是“检测死锁”,可以帮助识别是否存在线程间的死锁问题。通过时间线视图,可以追踪线程在不同时间段内的状态变化,这对于分析多线程应用中的并发问题非常有帮助。

用法

  • 在线程标签中,你可以看到所有线程的详细信息,包括线程ID、名称、状态、优先级等。
  • 你可以通过线程ID或名称进行筛选,找到特定的线程。
  • 线程堆栈信息部分显示每个线程的堆栈调用情况,帮助你了解线程的执行路径和状态。
  • 如果发现线程死锁或性能问题,你可以通过线程Dump功能生成线程的堆栈信息,并将其保存为文件,以便后续分析。
    在这里插入图片描述
    在这里插入图片描述

4. 抽样器(Sampler)标签

作用
抽样器/剖析器页面允许用户执行 CPU 和内存采样,以了解应用程序中哪些方法消耗了最多的资源 。对于 CPU 分析,可以看到每个方法的调用次数和总执行时间;对于内存分析,则可以查看对象分配的情况及存活的对象数量。这有助于定位性能瓶颈并进行针对性的优化。

用法

  • 在抽样器标签中,你可以选择对CPU或内存进行取样分析。
  • 取样过程中,VisualVM会定期收集应用程序的性能数据,包括方法的调用次数、执行时间等。
  • 取样完成后,你可以在分析结果中看到每个方法的性能数据,包括方法的调用次数、执行时间占比等。
  • 通过这些数据,你可以找到性能瓶颈并进行优化。例如,你可以发现哪些方法占用了较多的CPU时间或内存空间,并考虑对这些方法进行优化。
    在这里插入图片描述
    在这里插入图片描述

5. Profiler(分析器)标签

作用
Profiler标签提供了对Java应用程序的详细性能分析能力。它可以收集应用程序的方法级性能数据,并帮助你找到性能瓶颈。

用法

  • 在Profiler标签中,你可以选择对CPU或内存进行分析。
  • 分析过程中,VisualVM会收集应用程序的方法级性能数据,包括方法的调用次数、执行时间等。
  • 分析完成后,你可以在分析结果中看到每个方法的性能数据,并可以通过调用树或热点方法视图进行进一步分析。
  • 通过这些数据,你可以深入了解应用程序的性能状况,并找到性能瓶颈。例如,你可以发现哪些方法占用了较多的CPU资源或内存空间,并考虑对这些方法进行优化或重构。
    在这里插入图片描述
    在这里插入图片描述

6.Visual GC插件

作用
将可视垃圾收集监视工具集成到VisualVM中。Visual GC附加到应用程序,并收集并以图形方式显示垃圾收集,类加载器和HotSpot编译器性能数据。
用法
在 VisualVM 中安装插件:点击 工具 -> 插件,选择 可用插件 标签,选中所需插件并点击 安装,然后重启 VisualVM。
在这里插入图片描述

在这里插入图片描述

离线分析

不能直接连接生产环境

VisualVM通常通过JMX(Java Management Extensions)或JDP(Java Debug Wire Protocol)协议直接连接到正在运行的Java应用程序。这种连接方式适用于本地开发环境或测试环境,因为它允许开发者实时监控和分析应用程序的性能。然而,在生产环境中,直接连接通常是不被允许的。
VisualVM为了收集数据需要与目标JVM建立连接并交换信息,这个过程会占用一定的网络带宽和服务器资源,可能会加重服务器的负担,尤其是在高并发或资源紧张的情况下。此外,开放用于远程监控的端口(例如JMX端口)还可能引入安全风险,如果不正确配置防火墙规则和访问控制,可能导致未授权访问,从而威胁到系统的安全性。因此,在生产环境中,通常建议采用分析由jmap和jstack等工具生成的离线文件的方式来进行故障排查和性能调优,这样可以在不影响生产系统的情况下深入分析潜在问题。
在上一篇文章中介绍了使用jmap创建堆转储、jstack生成线程转储,以及设置JVM参数-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=自动保存内存溢出时的堆转储文件,本文就不再赘述。

加载堆转储文件

启动VisualVM,然后选择“文件”菜单中的“装入”,接着浏览并选择之前保存的.hprof文件即可开始分析。
在这里插入图片描述
在这里插入图片描述

3. MAT(Memory Analyzer Tool)

简介

Memory Analyzer (MAT) 是一个开源工具,由 Eclipse 社区开发和维护。它主要用于分析 Java 堆转储文件,帮助开发者识别内存泄漏、分析内存使用情况、查找大对象等。MAT 提供了丰富的图表和报告,使得内存分析变得更加直观和易于理解

使用场景

MAT 适用于需要深入分析内存问题的场景,尤其是在生产环境中出现内存泄漏或内存溢出时。它的强大分析能力使得运维专家可以快速定位内存问题的根本原因,并提供有效的解决方案。

主要功能

  • 内存泄漏检测:通过分析堆转储文件,识别潜在的内存泄漏问题。
  • 对象占用分析:显示每个对象占用的内存大小,帮助识别内存占用过高的对象。
  • 引用链分析:显示对象的引用链,帮助理解对象的生命周期和引用关系。
  • 报告生成:生成详细的内存分析报告,便于团队共享和讨论。

安装与启动MAT

你可以从Eclipse Memory Analyzer的官方网站下载最新版本的MAT。安装完成后,启动MAT,选择“File”菜单中的“Open Heap Dump”选项,浏览到你的堆转储文件(通常是一个.hprof文件),并打开它。

在这里插入图片描述
常见选项的含义:

  1. Leak Suspects Report:内存泄漏可疑点报告,自动检查堆转储是否存在泄漏嫌疑,报告哪些对象被保存起来,为什么它们没有被垃圾收集,最常用的模式
  2. Component Report: 元件报告,分析一组对象是否存在可疑的内存问题:重复的字符串、空集合、终结器、弱引用等。
  3. Re-open previously run reports: 打开以前的运行报告;

在这里插入图片描述

核心功能

1. 泄露疑点(Leak Suspects)

作用:报错概览标签自动分析当前内存泄漏的主要原因,并列出可能的泄漏点和相关对象。

用法:打开MAT后,加载堆快照文件,报错概览通常会在概览(Overview)页签下的Reports部分显示。用户可以查看列出的内存泄漏嫌疑对象,并通过点击详情(detail)链接获取更详细的信息,包括泄漏对象的最快路径和被引用关系。
在这里插入图片描述
在这里插入图片描述

2. 直方图(Histogram)

作用:直方图列出了堆中每个类及其对应的对象数量和所占用的内存大小,帮助用户了解内存分布情况。

用法:在MAT的概览页签下可以找到直方图。用户可以通过类名(ClassName)进行检索,查看特定类的对象数量和内存占用情况。此外,直方图还支持右键点击对象,查看其引用关系(incoming/outgoing references)。
在这里插入图片描述

3. 支配数(Dominator Tree)

作用:支配数视图以占用总内存的百分比方式列举出所有实例对象,帮助用户发现大内存对象及其依赖关系。

用法:在MAT中,支配数视图通常位于概览页签下。用户可以通过该视图了解哪些对象占用了大量内存,并通过点击对象查看其保留集(Retained Set)和引用关系。支配数视图是分析内存泄漏和优化内存使用的重要工具。
在这里插入图片描述

4. 线程视图(Thread Overview)

作用:线程视图展示了当前进程dump时的所有线程的堆栈信息,帮助用户定位线程执行的方法层级关系和异常问题。

用法:在MAT中,用户可以通过点击一级导航栏中的线程视图图标来打开该视图。在线程视图中,用户可以查看每个线程的堆栈信息,包括线程名称、状态、优先级以及执行的代码行等。这对于分析线程死锁、性能瓶颈等问题非常有帮助。

在这里插入图片描述

5. 顶级消费者(Top Consumers)

作用:Top Consumers标签按照包名和类分组,列出占用内存最多的对象。它帮助开发者快速定位哪些类或包占用了大量内存,从而进行针对性优化。
在这里插入图片描述

5. 重复类(Duplicate Classes)

作用:Duplicate Classes标签用于检测由多个类加载器加载的相同类。在Java应用中,如果同一个类被多个类加载器加载,可能会导致内存浪费和潜在问题。通过Duplicate Classes标签,开发者可以快速识别这些问题。

在这里插入图片描述

总结

在生产问题定位过程中,选择合适的可视化工具可以大大提高问题诊断的效率和准确性。JConsole、VisualVM 和 MAT 是几款常用的工具,它们各自有不同的优势和适用场景。运维专家应根据具体问题的性质和环境选择合适的工具,并结合实际经验进行深入分析。

通过熟练掌握这些工具,运维团队可以更高效地应对生产环境中的各种挑战,确保系统的稳定性和性能。

相关文章:

JVM生产环境问题定位与解决实战(二):JConsole、VisualVM到MAT的高级应用

生产问题定位指南:几款必备的可视化工具 引言 在上一篇文章中,详细的介绍了JDK自带的一系列命令行工具,,如jps、jmap、jstat、jstack以及jcmd等,这些工具为排查和诊断Java虚拟机(JVM)问题提供…...

wsl2安装的ext4.vhdx瘦身、打包、导入

1.清理APT缓存: Ubuntu使用APT进行软件包管理,它会在安装过程中保留下载的软件包。清理这些缓存可以释放空间: sudo apt-get clean2.删除不必要的软件包: 删除不再需要的软件包和它们的依赖项: sudo apt-get autoremove3.压缩磁盘空间 ex…...

力扣3102.最小化曼哈顿距离

力扣3102.最小化曼哈顿距离 题目 题目解析及思路 题目要求返回移除一个点后的最小的最大曼哈顿距离 最大最小值的题一般直接想到二分 本题有一个简单办法就是利用切比雪夫距离 当正方形转45,即边上点**( x , y ) -> (x y , y - x)时,两点间max(…...

国标28181协议在智联视频超融合平台中的接入方法

一. 国标28181介绍 国标 28181 协议全称是《安全防范视频监控联网系统信息传输、交换、控制技术要求》,是国内视频行业最重要的国家标准,目前有三个版本: 2011 年:推出 GB/T 28181-2011 版本,为安防行业的前端设备、平…...

【学习笔记】LLM+RL

文章目录 1 合成数据与模型坍缩(model collapse),1.1 递归生成数据与模型坍缩1.2 三种错误1.3 理论直觉1.4 PPL指标 2 基于开源 LLM 实现 O1-like step by step 慢思考(slow thinking),ollama,streamlit2.1…...

Linux故障排查和性能优化面试题及参考答案

目录 如何查看 Linux 系统中的 CPU、内存、磁盘等资源使用情况? 什么是 Linux 中的负载(Load Average)?如何解读它? 如何通过 top 和 htop 命令监控系统性能? 如何使用 mpstat 命令来查看 CPU 的利用情况? 如何分析系统 CPU 瓶颈? 如何分析 CPU 瓶颈?如何优化 CP…...

【论文精读】YOLO-World:实时开放词汇目标检测

论文地址: YOLO-World: Real-Time Open-Vocabulary Object Detection 源代码:YOLO-World 摘要 YOLO系列检测器因其高效性和实用性而被广泛认可。然而,它们依赖于预定义和训练过的物体类别,这限制了其在开放场景中的适用性。为了…...

【AI时代】可视化训练模型工具LLaMA-Factory安装与使用

文章目录 安装训练使用 安装 官方地址:https://github.com/hiyouga/LLaMA-Factory 创建虚拟环境 conda create -n llama-factory conda activate llama-factory安装 git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git cd LLaMA-Factory pip in…...

Docker 部署 OnlyOffice 文档服务器

Docker 部署 OnlyOffice 文档服务器 前言一、准备工作二、设置变量和目录结构三、创建并运行 OnlyOffice 容器四、访问 OnlyOffice 文档服务器五、配置和管理总结 前言 OnlyOffice 是一个强大的开源文档编辑平台,支持文档、表格、演示文稿等文件格式的编辑。通过 D…...

将产品照片(form.productPhotos)转为 JSON 字符串发送给后端

文章目录 1. 前端 form.productPhotos 的当前处理a. 组件绑定b. 当前发送逻辑 2. 如何将 form.productPhotos 转为 JSON 字符串发送给后端a. 修改前端 save() 方法b. 确保 esave API 支持接收字符串 基于你提供的 identify-form.vue 代码,我将分析如何将产品照片&a…...

【科研绘图系列】R语言绘制小提琴图、散点图和韦恩图(violin scatter plot Venn)

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍加载R包数据下载画图1画图2画图3画图4画图5画图6画图7参考介绍 【科研绘图系列】R语言绘制小提琴图、散点图和韦恩图(violin & scatter plot & Venn) 加载R包 library…...

kotlin 知识点一 变量和函数

在Kotlin中定义变量的方式和Java 区别很大,在Java 中如果想要定义一个变 量,需要在变量前面声明这个变量的类型,比如说int a表示a是一个整型变量,String b表 示b是一个字符串变量。而Kotlin中定义一个变量,只允许在变量…...

科普:你的笔记本电脑中有三个IP:127.0.0.1、无线网 IP 和局域网 IP;两个域名:localhost和host.docker.internal

三个IP 你的笔记本电脑中有三个IP:127.0.0.1、无线网 IP 和局域网 IP。 在不同的场景下,需要选用不同的 IP 地址,如下为各自的特点及适用场景: 127.0.0.1(回环地址) 特点 127.0.0.1 是一个特殊的 IP 地…...

solidity之Foundry安装配置(一)

一门面向合约的高级编程语言,主要用来编写以太坊只能合约。 Solidity受C语言,Python和js影响,但为编译成为以太坊虚拟机字节码在EVM上执行,很多特性和限制都和EVM相关。 Solidity 是静态类型语言,支持继承、库、自定义…...

爬虫解析库:parsel的详细使用

文章目录 1. 安装 Parsel2. 基本用法3. 使用 CSS 选择器提取数据4. 使用 XPath 提取数据5. 链式调用6. 正则表达式提取7. 处理嵌套元素8. 处理默认值9. 结合 Requests 使用10. 处理复杂 HTML11. 性能优化12. 注意事项 引言:本博客详细介绍爬虫解析库parser的详细使用…...

PHP-create_function

[题目信息]: 题目名称题目难度PHP-create_function2 [题目考点]: create_function ( string args , string args , string code )[Flag格式]: SangFor{wWx5dEGHHhDUwmST4bpXwfjSzq43I6cz}[环境部署]: docker-compose.yml文件或者docker …...

从工程师到系统架构设计师

在技术领域,从一名初出茅庐的工程师成长为独当一面的系统架构设计师,是一条需要长期积累、持续突破的路径。这一过程不仅需要扎实的技术功底,更需要思维的升级和视野的拓展。以下将结合不同阶段的特征,为你梳理一条清晰的成长路线…...

FFmpeg 是什么?为什么?怎么用?

摘要:本文介绍了 FFmpeg,一个功能强大的开源多媒体处理工具,广泛应用于视频和音频文件的处理。FFmpeg 支持多种多媒体格式,能够实现视频编码/解码、格式转换、裁剪、合并、音频提取、流媒体处理等功能。本文详细阐述了 FFmpeg 的主…...

云计算及其他计算

云计算知识思维导图:https://kdocs.cn/l/cpl2Kizx7IyC 云计算的核心判断标准通常基于美国国家标准与技术研究院(NIST)的定义,并结合实际应用场景。以下是判断一个服务是否为云计算的关键标准,以及对应的服务类型&#…...

前端Toast提示快速入门

White graces:个人主页 🙉专栏推荐:Java入门知识🙉 🐹今日诗词:十年一觉扬州梦,赢得青楼薄幸名🐹 ⛳️点赞 ☀️收藏⭐️关注💬卑微小博主🙏 ⛳️点赞 ☀️收藏⭐️关注&#x1f4…...

体育电竞比分网开发流程

开发一个体育电竞比分网的流程可以分为以下几个主要步骤: 1. 需求分析 目标用户:确定网站的主要用户群体,如体育迷、电竞爱好者等。 功能需求:列出网站需要实现的功能,如实时比分更新、赛事日程、新闻资讯、用户评论…...

垂类大模型微调(一):认识LLaMA-Factory

LlamaFactory 是一个专注于 高效微调大型语言模型(LLMs) 的开源工具框架,尤其以支持 LLaMA(Meta 的大型语言模型系列)及其衍生模型(如 Chinese-LLaMA、Alpaca 等)而闻名。它的目标是简化模型微调流程,降低用户使用门槛; 官方文档 一、介绍 高效微调支持 支持多种微调…...

Opengl常用缓冲对象功能介绍及使用示例(C++实现)

本文整理了常用的opengl缓冲区对象并安排了使用示例 名称英文全称作用简述顶点数组对象Vertex Array Object (VAO)管理 VBO 和 EBO 的配置,存储顶点属性设置,简化渲染流程,避免重复设置状态顶点缓冲区对象Vertex Buffer Object (VBO)存储顶点…...

【量化策略】均值回归策略

【量化策略】均值回归策略 🚀量化软件开通 🚀量化实战教程 技术背景与应用场景 在金融市场中,均值回归策略是一种基于统计学原理的量化交易策略。该策略的核心思想是,资产价格和收益率最终都会回归到其长期平均值或趋势线。这…...

【CS285】高斯策略对数概率公式的学习笔记

公式介绍 在【CS285】中提到了高斯策略对数概率公式的公式如下: log ⁡ π θ ( a t ∣ s t ) − 1 2 ∥ f ( s t ) − a t ∥ Σ 2 const \log \pi_{\theta}(\mathbf{a}_t | \mathbf{s}_t) -\frac{1}{2} \left\| f(\mathbf{s}_t) - \mathbf{a}_t \right\|_{\S…...

C++双指针:算法优化的“左右互搏术”与高效问题破解全指南

C双指针:算法优化的“左右互搏术”与高效问题破解全指南 开篇故事:迷宫中的“双人探路策略” 想象两名探险者在迷宫中寻找出口: 快慢指针:一人快速探索死路,另一人稳步记录正确路径。左右指针:两人从两端…...

高级SQL技术在Python项目中的应用:ORM与深度性能优化

引言 在现代Python项目开发中,数据库交互远不止是数据的简单存取,它已成为构建高性能、可维护应用的核心瓶颈和关键能力所在。 仅仅依赖基础SQL查询,虽然入门简单,却难以应对日益增长的应用挑战。这些挑战主要体现在以下几个方面: 性能瓶颈: 数据量剧增: 从百万到数十亿乃…...

Pytorch实现论文:基于多尺度融合生成对抗网络的水下图像增强

简介 简介:提出了一种新型的水下图像增强算法,基于多尺度融合生成对抗网络,名为UMSGAN,以解决低对比度和颜色失真的问题。首先经过亮度的处理,将处理后的图像输入设计的MFFEM模块和RM模块生成图像。该算法旨在适应各种水下场景,提供颜色校正和细节增强。 论文题目:Und…...

从单片机的启动说起一个单片机到点灯发生了什么下——使用GPIO点一个灯

目录 前言 HAL库对GPIO的抽象 核心分析:HAL_GPIO_Init 前言 我们终于到达了熟悉的地方,对GPIO的初始化。经过漫长的铺垫,我们终于历经千辛万苦,来到了这里。关于GPIO的八种模式等更加详细的细节,由于只是点个灯&am…...

基于大语言模型的推荐系统(1)

推荐系统(recommendation system)非常重要。事实上,搜索引擎,电子商务,视频,音乐平台,社交网络等等,几乎所有互联网应用的核心就是向用户推荐内容,商品,电影&…...