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

Java大师成长计划之第12天:性能调优与GC原理

📢 友情提示:

本文由银河易创AI(https://ai.eaigx.com)平台gpt-4o-mini模型辅助创作完成,旨在提供灵感参考与技术分享,文中关键数据、代码与结论建议通过官方渠道验证。

在 Java 编程中,性能调优是提升应用程序效率、响应速度以及资源利用率的重要手段。而垃圾回收(Garbage Collection, GC)机制则是 Java 虚拟机(JVM)中至关重要的一部分,它负责自动管理内存,避免了程序员手动释放内存的煎熬。深入理解 JVM 的调优手段和 GC 原理,将帮助开发者优化 Java 应用的性能,提升系统的稳定性和可用性。

一、Java虚拟机调优

Java 虚拟机(Java Virtual Machine, JVM)是执行 Java 程序的核心组件,负责加载字节码、执行代码和管理内存。随着 Java 应用程序的复杂性和规模不断增加,优化 JVM 的性能变得尤为重要。通过对 JVM 进行调优,不仅可以提高应用程序的使用效率,还能减少资源消耗,提高系统的响应速度和稳定性。本文将深入探讨 JVM 调优的相关策略和方法。

1.1 理解JVM的架构

在进行调优之前,我们需要了解 JVM 的基本架构。JVM 主要由以下几个部分组成:

  • 类加载器:负责加载和验证 Java 类,是 Java 程序运行的第一步。
  • 运行时数据区:包括方法区、堆区域、栈区域、程序计数器和本地方法栈。运行时数据区是 JVM 存储数据的地方,对内存管理起着关键作用。
  • 执行引擎:执行字节码指令,与底层硬件紧密相关。它决定了程序的执行速度。
  • 本地接口:用于与操作系统和其他编程语言进行交互。

1.2 堆内存调优

1.2.1 堆内存结构

在 JVM 的运行时数据区中,堆内存是最重要的部分之一,是存放所有对象和数组的地方。堆内存进一步划分为年轻代(Young Generation)和老年代(Old Generation)。

  • 年轻代(Young Generation):大多数对象的生命周期较短,它包含一个 Eden 区和两个 Survivor 区。对象在 Eden 区分配内存,大部分短期对象会在 GC 后被清理,而剩余对象会被移动到 Survivor 区。
  • 老年代(Old Generation):存放存活较长时间的对象。经过多次 GC 后仍然存活的对象将被晋升到老年代。

1.2.2 调整堆内存大小

使用 JVM 启动参数可以直接控制堆内存的大小:

  • -Xms<size>:设置初始堆内存大小,通常用于定义 JVM 启动时分配的最小内存。这能避免 JVM 启动后频繁扩展堆内存,从而提高性能。

  • -Xmx<size>:设置最大堆内存大小,定义应用程序可以占用的最大内存量。应根据)服务器的具体情况(如总内存、并发用户数)来合理设定。

  • -Xmn<size>:设置年轻代的内存大小,通常为总堆内存的 1/3 到 1/4。通过控制年轻代的大小,可以更有效地管理年轻代的 GC。

1.2.3 新生代和老年代比例

根据应用程序的特点调整新生代和老年代的比例,可以通过以下参数进行配置:

  • -XX:NewRatio=<n>:通过设置新生代和老年代的比例,例如 -XX:NewRatio=3 表示老年代是新生代的 3 倍。

适当增大新生代的大小,可以减少 Minor GC(年轻代的垃圾回收)次数,从而提高性能。而减小新生代的大小则可能增加内存碎片,并提升 Full GC(老年代的垃圾回收)的风险。

1.3 控制GC行为

1.3.1 垃圾收集器选择

选择合适的垃圾收集器可以显著提升性能。Java 提供多种垃圾收集器,用户可以根据应用特性和需求进行选择:

  • Serial Garbage Collector:适合小型应用,使用单线程进行垃圾回收,具有较低的内存占用,但相对较慢。
  • Parallel Garbage Collector:使用多线程进行并行垃圾收集,适用于 CPU 密集型应用,能够提高吞吐量。
  • **Concurrent Mark-Sweep (CMS)**:适合低延迟应用,采用并发回收机制以减少停顿时间,但较大的内存占用。
  • Garbage First(G1):适合于需要控制停顿时间的应用,能够动态调整收集策略。G1 收集器的优点在于可以划分堆为多个区域,减少大内存应用中的 GC 停顿。

选择合适的收集器要求理解应用的特点,例如大量短期对象的生成适合使用 G1,而长时间运行且对停顿时间敏感的应用可以考虑使用 CMS。

1.3.2 GC策略参数

使用 JVM 参数可以调整 GC 的策略和行为。例如:

  • -XX:+UseG1GC:启用 G1 垃圾收集器。
  • -XX:MaxGCPauseMillis=<N>:设置最大停顿时间,GC 将尝试在该时间内完成工作。
  • -XX:+PrintGCDetails:打印 GC 详细信息,包括内存使用、回收时间等,有助于分析 GC 性能。

1.3.3 GC日志分析

通过开启 GC 日志,开发者能够监控应用的内存消耗和 GC 停顿时间,并根据具体情况进行进一步调优。

java -Xlog:gc*:file=gc.log:time,tags:filecount=5,filesize=10M MyApplication

通过分析 GC 日志,开发者可以确定合适的 GC 策略、内存设置等,从而为优化决策提供依据。

1.4 CPU和内存监控

1.4.1 监控工具

JVM 提供了多种工具用于监控系统的性能,包括:

  • JVisualVM:图形化监控工具,可以实时监测 JVM 的内存使用、CPU 使用率、线程状态及 GC 行为。
  • Java Mission Control:用于性能分析的强大工具,可以跟踪应用的动态表现和性能瓶颈。
  • JConsole:简单易用的监控工具,常用于监控 JVM 资源使用和线程状况。

通过这些工具,开发者能够识别系统的瓶颈,进行针对性的调整。

1.4.2 系统级别的监控

除了 JVM 内的监控,结合操作系统监控工具(如 top 或 perf)分析 CPU 和内存使用情况,可以获取更全面的性能数据,促进更有效的调优。

1.5 小结

Java 虚拟机调优是一项复杂且深入的工作,涵盖了堆的设置、GC 策略、监控工具等多个方面。通过合理配置 JVM 参数和选择合适的垃圾收集器,可以显著提高 Java 应用程序的性能和响应速度。

在进行调优时,了解应用的具体需求和特点至关重要。定期监控和分析 GC 日志,及时调整内存配置,将有助于发现潜在问题,并确保系统在高负载情况下仍然能够保持高效运行。

掌握 JVM 调优不仅可以提高性能,还能增强对 Java 应用的管理能力。不断深化对 JVM 的理解,将使你在 Java 开发的道路上越走越远,逐步迈向 Java 大师的目标。

二、GC机制

垃圾收集(Garbage Collection,GC)是Java虚拟机(JVM)中一项至关重要的技术,负责自动管理内存,回收不再使用的对象,从而避免内存泄漏和程序崩溃。GC机制使得Java程序员不必手动管理内存,降低了开发复杂性。然而,GC也带来了一定的性能开销,理解其工作原理、类型以及如何调优GC策略,成为提高应用程序性能的重要技能。

2.1 垃圾收集的基本概念

垃圾收集的核心目标是标识并清除不再使用的对象,以释放内存空间。Java中对象的生命周期通常可以分为以下几个阶段:

  1. 对象创建:当程序需要使用一个对象时,JVM会在堆内存中为其分配空间。
  2. 对象使用:程序正常使用该对象并进行操作。
  3. 对象不可达:当对象不再被任何引用指向时,即认为该对象不可达,成为垃圾对象。此时,GC机制将开始工作,清理这些对象。

GC的目标是尽量减少程序的停顿时间,提高内存的利用率,确保程序的稳定运行。

2.2 GC工作原理

2.2.1 基本流程

GC的工作主要可以分为以下几个步骤:

  1. 标记(Marking):从根对象(GC Roots,如线程栈、静态变量、系统类等)开始,递归查找所有可达对象,标记它们为活跃对象。

  2. 清理(Sweeping):对未被标记的对象进行清理,将其内存回收,公开可用的内存空间。

  3. 整理(Compacting):为了解决内存碎片问题,GC可以选择将存活对象移动到堆的一侧,连续存储,从而减少外部碎片。

2.2.2 垃圾回收算法

Java中实现垃圾回收的算法有多种,常见的包括:

  • 标记-清除(Mark-and-Sweep):最基本的垃圾收集算法。会进行完整的标记和清除,但可能导致内存碎片。

  • 标记-整理(Mark-and-Compact):将标记后的存活对象压缩到内存的一侧,清除未标记的对象,避免了内存碎片问题。

  • 复制算法(Copying):将内存分成两块区域,使用一块进行分配对象,另一块则为空。当进行GC时,活动对象会被复制到空的区域中,回收内存时只需简单地清理未被复制的区域。

2.3 GC的类型

2.3.1 新生代与老年代

Java的堆内存中分为新生代(Young Generation)和老年代(Old Generation)。GC的类型通常会根据这些区域的不同而有所区分:

  • 新生代GC(Minor GC):主要清理新生代的垃圾对象。由于新生代中对临时对象的创建和销毁频繁,Minor GC通常会很快完成,停顿时间短。

  • 老年代GC(Full GC或Major GC):清理老年代中的对象,通常是更大的内存回收,前期GC工作量大,耗时也较长。因此,能够使老年代的对象得以回收变得更加重要。

2.3.2 垃圾收集器类型

Java虚拟机提供了多种垃圾收集器,用户可以根据应用程序的特点选择合适的收集器:

  • Serial垃圾收集器:单线程垃圾收集器,适合单核CPU和小型应用。其优点是实现简单,内存占用低,但在并发情况下可能产生较长的停顿。

  • Parallel垃圾收集器:多线程垃圾收集器,以提高吞吐量,适合CPU密集型应用。它减少了应用程序的停顿时间,并提高了内存回收的效率。

  • Concurrent Mark-Sweep (CMS) 垃圾收集器:针对低延迟的需求进行优化,可以并发处理标记和清理工作,适合对响应时间有严格要求的应用。不过,这种方式可能导致内存碎片。

  • G1(Garbage First)垃圾收集器:旨在避免大容量应用中的Full GC停顿。它将堆划分为多个区域,能够根据垃圾优先级进行回收,属于一种高效的分代收集器。

  • ZGC和Shenandoah:这两种是针对极低延迟的需求设计的并行、并发垃圾收集器,能够在短时间内完成对象的回收。

2.4 GC的表现与性能分析

2.4.1 GC的性能指标

在进行性能调优时,需要关注以下几个GC性能指标:

  • GC时间:每次GC耗时,通常用来衡量GC对应用性能的影响。建议监控GC的平均停顿时间。

  • 内存回收量:GC每次回收的内存量,了解内存使用情况,有助于决定是否需要进行参数调整。

  • GC频率:发生GC的次数,过于频繁的GC可能会影响系统运行。

2.4.2 GC日志分析

开通GC日志是分析和优化GC表现的重要手段。可以使用以下启动参数来记录GC日志:

java -Xlog:gc*:file=gc.log:time,tags:filecount=5,filesize=10M YourApplication

通过分析GC日志,可以知道GC的类型、每次GC的时间、回收的内存量等,这些信息有助于改进GC的设置。

2.5 小结

GC机制是Java系统内存管理的重要组成部分,它在应用程序性能上有直接的影响。了解GC的工作原理、算法、类型及性能指标,有助于开发者实现更有效的内存管理,从而推动Java应用的性能提升。

随着Java程序的复杂性增加,配合适当的垃圾收集策略,定期进行监控和分析,将助力于保持应用的高效运行和系统资源的合理利用。在未来的Java开发中,深入掌握GC的机制与优化技巧,将为你打造高性能应用打下坚实基础。

三、GC的配置与监控

在 Java 应用中,合理的垃圾收集(GC)配置和有效的监控手段是提高应用性能的关键。通过调整 JVM 参数并使用适当的工具进行监控,开发者可以优化内存管理,提高系统的响应速度和稳定性。

3.1 GC的配置参数

3.1.1 常用GC参数

为了有效地控制Java应用中的垃圾回收行为,开发者可以使用多种 JVM 参数。以下是一些常用的 GC 配置参数:

  • 选择垃圾收集器

    • -XX:+UseSerialGC:启用串行垃圾收集器。
    • -XX:+UseParallelGC:启用并行垃圾收集器。
    • -XX:+UseConcMarkSweepGC:启用并发标记-清除垃圾收集器。
    • -XX:+UseG1GC:启用 G1 垃圾收集器(推荐)。
  • 调整堆内存参数

    • -Xms<size>:设置初始堆内存大小。如 -Xms512m 设置初始堆大小为 512MB。
    • -Xmx<size>:设置最大堆内存大小。如 -Xmx2g 设置最大堆为 2GB。
    • -Xmn<size>:设置年轻代大小,调节新生代与老年代的比例以优化 GC 性能。
  • 调整 GC 频率与时间

    • -XX:MaxGCPauseMillis=<N>:设置期望的最大 GC 停顿时间。GC 过程会尽量在该时间内完成,减少应用的响应延迟。
    • -XX:GCTimeRatio=<N>:设置应用花费在 GC 上的时间占总时间的比例,帮助控制 GC 的频率。
  • GC 日志记录

    • -XX:+PrintGCDetails:打印 GC 的详细信息,包括每次 GC 的实际回收时间与内存情况。
    • -XX:+PrintGCTimeStamps:打印每次 GC 的时间戳,便于分析 GC 发生的顺序。
    • -Xlog:gc*:file=gc.log:time,tags:filecount=5,filesize=10M:在 JDK 9 及以上版本中记录 GC 日志至文件。

3.1.2 实施小建议

在配置 GC 时可以考虑以下建议:

  • 定期评估应用需求:根据具体应用场景调整 JVM 的 GC 设置。小型应用可以选择 Serial GC,大型多线程应用则可选择 G1 或 Parallel GC。
  • 建立基准线:在进行 GC 配置调整之前,先建立当前性能的基准线。通过监测 GC 表现与应用性能,可以找到最优的参数配置。
  • 逐步调整参数:不要一次性进行大量改变。建议逐步调整参数,观察性能变化,以便找到最佳的配置。

3.2 GC的监控工具

性能监控是确保 Java 应用健康运行的重要一环。通过监控 GC,可以及时发现内存使用的瓶颈和潜在的问题。以下是几种常用的 GC 监控工具和技术:

3.2.1 JVisualVM

JVisualVM 是自带于 JDK 的可视化监控工具,可以实时监控 JVM 的内存使用、CPU 使用率、线程状态等。它的优点包括:

  • 实时反馈:可视化呈现内存、CPU 使用情况,有助于快速识别问题。
  • 能力扩展:支持插件,允许用户根据需求自定义监控功能。
  • 内存快照:可以生成堆转储(heap dump),方便后续的分析和调试。

3.2.2 Java Mission Control

Java Mission Control 是 Oracle 提供的监控和性能分析工具。它能够深入分析Java应用的各个方面,包括:

  • 低性能影响:通过 JMX 采集性能数据,影响最小。
  • 分析模式:提供多种数据分析模式及可视化报告,有助于深入理解程序行为。
  • 诊断工具:集成多种诊断工具,从 GC 视角分析内存占用和对象生命周期。

3.2.3 Prometheus与Grafana

Prometheus 是一款开源监控和报警系统,可以配合 Grafana 创建可视化的监控页面。前者用来收集和存储监控数据,后者用户界面友好,适合大规模系统的长期监控:

  • 自定义指标:能够监控 JVM 的各类指标(如内存使用、GC 次数、时间等),构建个性化的监控方案。
  • 可视化图表:提供实时的图形展示,使得性能趋势一目了然。
  • 告警机制:支持配置报警规则,当应用性能下降或超出预设阈值时通知开发者。

四、总结

在 Java 开发和运维中,GC机制与性能调优是至关重要的两个方面。通过合理配置 JVM 的 GC 参数、选择合适的垃圾收集器,以及使用有效的监控工具,开发者可以显著提高应用的内存管理效率,确保系统稳定高效运行。

回顾整篇内容,以下几个要点是值得我们铭记的:

  1. 理解 GC 的原理与类型:掌握垃圾收集的基本原理与多种类型的垃圾收集器,能够帮助我们做出更明智的配置选择。

  2. 合理的 GC 配置:根据具体的应用场景选择合适的 JVM 参数,优化内存使用,并减少 GC 对性能的影响。

  3. 持续的监控与优化:利用工具(如 JVisualVM、Java Mission Control 和 Prometheus等)对 GC 性能进行实时监控,及时发现并解决潜在的内存问题。

在成为一名 Java 大师的道路上,掌握 GC 机制与调优方法将为你的职业发展奠定坚实的基础。不断学习、实践与总结,逐步超越自己的技术边界,推动 Java 应用及系统的全方位提升,最终实现高性能、高可用的应用产品。

相关文章:

Java大师成长计划之第12天:性能调优与GC原理

&#x1f4e2; 友情提示&#xff1a; 本文由银河易创AI&#xff08;https://ai.eaigx.com&#xff09;平台gpt-4o-mini模型辅助创作完成&#xff0c;旨在提供灵感参考与技术分享&#xff0c;文中关键数据、代码与结论建议通过官方渠道验证。 在 Java 编程中&#xff0c;性能调优…...

【MySQL】索引(重要)

目录 一、索引本质&#xff1a; 索引的核心作用 索引的优缺点 二、预备知识&#xff1a; 硬件理解&#xff1a; 软件理解&#xff1a; MySQL与磁盘交互基本单位&#xff1a; 三、索引的理解&#xff1a; 理解page&#xff1a; 单个page&#xff1a; 多个page&#x…...

C++多态(上)

目录 一、多态的概念 二、多态的定义及实现 1. 多态的构成条件 2. 虚函数 3. 虚函数的重写 4. C11 override 和 final 4.1 final 关键字 4.2 override 关键字 5. 重载、覆盖&#xff08;重写&#xff09;、隐藏&#xff08;重定义&#xff09;的对比 三、抽象类 1. 概…...

【AI提示词】 复利效应教育专家

提示说明 一位拥有金融学和教育学背景的知识型内容创作者&#xff0c;擅长用简单易懂的语言向读者解释复杂概念 提示词 # Role: 复利效应教育专家## Profile - language: 中文 - description: 一位拥有金融学和教育学背景的知识型内容创作者&#xff0c;擅长用简单易懂的语言…...

嵌入式系统基础知识

目录 一、冯诺依曼结构与哈佛结构 &#xff08;一&#xff09;冯诺依曼结构 &#xff08;二&#xff09;哈佛架构 二、ARM存储模式 &#xff08;一&#xff09;大端模式 &#xff08;二&#xff09;小端模式 &#xff08;三&#xff09;混合模式 三、CISC 与 RISC &am…...

如何克服情绪拖延症?

引言 你是否也曾有过这样的经历&#xff1f; 明明手头有重要的工作&#xff0c;却总是忍不住刷手机、看视频&#xff0c;直到最后一刻才匆忙赶工&#xff1f; 你是否在心里暗暗发誓“明天一定好好干”&#xff0c;但第二天依旧重复着同样的拖延&#xff1f; 其实&#xff0…...

【操作系统】哲学家进餐问题

问题描述 哲学家进餐问题是并发编程中的一个经典问题&#xff0c;描述了五位哲学家围坐在一张圆桌旁&#xff0c;他们的生活由思考和进餐组成。在圆桌上有五个盘子&#xff0c;每位哲学家面前一个盘子&#xff0c;盘子之间有一支叉子。哲学家进餐需要同时使用左右两支叉子。问题…...

Kotlin协程解析

目录 一、协程的使用 二、协程的执行原理 2.1、挂起函数的反编译代码及执行分析 2.2、协程执行流程分析 2.2.1、createCoroutineUnintercepted方法 2.2.2、intercepted方法 2.2.3、resumeCancellableWith方法 2.3、Dispatcher----分发器的实现 2.3.1、Main 分发器的实…...

Nginx核心功能 02

目录 Nginx代理技术核心概念 &#xff08;一&#xff09;正向代理&#xff08;Forward Proxy&#xff09; 1. 基本定义 2. 技术原理 3. 应用场景 &#xff08;二&#xff09;反向代理&#xff08;Reverse Proxy&#xff09; 1. 基本定义 2. 技术原理 3. 应用场景 一、…...

聊聊对Mysql的理解

目录 1、Sql介绍 1.1、SQL的分类 1.2、数据库的三大范式 1.3、数据表的约束 1.4、约束的添加与删除 2、核心特性 3、主要组件 4、数据结构原理 5、索引失效 6、常用问题 7、优势与局限 前言 MySQL是一个开源的关系型数据库管理系统(RDBMS)&#xff0c;由瑞典MySQL A…...

「Mac畅玩AIGC与多模态17」开发篇13 - 条件判断与分支跳转工作流示例

一、概述 本篇在多节点串联的基础上,进一步引入条件判断与分支跳转机制,实现根据用户输入内容动态走不同执行路径。开发人员将学习如何配置判断节点、定义分支规则,以及如何在工作流中引导执行方向,完成基础的逻辑控制。 二、环境准备 macOS 系统Dify 平台已部署并可访问…...

pycharm terminal 窗口打不开了

参考添加链接描述powershell.exe改为cmd.exe发现有一个小正方形&#xff0c;最大化可以看见了。...

JAVA:使用 MapStruct 实现高效对象映射的技术指南

1、简述 在 Java 开发中,对象之间的转换是一个常见的需求,尤其是在 DTO(数据传输对象)和实体类之间的转换过程中。手动编写转换代码既耗时又容易出错,而 MapStruct 是一个优秀的对象映射框架,可以通过注解生成高效的对象转换代码,从而大大提升开发效率。 本文将介绍 M…...

Linux线程深度解析:从基础到实践

Linux线程深度解析&#xff1a;从基础到实践 一、线程基础概念 1. 进程与线程定义 进程&#xff1a;一个正在运行的程序&#xff0c;是操作系统资源分配的最小单位&#xff08;拥有独立的地址空间、文件描述符等资源&#xff09;&#xff0c;状态包括就绪、运行、阻塞。线程…...

【ROS2】launch启动文件如何集成到ROS2(Python版本)

一、简单实操 1.创建/打开一个功能包 mkdir -p my_ws/src cd my_ws/src ros2 pkg create my_pkg_example --build-type ament_python 2.创建Launch文件的存放目录 将所有启动文件都存储在launch包内的目录中。 目录结构如下所示&#xff1a; src/my_pkg_example/launch/…...

用 PyTorch 轻松实现 MNIST 手写数字识别

用 PyTorch 轻松实现 MNIST 手写数字识别 引言 在深度学习领域&#xff0c;MNIST 数据集就像是 “Hello World” 级别的经典入门项目。它包含大量手写数字图像及对应标签&#xff0c;非常适合新手学习如何搭建和训练神经网络模型。本文将基于 PyTorch 框架&#xff0c;详细拆…...

碰撞检测学习笔记

目录 SUMO 模拟碰撞 LimSim pygame模拟碰撞检测 SUMO 模拟碰撞 LimSim 多模态大语言模型&#xff08;M&#xff09;LLM的出现为人工智能开辟了新的途径&#xff0c;特别是提供增强的理解和推理能力&#xff0c;为自动驾驶开辟了新途径。本文介绍LimSim&#xff0c;LimSim的…...

Sway初体验

Sway&#xff08;缩写自 SirCmpwn’s Wayland compositor[1]&#xff09;是一款专为 Wayland 设计的合成器&#xff0c;旨在与 i3 完全兼容。根据官网所述&#xff1a; Sway 是 Wayland 的合成器&#xff0c;也是 x11 的 i3 窗口管理器的替代品。它可以根据您现有的 i3 配置工作…...

《工业社会的诞生》章节

工业革命的技术前奏 早期工业技术双引擎&#xff1a; 【火药武器】&#xff1a;重塑战争形态与经济地理 新式青铜炮助力殖民扩张&#xff0c;开辟全球贸易网络 高桅帆船&#xff08;西班牙大帆船&#xff09;实现洲际航行 战争规模化倒逼中央集权&#xff0c;催生国家-商人…...

消息队列MQ

参考资料&#xff1a;https://cloud.tencent.com/developer/article/2335397 https://www.cnblogs.com/hahaha111122222/p/18457859 消息队列是大型分布式系统不可缺少的中间件&#xff0c;也是高并发系统的基石中间件 消息队列 消息队列 Message Queue 消息队列是利用高效可…...

LangChain4J-XiaozhiAI 项目分析报告

LangChain4J-XiaozhiAI 项目分析报告 GitHub 链接 1. 项目概述 本项目名为 “硅谷小智&#xff08;医疗版&#xff09;”&#xff0c;是一个基于 Java 技术栈和 LangChain4J 框架构建的 AI 聊天助手应用。其核心目标是利用大型语言模型&#xff08;LLM&#xff09;的能力&am…...

学习spring boot-拦截器Interceptor,过滤器Filter

目录 拦截器Interceptor 过滤器Filter 关于过滤器的前置知识可以参考&#xff1a; 过滤器在springboot项目的应用 一&#xff0c;使用WebfilterServletComponentScan 注解 1 创建过滤器类实现Filter接口 2 在启动类中添加 ServletComponentScan 注解 二&#xff0c;创建…...

【程序+论文】大规模新能源并网下的火电机组深度调峰经济调度

目录 1 主要内容 讲解重点 2 讲解视频及代码 1 主要内容 该视频为《大规模新能源并网下的火电机组深度调峰经济调度》代码讲解内容&#xff0c;该程序有完全对照的论文&#xff0c;以改进IEEE30节点作为研究对象&#xff0c;系统包括5个火电机组和2个新能源机组&#xff0c;…...

【win11 】win11 键盘测试

我的键盘是支持mac和win的&#xff0c;fn tab 就能切换&#xff0c;有可能是用错了模式&#xff0c;导致 我alt a 就会弹出 win11的 wifi 等菜单控制 键盘测试网站 https://keyboard.bmcx.com/ 识别到我按下的是alt...

再识动静态库

动静态库 1 手动制作静态库2 手动调用静态库方式一&#xff1a;&#xff08;安装到系统&#xff09;方式二&#xff1a;&#xff08;和源文件一起&#xff09;方式三&#xff1a;&#xff08;使用带路径的库&#xff09; 3 动态库制作与使用方式一&#xff1a;拷贝到系统方式二…...

前端 uni-app 初步使用指南

在数字化浪潮下&#xff0c;实现应用多端适配成为开发者的刚需。uni-app 凭借 “一次编写&#xff0c;多端运行” 的特性&#xff0c;极大提升了开发效率&#xff0c;成为前端开发的热门选择。如果你是首次接触 uni-app&#xff0c;这篇文章将带你开启 uni-app 的使用之旅&…...

尼卡音乐 1.1.1 | 免费畅听全网音乐,支持无损下载,无广告无需注册登录

尼卡音乐是一款可以免费畅听全网音乐的应用程序&#xff0c;支持免费下载无损高品质音源&#xff0c;并且没有任何广告&#xff0c;无需注册登录。用户可以轻松搜索全网无损音质音源&#xff0c;并可将其他音乐APP的歌单导入&#xff0c;让音乐陪你开心一整天。该应用彻底拒绝臃…...

33.降速提高EMC能力

降速提高EMC能力 1. 电磁兼容问题的错误累积效应2. 降速减少累积效应的机理分析 1. 电磁兼容问题的错误累积效应 2. 降速减少累积效应的机理分析 降速之后&#xff0c;信号的波形更完整&#xff0c;容错空间更大&#xff1b;另外边沿变缓&#xff0c;对外干扰也会减小。...

【赵渝强老师】TiDB的MVCC机制

TiDB是一款开源的国产分布式关系型数据库。TiKV是TiDB的行存引擎&#xff0c;它支持多版本并发控制(Multi-Version Concurrency Control,MVCC)。假设有这样一种场景&#xff1a;某客户端A在写一个Key&#xff0c;另一个客户端B同时在对这个Key进行读操作。如果没有数据的多版本…...

数电填空题整理(适用期末考试)

在下列门电路中&#xff0c;OC门能实现“线与”逻辑功能&#xff1b; 三态门能用于总线结构的数 据传输&#xff1b;传输门 能实现模拟信号的双向传输。 并联比较型A/D转换器的转换速度最快&#xff0c; 双积分型A/D转换器的稳定性和抗干扰能力最好 TTL与非门多余的输入端应该…...

node核心学习

目录 1-1node概述 1-2全局对象 1-3Node的模块化细节 1-4Node中的ES模块化 1-5基本内置模块 OS模块&#xff1a; path模块&#xff1a; url模块&#xff1a; util模块&#xff1a; 1-6文件IO I/O&#xff1a;input output fs模块的方法 代码示例&#xff1a; 练习…...

基于 PyQt 的YOLO目标检测可视化界面+ nuitka 打包

在人工智能和计算机视觉领域&#xff0c;YOLO&#xff08;You Only Look Once&#xff09;是一种广泛使用的实时目标检测算法。为了直观地展示YOLO算法的检测效果&#xff0c;我们使用Pyqt框架进行检测结果的可视化&#xff0c;同时为了使其能够脱离Python环境&#xff0c;我们…...

234树和红黑树

首先&#xff0c;把目光聚集在234树中 以下是234的三种节点&#xff08;可以有更多这里使用以下的三个&#xff09;&#xff1a; 右侧是节点转换成红黑树节点的样子。 接下来会用以下序列进行1234树的搭建和红黑树的搭建&#xff1a; 首先是234树 2-3-4树&#xff08;234树&…...

GenCLS++:通过联合优化SFT和RL,提升生成式大模型的分类效果

摘要&#xff1a;作为机器学习中的一个基础任务&#xff0c;文本分类在许多领域都发挥着至关重要的作用。随着大型语言模型&#xff08;LLMs&#xff09;的快速扩展&#xff0c;特别是通过强化学习&#xff08;RL&#xff09;的推动&#xff0c;对于更强大的分类器的需求也在不…...

maven坐标导入jar包时剔除不需要的内容

maven坐标导入jar包时剔除不需要的内容 问题描述解决方案 问题描述 maven坐标导入jar包时剔除不需要的内容 解决方案 Spring Boot 默认使用 Logback&#xff0c;需在 pom.xml 中排除其依赖&#xff1a; <dependency><groupId>org.springframework.boot</gro…...

Oracle OCP认证考试考点详解083系列06

题记&#xff1a; 本系列主要讲解Oracle OCP认证考试考点&#xff08;题目&#xff09;&#xff0c;适用于19C/21C,跟着学OCP考试必过。 26. 第26题&#xff1a; 题目 解析及答案&#xff1a; 关于块介质恢复&#xff0c;以下哪三项是正确的&#xff1f; A) 需恢复一个或多个…...

llfc项目分布式服务笔记

一、系统整体架构流程图(简明版) 复制代码 +---------------+ +------------------+ +----------------+ | 客户端 (Client) |--------->| GateServer |----------| StatusServer |<--+ +---------------+ +--------------…...

“链式前向星”等三种存图方式分别输出“无向无权图”的“DFS序列”

【DFS序列】 DFS序列&#xff08;深度优先搜索序列&#xff09;&#xff0c;是树或图结构在深度优先遍历过程中生成的节点访问顺序记录。 下面三段代码&#xff0c;分别采用链式前向星、邻接表、邻接矩阵存图&#xff0c;输出图的“DFS序列”。 【DFS&#xff1a;链式前向星】…...

Lesson 16 A polite request

Lesson 16 A polite request 词汇 park n. 公园&#xff0c;停车场&#xff0c;庄园 v. 停车&#xff0c;泊车 例句&#xff1a;让我来停车。    Let me park. 相关&#xff1a;spot n. 车位 区别&#xff1a;garden n. 花园 [小&#xff0c;私家的] 例句&#xff1a;我们…...

【IP101】边缘检测技术全解析:从Sobel到Canny的进阶之路

&#x1f31f; 边缘检测的艺术 &#x1f3a8; 在图像处理的世界里&#xff0c;边缘检测就像是给图像画眉毛 —— 没有它&#xff0c;你的图像就像一只没有轮廓的熊猫&#x1f43c;。让我们一起来探索这个神奇的"美妆"技术&#xff01; &#x1f4da; 目录 基础概念 …...

Nx 智能分发机制(Nx Agents + Nx Cloud)

Nx 智能分发机制&#xff08;Nx Agents  Nx Cloud&#xff09; 阶段关键做的事作用1. 收集信息- Project Graph&#xff1a;解析整个 workspace 依赖关系&#xff08;谁依赖谁&#xff09;- 历史统计&#xff1a;每次 CI 结束后将每个任务的实际用时与缓存命中情况上传…...

《“昊龙一号”:开启中国航天货运新时代》

中国航天新力量:昊龙一号登场 在 2024 年 10 月 29 日上午,神舟十九号载人飞行任务新闻发布会如一颗重磅炸弹,在航天领域激起千层浪。发布会上,一系列关乎中国载人航天工程未来走向的重要信息被披露,其中,“昊龙一号” 货运航天飞机入围空间站低成本货物运输系统总体方案…...

C++ 多态:原理、实现与应用

目录 引言 一、多态的概念 二、多态的定义及实现 &#xff08;一&#xff09;构成条件 &#xff08;二&#xff09;虚函数的深入理解 &#xff08;三&#xff09;虚函数的重写&#xff08;覆盖&#xff09; 三、抽象类 &#xff08;一&#xff09;概念 &#xff08;二&…...

多模态大语言模型arxiv论文略读(五十八)

How Does the Textual Information Affect the Retrieval of Multimodal In-Context Learning? ➡️ 论文标题&#xff1a;How Does the Textual Information Affect the Retrieval of Multimodal In-Context Learning? ➡️ 论文作者&#xff1a;Yang Luo, Zangwei Zheng, …...

TS 枚举类型

枚举 参数为枚举成员中的一个 数字枚举 字符串枚举 枚举特点 、 缺点&#xff1a;转为JS代码时会编译成JS代码&#xff0c;增大开销...

Python容器与循环:数据处理的双剑合璧

Python作为一门简洁强大的编程语言&#xff0c;其容器类型和循环结构的完美结合为数据处理提供了极大的便利。本文将带领初学者深入理解Python中的四大容器&#xff08;列表、元组、字典、集合&#xff09;以及它们与循环结构的配合使用&#xff0c;助你掌握数据处理的核心技能…...

ST-LINKV2仿真器下载

ST-LINKV2仿真器 — 正点原子资料下载中心 1.0.0 文档...

RAGFlow 接入企业微信应用实现原理剖析与最佳实践

背景 近期有医美行业客户咨询我们智能客服产品&#xff0c;期望将自己企业的产品、服务以及报价信息以企微应用的方式给到客户进行体验互动&#xff0c;提升企业运营效率。关于企业微信对接&#xff0c;我们分享下最佳实践&#xff0c;抛砖引玉。效果图如下&#xff1a; 这里也…...

大模型实践:图文解锁Ollama在个人笔记本上部署llm

使用在线模型服务时&#xff0c;我们常常需要支付API调用费用&#xff0c;这对于个人开发者或小型组织来说可能是一笔不小的开支。那么&#xff0c;有没有方法可以在本地免费使用这些强大的模型呢&#xff1f;答案是肯定的——Ollama就是这样一个工具。 当然如果是比较大的组织…...

如何提高情商?(优化版)

引言 提高情商&#xff08;EQ&#xff09;是一个需要长期练习和自我反思的过程&#xff0c;核心在于理解自己、管理情绪、共情他人并有效沟通。以下是一些具体且可操作的方法&#xff0c;结合理论和实际场景&#xff0c;帮助你逐步提升&#xff1a; 一、核心方法&#xff1a;…...