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中对象的生命周期通常可以分为以下几个阶段:
- 对象创建:当程序需要使用一个对象时,JVM会在堆内存中为其分配空间。
- 对象使用:程序正常使用该对象并进行操作。
- 对象不可达:当对象不再被任何引用指向时,即认为该对象不可达,成为垃圾对象。此时,GC机制将开始工作,清理这些对象。
GC的目标是尽量减少程序的停顿时间,提高内存的利用率,确保程序的稳定运行。
2.2 GC工作原理
2.2.1 基本流程
GC的工作主要可以分为以下几个步骤:
-
标记(Marking):从根对象(GC Roots,如线程栈、静态变量、系统类等)开始,递归查找所有可达对象,标记它们为活跃对象。
-
清理(Sweeping):对未被标记的对象进行清理,将其内存回收,公开可用的内存空间。
-
整理(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 参数、选择合适的垃圾收集器,以及使用有效的监控工具,开发者可以显著提高应用的内存管理效率,确保系统稳定高效运行。
回顾整篇内容,以下几个要点是值得我们铭记的:
-
理解 GC 的原理与类型:掌握垃圾收集的基本原理与多种类型的垃圾收集器,能够帮助我们做出更明智的配置选择。
-
合理的 GC 配置:根据具体的应用场景选择合适的 JVM 参数,优化内存使用,并减少 GC 对性能的影响。
-
持续的监控与优化:利用工具(如 JVisualVM、Java Mission Control 和 Prometheus等)对 GC 性能进行实时监控,及时发现并解决潜在的内存问题。
在成为一名 Java 大师的道路上,掌握 GC 机制与调优方法将为你的职业发展奠定坚实的基础。不断学习、实践与总结,逐步超越自己的技术边界,推动 Java 应用及系统的全方位提升,最终实现高性能、高可用的应用产品。
相关文章:
Java大师成长计划之第12天:性能调优与GC原理
📢 友情提示: 本文由银河易创AI(https://ai.eaigx.com)平台gpt-4o-mini模型辅助创作完成,旨在提供灵感参考与技术分享,文中关键数据、代码与结论建议通过官方渠道验证。 在 Java 编程中,性能调优…...
【MySQL】索引(重要)
目录 一、索引本质: 索引的核心作用 索引的优缺点 二、预备知识: 硬件理解: 软件理解: MySQL与磁盘交互基本单位: 三、索引的理解: 理解page: 单个page: 多个page&#x…...
C++多态(上)
目录 一、多态的概念 二、多态的定义及实现 1. 多态的构成条件 2. 虚函数 3. 虚函数的重写 4. C11 override 和 final 4.1 final 关键字 4.2 override 关键字 5. 重载、覆盖(重写)、隐藏(重定义)的对比 三、抽象类 1. 概…...
【AI提示词】 复利效应教育专家
提示说明 一位拥有金融学和教育学背景的知识型内容创作者,擅长用简单易懂的语言向读者解释复杂概念 提示词 # Role: 复利效应教育专家## Profile - language: 中文 - description: 一位拥有金融学和教育学背景的知识型内容创作者,擅长用简单易懂的语言…...
嵌入式系统基础知识
目录 一、冯诺依曼结构与哈佛结构 (一)冯诺依曼结构 (二)哈佛架构 二、ARM存储模式 (一)大端模式 (二)小端模式 (三)混合模式 三、CISC 与 RISC &am…...
如何克服情绪拖延症?
引言 你是否也曾有过这样的经历? 明明手头有重要的工作,却总是忍不住刷手机、看视频,直到最后一刻才匆忙赶工? 你是否在心里暗暗发誓“明天一定好好干”,但第二天依旧重复着同样的拖延? 其实࿰…...
【操作系统】哲学家进餐问题
问题描述 哲学家进餐问题是并发编程中的一个经典问题,描述了五位哲学家围坐在一张圆桌旁,他们的生活由思考和进餐组成。在圆桌上有五个盘子,每位哲学家面前一个盘子,盘子之间有一支叉子。哲学家进餐需要同时使用左右两支叉子。问题…...
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代理技术核心概念 (一)正向代理(Forward Proxy) 1. 基本定义 2. 技术原理 3. 应用场景 (二)反向代理(Reverse Proxy) 1. 基本定义 2. 技术原理 3. 应用场景 一、…...
聊聊对Mysql的理解
目录 1、Sql介绍 1.1、SQL的分类 1.2、数据库的三大范式 1.3、数据表的约束 1.4、约束的添加与删除 2、核心特性 3、主要组件 4、数据结构原理 5、索引失效 6、常用问题 7、优势与局限 前言 MySQL是一个开源的关系型数据库管理系统(RDBMS),由瑞典MySQL A…...
「Mac畅玩AIGC与多模态17」开发篇13 - 条件判断与分支跳转工作流示例
一、概述 本篇在多节点串联的基础上,进一步引入条件判断与分支跳转机制,实现根据用户输入内容动态走不同执行路径。开发人员将学习如何配置判断节点、定义分支规则,以及如何在工作流中引导执行方向,完成基础的逻辑控制。 二、环境准备 macOS 系统Dify 平台已部署并可访问…...
pycharm terminal 窗口打不开了
参考添加链接描述powershell.exe改为cmd.exe发现有一个小正方形,最大化可以看见了。...
JAVA:使用 MapStruct 实现高效对象映射的技术指南
1、简述 在 Java 开发中,对象之间的转换是一个常见的需求,尤其是在 DTO(数据传输对象)和实体类之间的转换过程中。手动编写转换代码既耗时又容易出错,而 MapStruct 是一个优秀的对象映射框架,可以通过注解生成高效的对象转换代码,从而大大提升开发效率。 本文将介绍 M…...
Linux线程深度解析:从基础到实践
Linux线程深度解析:从基础到实践 一、线程基础概念 1. 进程与线程定义 进程:一个正在运行的程序,是操作系统资源分配的最小单位(拥有独立的地址空间、文件描述符等资源),状态包括就绪、运行、阻塞。线程…...
【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包内的目录中。 目录结构如下所示: src/my_pkg_example/launch/…...
用 PyTorch 轻松实现 MNIST 手写数字识别
用 PyTorch 轻松实现 MNIST 手写数字识别 引言 在深度学习领域,MNIST 数据集就像是 “Hello World” 级别的经典入门项目。它包含大量手写数字图像及对应标签,非常适合新手学习如何搭建和训练神经网络模型。本文将基于 PyTorch 框架,详细拆…...
碰撞检测学习笔记
目录 SUMO 模拟碰撞 LimSim pygame模拟碰撞检测 SUMO 模拟碰撞 LimSim 多模态大语言模型(M)LLM的出现为人工智能开辟了新的途径,特别是提供增强的理解和推理能力,为自动驾驶开辟了新途径。本文介绍LimSim,LimSim的…...
Sway初体验
Sway(缩写自 SirCmpwn’s Wayland compositor[1])是一款专为 Wayland 设计的合成器,旨在与 i3 完全兼容。根据官网所述: Sway 是 Wayland 的合成器,也是 x11 的 i3 窗口管理器的替代品。它可以根据您现有的 i3 配置工作…...
《工业社会的诞生》章节
工业革命的技术前奏 早期工业技术双引擎: 【火药武器】:重塑战争形态与经济地理 新式青铜炮助力殖民扩张,开辟全球贸易网络 高桅帆船(西班牙大帆船)实现洲际航行 战争规模化倒逼中央集权,催生国家-商人…...
消息队列MQ
参考资料:https://cloud.tencent.com/developer/article/2335397 https://www.cnblogs.com/hahaha111122222/p/18457859 消息队列是大型分布式系统不可缺少的中间件,也是高并发系统的基石中间件 消息队列 消息队列 Message Queue 消息队列是利用高效可…...
LangChain4J-XiaozhiAI 项目分析报告
LangChain4J-XiaozhiAI 项目分析报告 GitHub 链接 1. 项目概述 本项目名为 “硅谷小智(医疗版)”,是一个基于 Java 技术栈和 LangChain4J 框架构建的 AI 聊天助手应用。其核心目标是利用大型语言模型(LLM)的能力&am…...
学习spring boot-拦截器Interceptor,过滤器Filter
目录 拦截器Interceptor 过滤器Filter 关于过滤器的前置知识可以参考: 过滤器在springboot项目的应用 一,使用WebfilterServletComponentScan 注解 1 创建过滤器类实现Filter接口 2 在启动类中添加 ServletComponentScan 注解 二,创建…...
【程序+论文】大规模新能源并网下的火电机组深度调峰经济调度
目录 1 主要内容 讲解重点 2 讲解视频及代码 1 主要内容 该视频为《大规模新能源并网下的火电机组深度调峰经济调度》代码讲解内容,该程序有完全对照的论文,以改进IEEE30节点作为研究对象,系统包括5个火电机组和2个新能源机组,…...
【win11 】win11 键盘测试
我的键盘是支持mac和win的,fn tab 就能切换,有可能是用错了模式,导致 我alt a 就会弹出 win11的 wifi 等菜单控制 键盘测试网站 https://keyboard.bmcx.com/ 识别到我按下的是alt...
再识动静态库
动静态库 1 手动制作静态库2 手动调用静态库方式一:(安装到系统)方式二:(和源文件一起)方式三:(使用带路径的库) 3 动态库制作与使用方式一:拷贝到系统方式二…...
前端 uni-app 初步使用指南
在数字化浪潮下,实现应用多端适配成为开发者的刚需。uni-app 凭借 “一次编写,多端运行” 的特性,极大提升了开发效率,成为前端开发的热门选择。如果你是首次接触 uni-app,这篇文章将带你开启 uni-app 的使用之旅&…...
尼卡音乐 1.1.1 | 免费畅听全网音乐,支持无损下载,无广告无需注册登录
尼卡音乐是一款可以免费畅听全网音乐的应用程序,支持免费下载无损高品质音源,并且没有任何广告,无需注册登录。用户可以轻松搜索全网无损音质音源,并可将其他音乐APP的歌单导入,让音乐陪你开心一整天。该应用彻底拒绝臃…...
33.降速提高EMC能力
降速提高EMC能力 1. 电磁兼容问题的错误累积效应2. 降速减少累积效应的机理分析 1. 电磁兼容问题的错误累积效应 2. 降速减少累积效应的机理分析 降速之后,信号的波形更完整,容错空间更大;另外边沿变缓,对外干扰也会减小。...
【赵渝强老师】TiDB的MVCC机制
TiDB是一款开源的国产分布式关系型数据库。TiKV是TiDB的行存引擎,它支持多版本并发控制(Multi-Version Concurrency Control,MVCC)。假设有这样一种场景:某客户端A在写一个Key,另一个客户端B同时在对这个Key进行读操作。如果没有数据的多版本…...
数电填空题整理(适用期末考试)
在下列门电路中,OC门能实现“线与”逻辑功能; 三态门能用于总线结构的数 据传输;传输门 能实现模拟信号的双向传输。 并联比较型A/D转换器的转换速度最快, 双积分型A/D转换器的稳定性和抗干扰能力最好 TTL与非门多余的输入端应该…...
node核心学习
目录 1-1node概述 1-2全局对象 1-3Node的模块化细节 1-4Node中的ES模块化 1-5基本内置模块 OS模块: path模块: url模块: util模块: 1-6文件IO I/O:input output fs模块的方法 代码示例: 练习…...
基于 PyQt 的YOLO目标检测可视化界面+ nuitka 打包
在人工智能和计算机视觉领域,YOLO(You Only Look Once)是一种广泛使用的实时目标检测算法。为了直观地展示YOLO算法的检测效果,我们使用Pyqt框架进行检测结果的可视化,同时为了使其能够脱离Python环境,我们…...
234树和红黑树
首先,把目光聚集在234树中 以下是234的三种节点(可以有更多这里使用以下的三个): 右侧是节点转换成红黑树节点的样子。 接下来会用以下序列进行1234树的搭建和红黑树的搭建: 首先是234树 2-3-4树(234树&…...
GenCLS++:通过联合优化SFT和RL,提升生成式大模型的分类效果
摘要:作为机器学习中的一个基础任务,文本分类在许多领域都发挥着至关重要的作用。随着大型语言模型(LLMs)的快速扩展,特别是通过强化学习(RL)的推动,对于更强大的分类器的需求也在不…...
maven坐标导入jar包时剔除不需要的内容
maven坐标导入jar包时剔除不需要的内容 问题描述解决方案 问题描述 maven坐标导入jar包时剔除不需要的内容 解决方案 Spring Boot 默认使用 Logback,需在 pom.xml 中排除其依赖: <dependency><groupId>org.springframework.boot</gro…...
Oracle OCP认证考试考点详解083系列06
题记: 本系列主要讲解Oracle OCP认证考试考点(题目),适用于19C/21C,跟着学OCP考试必过。 26. 第26题: 题目 解析及答案: 关于块介质恢复,以下哪三项是正确的? A) 需恢复一个或多个…...
llfc项目分布式服务笔记
一、系统整体架构流程图(简明版) 复制代码 +---------------+ +------------------+ +----------------+ | 客户端 (Client) |--------->| GateServer |----------| StatusServer |<--+ +---------------+ +--------------…...
“链式前向星”等三种存图方式分别输出“无向无权图”的“DFS序列”
【DFS序列】 DFS序列(深度优先搜索序列),是树或图结构在深度优先遍历过程中生成的节点访问顺序记录。 下面三段代码,分别采用链式前向星、邻接表、邻接矩阵存图,输出图的“DFS序列”。 【DFS:链式前向星】…...
Lesson 16 A polite request
Lesson 16 A polite request 词汇 park n. 公园,停车场,庄园 v. 停车,泊车 例句:让我来停车。 Let me park. 相关:spot n. 车位 区别:garden n. 花园 [小,私家的] 例句:我们…...
【IP101】边缘检测技术全解析:从Sobel到Canny的进阶之路
🌟 边缘检测的艺术 🎨 在图像处理的世界里,边缘检测就像是给图像画眉毛 —— 没有它,你的图像就像一只没有轮廓的熊猫🐼。让我们一起来探索这个神奇的"美妆"技术! 📚 目录 基础概念 …...
Nx 智能分发机制(Nx Agents + Nx Cloud)
Nx 智能分发机制(Nx Agents Nx Cloud) 阶段关键做的事作用1. 收集信息- Project Graph:解析整个 workspace 依赖关系(谁依赖谁)- 历史统计:每次 CI 结束后将每个任务的实际用时与缓存命中情况上传…...
《“昊龙一号”:开启中国航天货运新时代》
中国航天新力量:昊龙一号登场 在 2024 年 10 月 29 日上午,神舟十九号载人飞行任务新闻发布会如一颗重磅炸弹,在航天领域激起千层浪。发布会上,一系列关乎中国载人航天工程未来走向的重要信息被披露,其中,“昊龙一号” 货运航天飞机入围空间站低成本货物运输系统总体方案…...
C++ 多态:原理、实现与应用
目录 引言 一、多态的概念 二、多态的定义及实现 (一)构成条件 (二)虚函数的深入理解 (三)虚函数的重写(覆盖) 三、抽象类 (一)概念 (二&…...
多模态大语言模型arxiv论文略读(五十八)
How Does the Textual Information Affect the Retrieval of Multimodal In-Context Learning? ➡️ 论文标题:How Does the Textual Information Affect the Retrieval of Multimodal In-Context Learning? ➡️ 论文作者:Yang Luo, Zangwei Zheng, …...
TS 枚举类型
枚举 参数为枚举成员中的一个 数字枚举 字符串枚举 枚举特点 、 缺点:转为JS代码时会编译成JS代码,增大开销...
Python容器与循环:数据处理的双剑合璧
Python作为一门简洁强大的编程语言,其容器类型和循环结构的完美结合为数据处理提供了极大的便利。本文将带领初学者深入理解Python中的四大容器(列表、元组、字典、集合)以及它们与循环结构的配合使用,助你掌握数据处理的核心技能…...
ST-LINKV2仿真器下载
ST-LINKV2仿真器 — 正点原子资料下载中心 1.0.0 文档...
RAGFlow 接入企业微信应用实现原理剖析与最佳实践
背景 近期有医美行业客户咨询我们智能客服产品,期望将自己企业的产品、服务以及报价信息以企微应用的方式给到客户进行体验互动,提升企业运营效率。关于企业微信对接,我们分享下最佳实践,抛砖引玉。效果图如下: 这里也…...
大模型实践:图文解锁Ollama在个人笔记本上部署llm
使用在线模型服务时,我们常常需要支付API调用费用,这对于个人开发者或小型组织来说可能是一笔不小的开支。那么,有没有方法可以在本地免费使用这些强大的模型呢?答案是肯定的——Ollama就是这样一个工具。 当然如果是比较大的组织…...
如何提高情商?(优化版)
引言 提高情商(EQ)是一个需要长期练习和自我反思的过程,核心在于理解自己、管理情绪、共情他人并有效沟通。以下是一些具体且可操作的方法,结合理论和实际场景,帮助你逐步提升: 一、核心方法:…...