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

JVM——垃圾回收算法

目录

垃圾回收算法

评价标准:

标记-清除算法:

复制算法:

标记-整理算法:

分代GC:

arthas查看分代之后的内存情况:


垃圾回收算法

  • java是如何实现垃圾回收的呢?简单来说,垃圾回收要做的有两件事:
  1. 找到内存中存活的对象
  2. 释放不再存活对象的内存,使得程序能再次利用这部分空间。
Java垃圾回收过程会通过单独的GC线程来完成,但是不管使用哪一种GC算法,都会有部分阶段需要停止所有的用户线程。这个过程被称之为Stop The World 简称 STW,如果STW时间过长则会影响用户的使用。
评价标准:
判断GC算法是否优秀,可以从三个方面来考虑:
  1. 吞吐量:
    1. 吞吐量指的是CPU用于执行用户代码的时间与CPU总执行时间的比值,即吞吐量=执行用户代码时间/(执行用户代码时间+GC时间)。吞吐量数值越高,垃圾回收的效率就越高。
  2. 最大暂停时间
    1. 最大暂停时间指的是所有在垃圾回收过程中的STW时间最大值。比如如下的图中,黄色部分的STW就是最大暂停时间,显而易见上面的图比下面的图拥有更少的最大暂停时间。最大暂停时间越短,用户使用系统时收受到的影响就越短。
  1. 堆使用效率
    1. 不同的垃圾回收算法,对堆内存的使用方式是不同的。比如标记清除算法,可以使用完整的堆内存。而复制算法会将堆内存一分为二,每次只能使用一半的内存。从堆使用效率上来说,标记-清除算法要优于复制算法。
上述三种评价标准:堆使用效率、吞吐量,以及最大暂停时间不可兼得。
一般来说,对内存越大,最大暂停时间就会越长。想要减少最大暂停时间,就会降低吞吐量。
标记-清除算法:
【GC算法几人知?】二、标记清除法 全解析-CSDN博客
标记清楚算法的核心思想分为两个阶段:
  1. 标记阶段,将所有存活的对象进行标记。java中使用可达性分析算法,从GC Root开始通过引用链遍历出所有存活对象。
  2. 清除阶段,从内存中删除没有被标记也就是非存活对象。
  • 优点:
    • 实现简单,只需要再第一阶段给每个对象维护标志位,第二阶段删除对象即可。
  • 缺点:
复制算法:
复制算法的核心思想是:
  1. 堆中准备两块空间From空间和To空间,每次在对分配阶段,只能使用其中一块空间(From空间)。
  2. 在垃圾回收GC阶段,将From中存活的对象复制到To空间。
  3. 将两块空间的From和To名字呼唤。
完整的例子:
  1. 将堆内存分割成两块From空间和To空间,对象分配阶段,创建对象。
  2. GC阶段开始,将GCRoot搬运到To空间
  3. 将GCRoot关联的对象,搬运到To空间
  4. 清理From空间,并将名称互换。
优点:
  1. 吞吐量高
    1. 复制算法只需要遍历一次存活对象复制到To空间即可,比标记-整理算法少了一次遍历的过程,因而性能较好,但是不如标记-清除算法,因为标记清除算法不需要进行对象的移动。
  2. 不会发生碎片化
    1. 复制算法在复制之后就会将对象按顺序放入To空间中,所以对象以外的区域都是可用空间,不存在碎片化内存空间。
缺点:
  1. 内存使用效率低
    1. 每次只能让一半的内存空间来为创建对象使用
标记-整理算法:
标记整理算法也叫做标记压缩算法,是对标记清理算法中容易产生内存碎片问题的一种解决方案。
  1. 标记阶段,将所有存活的对象进行标记。java中使用可达性分析算法,从GCRoot开始通过引用链遍历出所有存活的对象。
  2. 整理阶段,将存活对象移动到堆的一端。清理掉存活对象的内存空间。
优点:
  1. 内存使用效率高
    1. 整个堆内存都可以使用,不会像复制算法只能使用半个堆内存
  2. 不会发生碎片化
    1. 在整理阶段可以将对象往内存的一次进行移动,剩下的空间都是可以分配对象的有效空间。
缺点:
  1. 整理阶段的效率不高
    1. 整理算法有很多种,比如Lisp2整理算法需要对整个堆中的对象搜索3次,整体性能不佳。可以通过Two-Finger、表格算法、ImmisGC等高效的整理算法优化此阶段的性能。
分代GC:
现代优秀的垃圾回收算法,会将上述描述的垃圾回收算法组合进行使用,其中应用最广泛的就是分代垃圾回收算法。
分代垃圾回收将整个内存区域划分为年轻代和老年代:
  • 年轻代:(新生代)Young区,存放存活时间比较短的对象
  • 老年代:old区,存放存活时间比较长的对象
arthas查看分代之后的内存情况:
  • 在JDK8中,添加-XX:+UseSerialGC参数使用分代回收的垃圾回收器,运行程序。
  • 在arthas中使用memory命令查看内存,显示出三个区域的内存情况。
分代回收时,创建出来的对象,首先会被放入Eden伊甸园区。
随着对象在Eden去越来越多,如果Eden区满,新创建的对象已经无法放入,就会触发年轻代的GC,称为Minor GC或者Young GC。
Minor GC会把需要eden中和From需要回收的对象回收,把没有回收的对象放入To区。
接下来,S0会变成To区,S1变成From区。当eden区满时再往里放入对象,依然会发生Minor GC。此时会回eden区和S1(from)中的对象,并把eden和from区中剩余的对象放入S0。
注意:每次Minor GC中都会为对象记录他的年龄,初始值为0,每次GC完加1。
如果Minor GC后对象的年龄达到阈值(最大15,默认值和垃圾回收器有关),对象就会被晋升至老年代。
当老年代中空间不足,无法放入新的对象时,先尝试minor gc如果还是不足,就会触发Full GC,Full GC会对整个堆进行垃圾回收。
如果FullGC依然无法回收掉老年代的对象,那么当对象继续放入老年代时,就会抛出Out Memory异常。
问题:下图中的程序为什么会出现OutOfMemory?
从上图可以看到,Full GC 无法回收掉老年代的对象,那么当对象继续放入老年代时,就会抛出Out Of Memory异常。
问题:分代GC算法要把堆分为年轻代和老年代?
  • 系统中的大部分对象,都是创建出来之后很快就不再使用可以被回收,比如用户获取订单数据,订单数据返回给用户之后就可以释放了。
  • 老年代中会存放长期存活的对象,比如Spring的大部分bean对象,在程序启动之后就不会被回收了
  • 在虚拟机的默认设置中,新生代大小要远小于老年代的大小。
问题:分代GC算法将堆分成年轻代和老年代的主要原因有:
  1. 可以通过调整年轻代和老年代的比例老师应不同类型的应用程序,提高内存的利用率和性能。
  2. 新生代和老年代时用不同的垃圾回收算法,新生代一般选择复制算法,老年代可以选择标记-清除和标记-整理算法,由程序员来选择灵活度较高。
  3. 分代的设计中允许只回收新生代,如果能满足对象分配的要求就不需要对整个堆进行回收(full GC),STW时间就会减少。

相关文章:

JVM——垃圾回收算法

目录 垃圾回收算法 评价标准: 标记-清除算法: 复制算法: 标记-整理算法: 分代GC: arthas查看分代之后的内存情况: 垃圾回收算法 java是如何实现垃圾回收的呢?简单来说,垃圾回…...

算法日记16:SC68 联通块问题(并查集)

一、题目: 二、题解: 1、看到求联通块问题,我们可以考虑使用DFS/并查集(在这里我们仅介绍并查集) 2、什么是并查集? 2.1:初始化:对于每一个点,我们都对其进行初始化操作pre[i]i pre[i]表示i的…...

Unity-Mirror网络框架-从入门到精通之Pong示例

文章目录 前言示例介绍NetworkManagerPongBallPlayer总结前言 在现代游戏开发中,网络功能日益成为提升游戏体验的关键组成部分。本系列文章将为读者提供对Mirror网络框架的深入了解,涵盖从基础到高级的多个主题。Mirror是一个用于Unity的开源网络框架,专为多人游戏开发设计…...

c++ 多线程知识汇总

一、std::thread std::thread 是 C11 引入的标准库中的线程类&#xff0c;用于创建和管理线程 1. 带参数的构造函数 template <class F, class... Args> std::thread::thread(F&& f, Args&&... args);F&& f&#xff1a;线程要执行的函数&…...

探索 Text-to-SQL 技术:从自然语言到数据库查询的桥梁

亲爱的小伙伴们&#x1f618;&#xff0c;在求知的漫漫旅途中&#xff0c;若你对深度学习的奥秘、Java 与 Python 的奇妙世界&#xff0c;亦或是读研论文的撰写攻略有所探寻&#x1f9d0;&#xff0c;那不妨给我一个小小的关注吧&#x1f970;。我会精心筹备&#xff0c;在未来…...

Java NIO ByteBuffer 详解

什么是 ByteBuffer ByteBuffer 是 Buffer 的一个具体实现&#xff0c;专门用于存储和操作字节数据。它提供了高效的、基于内存的 I/O 数据处理方式。 Buffer 类是构建 Java NIO 的基础&#xff0c;其中 ByteBuffer 类是 Buffer 子类中最受欢迎的。这是因为字节类型是最通用的…...

【机器学习】简单线性回归算法及代码实现

线性回归算法 一、摘要二、线性回归算法概述三、损失函数的定义和衡量标准四、简单线性回归的求解和应用五、机器学习算法一般求解思路 一、摘要 本文讲解了线性回归算法的基础知识和应用&#xff0c;强调线性回归主要用于解决回归问题。通过分析房产价格与房屋面积的关系&…...

【前端开发】query参数和params参数的区别

在Web开发中&#xff0c;query参数&#xff08;URL查询参数&#xff09;和params参数&#xff08;路由参数&#xff09;是两种不同的URL传参方式&#xff0c;它们的核心区别如下&#xff1a; 一、 位置不同 query参数params参数位置URL中?之后&#xff0c;用&连接多个参数…...

人工智能数学基础学习PPT

学习视频&#xff1a;人工智能 -数学基础 文章目录 1.简介1.函数2.极限3.无穷小与无穷大4.连续性与导数5.偏导数6.方向导数7.梯度 2.微积分1.微积分基本想法2.微积分的解释3.定积分4.定积分性质5.牛顿-莱布尼茨公式 3.泰勒公式与拉格朗日1.泰勒公式2.一点一世界3.阶数的作用4.…...

企业文件防泄密软件哪个好?

在企业文件防泄密软件领域&#xff0c;天锐绿盾和中科数安都是备受认可的品牌&#xff0c;它们各自具有独特的特点和优势。 以下是对这两款软件的详细比较&#xff1a; 天锐绿盾 功能特点 集成性强&#xff1a;集成了文件加密、数据泄露防护DLP、终端安全管理、行为审计等数据安…...

美丽 百褶裙提示词 + MD

MD 参考教程&#xff1a;Marvelous Designer零基础教学&#xff0c;MD布料制作-百褶裙建模制作&#xff0c;次世代教学_哔哩哔哩_bilibili 【MD新手教程】30分钟教会你制作百褶裙&#xff0c;Marvelous Designer超简单入门案例教程_哔哩哔哩_bilibili 【c4d技术解析】MD百褶裙…...

解释和对比“application/octet-stream“与“application/x-protobuf“

介绍 在现代 Web 和分布式系统的开发中&#xff0c;数据的传输和交换格式扮演着关键角色。为了确保数据在不同系统之间的传输过程中保持一致性&#xff0c;MIME 类型&#xff08;Multipurpose Internet Mail Extensions&#xff09;被广泛应用于描述数据的格式和内容类型。在 …...

基于YALMIP和cplex工具箱的微电网最优调度算法matlab仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 4.1 系统建模 4.2 YALMIP工具箱 4.3 CPLEX工具箱 5.完整工程文件 1.课题概述 基于YALMIP和cplex工具箱的微电网最优调度算法matlab仿真。通过YALMIP和cplex这两个工具箱&#xff0c;完成微电网的最优调…...

AI前端开发技能提升与ScriptEcho:拥抱AI时代的前端开发新范式

随着人工智能技术的飞速发展&#xff0c;AI前端开发岗位对技能的要求也水涨船高。越来越多的企业需要具备AI相关知识和高级前端开发能力的工程师&#xff0c;这使得传统的前端开发模式面临着巨大的挑战。如何提升开发效率&#xff0c;降低人力成本&#xff0c;成为了摆在所有前…...

LeetCode题解:2690. 无穷方法对象,Proxy

Problem: 2690. 无穷方法对象 思路 这个问题的核心在于创建一个对象&#xff0c;该对象能够响应对其任何方法的调用&#xff0c;并返回调用的方法名称。为了实现这一点&#xff0c;我们可以利用 JavaScript 中的 Proxy 对象。Proxy 对象允许我们自定义对象的基本操作&#xff…...

Python中的HTTP客户端库:httpx与request | python小知识

Python中的HTTP客户端库&#xff1a;httpx与request | python小知识 在Python中&#xff0c;发送HTTP请求和处理响应是网络编程的基础。requests和httpx是两个常用的HTTP库&#xff0c;它们都提供了简洁易用的API来发送HTTP请求。然而&#xff0c;httpx作为新一代的HTTP客户端…...

RabbitMQ使用guest登录提示:User can only log in via localhost

guest用户默认是无法使用远程访问的&#xff0c;生产环境建议直接在对应服务器登录使用。 1、通过创建新增用户并赋予权限实现远程登录 添加新用户 rabbitmqctl add_user zjp zjp 设置管理员 rabbitmqctl set_user_tags zjp administrator 设置新用户的权限 rabbitmqctl…...

#渗透测试#批量漏洞挖掘#Crocus系统—Download 文件读取

免责声明 本教程仅为合法的教学目的而准备&#xff0c;严禁用于任何形式的违法犯罪活动及其他商业行为&#xff0c;在使用本教程前&#xff0c;您应确保该行为符合当地的法律法规&#xff0c;继续阅读即表示您需自行承担所有操作的后果&#xff0c;如有异议&#xff0c;请立即停…...

基于Matlab实现六自由度机械臂正逆运动仿真(源码)

在机器人技术领域&#xff0c;六自由度机械臂是一种广泛应用的设备&#xff0c;它可以实现空间中的位置和姿态控制。本项目聚焦于六自由度机械臂的正逆运动学仿真&#xff0c;利用MATLAB2016b作为开发工具&#xff0c;旨在深入理解并掌握机械臂的工作原理和运动控制。 正运动学…...

亚信安全正式接入DeepSeek

亚信安全致力于“数据驱动、AI原生”战略&#xff0c;早在2024年5月&#xff0c;推出了“信立方”安全大模型、安全MaaS平台和一系列安全智能体&#xff0c;为网络安全运营、网络安全检测提供AI技术能力。自2024年12月DeepSeek-V3发布以来&#xff0c;亚信安全人工智能实验室利…...

Django 创建第一个项目

Django 创建第一个项目 引言 Django 是一个高级的 Python Web 框架,它鼓励快速开发和干净、实用的设计。本指南将带您从头开始创建一个简单的 Django 项目,以便您能够熟悉 Django 的基本结构和概念。 准备工作 在开始之前,请确保您已经安装了 Python 和 Django。以下是安…...

RL基础概念

RL意味着模型从真实世界中获取反馈&#xff0c;根据策略调整参数&#xff0c;以达到最大化反馈的优化算法&#xff1b; 强化学习的核心在于&#xff1a;1.试错&#xff08;因为仅凭reward无法得到明确的优化方向&#xff0c;所以需要不断多尝试&#xff09;&#xff1b;2.延迟奖…...

像取快递一样取文件?

看到一个很有意思的项目&#xff0c;像我们做软件分享的感觉会有用&#xff0c;就是现在服务器费用太贵了&#xff0c;如果自建的话感觉不是很值得。 FileCodeBox FileCodeBox 是一个轻量级的文件分享系统&#xff0c;它基于匿名口令分享文本和文件&#xff0c;无需注册登录&…...

Jenkins 新建配置Pipeline任务 三

Jenkins 新建配置Pipeline任务 三 一. 登录 Jenkins 网页输入 http://localhost:8080 输入账号、密码登录 一个没有创建任务的空 Jenkins 二. 创建 任务 图 NewItem 界面左上角 New Item 图NewItemSelect 1.Enter an item name&#xff1a;输入任务名 2.Select an ite…...

React 前端框架搭建与解析

React 前端框架搭建与解析 一、 概述 React 是 Facebook 开源的用于构建用户界面的 JavaScript 库,以其组件化、声明式编程范式以及高效的虚拟 DOM 渲染机制,成为当今最流行的前端框架之一。本文将带领你从零开始搭建一个 React 开发环境,并深入解析其核心概念。 二、 环…...

像指针操作、像函数操作的类

像指针一样的类。把一个类设计成像一个指针。什么操作符运用到指针上&#xff1f; 使用标准库的时候&#xff0c;里面有个很重要的东西叫容器。容器本身一定带着迭代器。迭代器作为另外一种智能指针。迭代器指向容器里的一个元素。迭代器用来遍历容器。 _list_iterator是链表迭…...

15.Python网络编程:进程池、进程间通信、多线程、进程和线程区别、网络通信、端口、IP地址、socket、UDP、TCP、http

1. 进程池&#xff08;Process Pool&#xff09; 进程池是通过将多个进程放入池中管理来避免频繁地创建和销毁进程&#xff0c;提高效率。Python 提供了 multiprocessing.Pool 类来实现进程池&#xff0c;它可以用于并行计算任务。 示例&#xff1a;使用进程池 from multipr…...

Ubuntu启动geteck/jetlinks实战:Docker启动

参考&#xff1a; JetLinks 物联网基础平台 安装Docker Ubuntu下载安装Docker-Desktop-CSDN博客 sudo apt install -y docker-compose ​​​​​​​ 下载源码 git clone https://github.com/jetlinks/jetlinks-community.git cd jetlinks-community 启动 cd docker/…...

Newton 差商插值多项式

Newton 差商插值多项式 根据差商定义&#xff0c;把 x x x 看成[ a , b ] a,b] a,b]上一点&#xff0c;可得 f ( x ) f ( x 0 ) f [ x , x 0 ] ( x − x 0 ) f(x)f(x_0)f[x,x_0](x-x_0) f(x)f(x0​)f[x,x0​](x−x0​) f [ x , x 0 ] f [ x 0 , x 1 ] f [ x , x 0 , x 1…...

ubuntu下ollama/vllm两种方式在本地部署Deepseek-R1

1.前言 今年过年,deepseek一下子爆火,导致我前段时间好好用的官网直接挤爆了,一直转圈圈到没心思过了,天天挂热搜,直接导致我的科研工作受阻(dog),好吧,话不多说,看看怎么在本地部署deepseek丝滑享受以及白嫖一下api体验>_<! 部署环境: 系统:ubuntu22.04 显…...

如何使用ps批量去除固定位置水印

使用 Photoshop 批量去除固定位置的水印&#xff0c;有几种方法可以实现自动化&#xff0c;具体取决于水印的复杂程度和你对 Photoshop 的熟悉程度&#xff1a; 1. 动作&#xff08;Actions&#xff09; 批处理&#xff08;Batch&#xff09;&#xff1a; 这是最常用的方法&…...

基于 STM32 的病房监控系统

标题:基于 STM32 的病房监控系统 内容:1.摘要 基于 STM32 的病房监控系统摘要&#xff1a;本系统采用 STM32 微控制器作为核心&#xff0c;通过传感器实时监测病房内的环境参数&#xff0c;如温度、湿度、光照等&#xff0c;并将数据上传至云端服务器。医护人员可以通过手机或…...

Windows部署deepseek-r1

安装Ollama 访问Ollama下载页&#xff0c;选择对应的操作系统进行下载 运行OllamaSetup,进行安装 任务栏出现Ollama图标&#xff0c;运行正常 cmd查看Ollama版本 C:\Users\PC>ollama -v ollama version is 0.5.7 部署模型 deepseek 可访问deepseek模型页&#xff0c;切…...

CCFCSP第34次认证第一题——矩阵重塑(其一)

第34次认证第一题——矩阵重塑&#xff08;其一&#xff09; 官网链接 时间限制&#xff1a; 1.0 秒 空间限制&#xff1a; 512 MiB 相关文件&#xff1a; 题目目录&#xff08;样例文件&#xff09; 题目背景 矩阵&#xff08;二维&#xff09;的重塑&#xff08;reshap…...

webpack打包优化策略

1. 减少打包体积 减少打包文件的大小是为了提高加载速度&#xff0c;降低网络带宽消耗&#xff0c;提升用户体验。常见的减少打包体积的优化策略包括&#xff1a; 代码分割&#xff08;Code Splitting&#xff09;&#xff1a;将代码拆分成多个小文件&#xff0c;让浏览器按需…...

八股文-2025-02-12

BFC BFC属于普通流。BFC全称是Block Formatting Context&#xff0c;意思就是块级格式化上下文。你可以把BFC看做元素的一个属性&#xff0c;当元素拥有BFC属性&#xff0c;这个元素就可以看作是隔离了的独立容器&#xff0c;容器里边的元素不会影响到容器外部的元素.https://b…...

部门管理(体验,最原始方法来做,Django+mysql)

本人初学&#xff0c;写完代码在此记录和复盘 在创建和注册完APP之后&#xff08;我的命名是employees&#xff09;&#xff0c;编写models.py文件创建表 手动插入了几条数据 1.部门查询 urls.py和views.py在编写之前&#xff0c;都要注意导入对应的库 urls.py&#xff1a;…...

联想拯救者Y9000银河麒麟系统安装Nvidia 4060显卡驱动

查了好多资料&#xff0c; 发现银河麒麟的资料较少&#xff0c; 只能自己试验了&#xff0c; 如有帮助&#xff0c; 点个赞吧~~ 前提&#xff1a; 本人笔记本是联想拯救者Y9000&#xff0c; 独立显卡 Nvidia4060, 主机系统是银河麒麟V10 (2403), 笔记本处于联网状态&#xff…...

深入解析 STM32 GPIO:结构、配置与应用实践

理解 GPIO 的工作原理和配置方法是掌握 STM32 开发的基础&#xff0c;后续的外设&#xff08;如定时器、ADC、通信接口&#xff09;都依赖于 GPIO 的正确配置。 目录 一、GPIO 的基本概念 二、GPIO 的主要功能 三、GPIO 的内部结构 四、GPIO 的工作模式 1. 输入模式 2. 输…...

突破数据壁垒,动态住宅代理IP在数据采集中的高效应用

在当今数字化时代&#xff0c;数据已经成为企业和个人决策的重要依据。无论是市场调研、竞争分析&#xff0c;还是价格监控、SEO优化&#xff0c;数据采集都扮演着至关重要的角色。然而&#xff0c;随着技术发展与网络安全措施的日益严格&#xff0c;传统的数据采集方式面临着前…...

Spring 项目接入 DeepSeek,分享两种超简单的方式!

⭐自荐一个非常不错的开源 Java 面试指南&#xff1a;JavaGuide &#xff08;Github 收获148k Star&#xff09;。这是我在大三开始准备秋招面试的时候创建的&#xff0c;目前已经持续维护 6 年多了&#xff0c;累计提交了 5600 commit &#xff0c;共有 550 多位贡献者共同参与…...

SSE与Websocket详解,SSE实现对话框流式输出

SSE详解 SSE(Server-Sent Events)是一种在Web应用中实现单向实时通信的技术,它允许服务器主动向客户端发送更新,而无需客户端不断发起请求。SSE基于HTTP协议,利用HTTP的长连接特性,通过浏览器向服务器发送一个HTTP请求,建立一条持久化的连接,然后服务器可以通过这条连…...

Shell脚本笔记

Linux其他命令 Shell脚本笔记...

Hydra主配置文件和模块化配置管理

在 Hydra 中&#xff0c;我们可以使用 defaults 关键字 在主配置文件 config.yaml 中加载多个子配置文件&#xff0c;从而实现 模块化配置管理。这在深度学习、超参数优化、数据预处理等场景下非常有用。 1️⃣ 配置文件目录结构 假设我们有一个深度学习训练项目&#xff0c;…...

oracle dbms_sqltune 使用

创建测试表 CREATE TABLE test_table (id NUMBER PRIMARY KEY,event_date DATE,value NUMBER );插入测试数据 DECLAREi NUMBER; BEGINFOR i IN 1..1000000 LOOPINSERT INTO test_table (id, event_date, value)VALUES (i, SYSDATE - MOD(i, 365), DBMS_RANDOM.VALUE(1, 1000)…...

Mediamtx+Python读取webrtc流

一、功能思路&#xff1a; 1、我采用ffmpeg -re -stream_loop -1 -i xcc.mp4 -c:v libx264 -profile:v baseline -x264opts "bframes0:repeat_headers1" -b:v 1500k -preset fast -f flv rtmp://127.0.0.1:1835/stream/111推流到mediamtx的rtmp上 2、通过mediamtx自…...

Makefile和算法(20250213)

1. Makefile 1.1 功能 管理工程代码的编译和链接&#xff0c;可以一键化实现代码工程的编译和管理。 时间戳&#xff1a;根据时间戳&#xff0c;可以只编译发生修改后的文件 1.2 Makefile 基本语法和相关操作 1.2.1 创建一个Makefile文件 Makefile/makefile&#xff08;首…...

postgresql源码学习(59)—— 磁盘管理器 SMGR

一、 定义及作用 PostgreSQL 的磁盘管理器&#xff08;Storage Manager&#xff0c;简称 SMGR&#xff09;是数据库系统中负责管理底层存储的核心模块。磁盘管理器并非直接操作磁盘上的文件&#xff0c;而是通过VFD&#xff08;虚拟文件描述符&#xff0c;将在后续学习&#xf…...

亚冬会绽放“云端”,联通云如何点亮冰城“科技之光”?

科技云报到原创。 35年前&#xff0c;中国第一次承办亚运会&#xff0c;宣传曲《亚洲雄风》红遍大江南北&#xff0c;其中有一句“我们亚洲&#xff0c;云也手握手”。如今回看&#xff0c;这句话仿佛有了更深的寓意&#xff1a;一朵朵科技铸就的“云”&#xff0c;把人和人连…...

寻找最优的路测路线

寻找最优的路测路线 真题目录: 点击去查看 E 卷 200分题型 题目描述 评估一个网络的信号质量,其中一个做法是将网络划分为栅格,然后对每个栅格的信号质量计算。 路测的时候,希望选择一条信号最好的路线(彼此相连的栅格集合)进行演示。 现给出 R 行 C 列的整数数组 Cov…...