Java对象的GC回收年龄的研究
目录
1、介绍
2、内存结构
2.1、普通对象
2.2、数组对象
2.3、数组长度作用
2.4、为什么 age 用 4 位?
3、对象头组成
3.1、Mark Word(标记字段)
3.2、Class Pointer(类指针)
4、GC 发生的位置
4.1、新生代
4.2、老年代
4.3、元空间(Metaspace,Java 8+)
5、对象晋升
5.1、15 次 Minor GC
5.2、动态年龄判定
5.3、Survivor区存活时间
5.4、修改晋升年龄阈值
6、更长的存活的方案
6.1、扩大 Survivor 区大小
6.2、G1 垃圾回收器
前言
在 Java 中,GC 年龄(GC Age 或 Tenuring Threshold) 是用于衡量对象在 年轻代(Young Generation) 中经历垃圾回收(GC)次数的指标。GC 年龄决定了对象何时从年轻代晋升到老年代(Old Generation),是 Java 垃圾回收机制中重要的优化策略之一。
不同垃圾回收器的处理方式如下:
1、Serial/Parallel Scavenge:
使用经典的 复制算法,对象在 Survivor 区之间来回复制,GC 年龄逐步增加。晋升到老年代的逻辑与上述规则一致。
2、G1(Garbage-First):
1.分区机制:
年轻代划分为多个 Region,对象晋升到老年代的 Region。
2.年龄表(Age Table):
G1 维护每个 Region 的年龄表,记录对象的存活情况和 GC 年龄分布。
3.动态调整晋升阈值:
G1 会根据 Region 的填充情况动态调整晋升策略,优化吞吐量和延迟。
3、CMS:
与 Serial/Parallel 类似,但 CMS 更关注减少 Full GC 的停顿时间,晋升策略会更保守。
1、介绍
关于java对象,存放在jvm的堆内存里面,在jdk1.8版本后,如下图所示:
通过合理配置和监控 GC 年龄,可以显著提升 Java 应用的性能和稳定性。
2、内存结构
如下图所示:
2.1、普通对象
- 对象头:
- Mark Word(64 位)
- Class Pointer(64 位,或 32 位,若启用指针压缩)
- 实例数据:
- 存储对象的字段值(如
int
、String
等)
- 存储对象的字段值(如
- 对齐填充:
- 补齐到 8 字节边界
2.2、数组对象
- 对象头:
- Mark Word(64 位)
- Class Pointer(64 位,或 32 位,若启用指针压缩)
- Array Length(32 位,固定 4 字节)
- 实例数据:
- 存储数组元素(如
int[10]
会存储 10 个int
)
- 存储数组元素(如
- 对齐填充:
- 补齐到 8 字节边界
区别:
2.3、数组长度作用
1.数组的元数据:
数组需要知道自己的长度(元素个数),而普通对象的字段数量和类型由类定义决定,不需要在对象头中存储。
2.内存管理:
数组的元素是连续存储的,JVM 需要通过长度字段快速访问元素(如 array[index]
)。
2.4、为什么 age
用 4 位?
如下图所示:
1. 4 位二进制数的限制
age
字段在 Mark Word 中仅占 4 位,因此最大可表示的值为2^4−1=15。- 当对象在 Survivor 区中经历 15 次 Minor GC 后,其
age
达到 15,会被晋升到老年代。
2. 设计权衡
- 节省空间:Mark Word 的总大小是固定的(64 位或 32 位),每个字段的位数需要精打细算。
age
只用 4 位,避免浪费。 - 满足需求:大多数应用场景中,对象的存活周期不会超过 15 次 Minor GC。如果超过,直接晋升到老年代即可。
- 兼容性:若
age
需要更多位(如 5 位),则需重新设计 Mark Word 的布局,可能影响其他字段(如哈希码、锁状态)的存储。
3、对象头组成
关于mark word的数据结构可参考:对于Synchronized和Volatile的深入理解-CSDN博客
Mark Word 的结构如下所示(以 64 位 JVM 为例):
锁标志位可分为:
-
00:轻量级锁
-
01:无锁/偏向锁
-
10:重量级锁
-
11:GC标记
对象头(Object Header)是对象在内存中的元数据区域,通常由两部分组成:
- Mark Word:存储对象的运行时数据,如哈希码、锁状态、GC 分代年龄(age)等。
- Class Pointer:指向对象所属类的元数据(如
java.lang.Class
)。
3.1、Mark Word(标记字段)
关于mark word可以参考:对于Synchronized和Volatile的深入理解-CSDN博客
- 作用:存储对象的运行时数据,例如:
- 哈希码(Hash Code)
- 锁状态(无锁、偏向锁、轻量级锁、重量级锁)
- GC 分代年龄(age)
- 偏向线程 ID
- 同步锁信息
- 大小:
- 32 位 JVM:32 位
- 64 位 JVM:64 位(可启用压缩指针优化为 32 位)
3.2、Class Pointer(类指针)
- 作用:指向对象所属类的元数据(即
java.lang.Class
对象),用于访问类的静态信息(如方法、字段等)。 - 大小:
- 32 位 JVM:32 位
- 64 位 JVM:64 位(可启用压缩指针优化为 32 位)
4、GC 发生的位置
在 JVM 中,内存被划分为不同的区域,不同区域的 GC 行为和触发条件不同:
如下图所示:
4.1、新生代
- 组成:Eden 区 + 两个 Survivor 区(From 和 To)。
- GC 类型:Minor GC(年轻代 GC)。
- 触发条件:
- 当 Eden 区分配对象时,空间不足。
- 新生代中的对象存活时间较短,Minor GC 频繁发生。
4.2、老年代
- 组成:存放长期存活的对象。
- GC 类型:Major GC / Full GC。
- 触发条件:
- 老年代空间不足。
- Minor GC 后对象无法放入 Survivor 区,需要晋升到老年代,但老年代空间不足。
- 元空间(Metaspace)不足(在 Java 8+ 中)。
- 显式调用
System.gc()
。
4.3、元空间(Metaspace,Java 8+)
- 作用:存储类的元数据(如类定义、方法信息等)。
- GC 类型:Full GC(当元空间不足时)。
5、对象晋升
而对于<jdk1.8:还有持久代。对于>=jdk1.8: metaspace。
如下图所示:堆结构在分配内存空间的时候:老年代占比2/3,新生代1/3。
而新生代里面eden和from、to区的内存占比分别为8:1:1。
关于 GC(垃圾回收)发生的位置 以及 “15次”的含义,可以从 JVM 的内存结构和 GC 策略两个角度来解释。
5.1、15 次 Minor GC
Minor GC 仅发生在 年轻代(Young Generation),即 Eden 区 + Survivor 区(From + To)。
15次 Minor GC 是对象在 Survivor 区 中存活的次数,不包括老年代的 Full GC。
1. 对象晋升规则
- 对象在 Eden 区分配后,经历 Minor GC:
- 如果存活,则被复制到 Survivor 区。
- 每次 Minor GC 后,对象的
age
加 1。 - 当
age
达到MaxTenuringThreshold
(默认 15)时,对象晋升到老年代。
Survivor1 和 Survivor2 区域之间的对象迁移是通过“标记-复制”算法实现的。
2. 4 位二进制数的硬性限制
age
最大只能是 15,因此 15 次 Minor GC 是 JVM 的硬性设计限制。- 如果需要更大的
age
,必须扩展 Mark Word 的位数,但会牺牲其他字段的空间。
5.2、动态年龄判定
触发条件:
如果某个年龄段的对象总大小超过 Survivor 区的 50%,即使未达到最大年龄阈值,也会被直接晋升到老年代。
例如:如果年龄为 3 的对象总大小超过 Survivor 区的 50%,则所有年龄 >=3 的对象都会晋升。
5.3、Survivor区存活时间
- 存活时间:对象在 Survivor 区的存活时间取决于其 年龄增长速度 和 晋升条件。
1.最短时间:
如果对象在第一次 Minor GC 后就晋升到老年代(如动态年龄判定触发),则仅存活 1 次 Minor GC。
2.最长时间:
如果对象一直存活到年龄达到 MaxTenuringThreshold
,则最多存活 MaxTenuringThreshold
次 Minor GC。
默认情况下,最多存活 15 次 Minor GC。
5.4、修改晋升年龄阈值
可以通过 JVM 参数调整对象晋升的年龄阈值:
-XX:MaxTenuringThreshold=15
- 如果尝试设置
MaxTenuringThreshold=20
,JVM 会将其 自动调整为 15,并可能输出警告或忽略该设置。 - 示例 JVM 输出:
[Warning] MaxTenuringThreshold is set to 20, but it will be adjusted to 15 due to 4-bit limit.
6、更长的存活的方案
JVM 会根据 Survivor 区的使用情况动态调整晋升阈值:
如果 Survivor 区使用率低,JVM 会适当提高阈值,让对象多经历几次 Minor GC 再晋升。
如果 Survivor 区使用率高,JVM 会降低阈值,让对象提前晋升到老年代。
可以通过以下方式间接实现:
6.1、扩大 Survivor 区大小
- 参数:
-XX:SurvivorRatio=N
- 默认值为 8,表示 Eden 区与 Survivor 区的比例为 8:1:1。
- 例如,
-XX:SurvivorRatio=4
会分配更大的 Survivor 区,容纳更多存活对象,从而减少晋升频率。
6.2、G1 垃圾回收器
G1(Garbage-First) 不依赖固定大小的 Survivor 区,而是通过分区(Region)管理内存,对对象晋升的控制更灵活。
可以通过 -XX:G1MixedGCCountTarget
等参数优化晋升策略。
G1通过统计每个Region的垃圾密度(Garbage Fraction),预测回收收益。存活时间长的对象所在的Region若垃圾密度低,回收优先级较低,从而减少不必要的回收操作。
G1在Full GC前会优先回收老年代中垃圾比例高的Region(Garbage-First策略)。
总结:
总结
通过这种设计,JVM 在对象头空间有限的情况下,平衡了性能、内存效率和功能需求。
参考文章:
1、对于Synchronized和Volatile的深入理解-CSDN博客
2、关于对JVM的知识整理_谈谈你对jvm的理解-CSDN博客
相关文章:
Java对象的GC回收年龄的研究
目录 1、介绍 2、内存结构 2.1、普通对象 2.2、数组对象 2.3、数组长度作用 2.4、为什么 age 用 4 位? 3、对象头组成 3.1、Mark Word(标记字段) 3.2、Class Pointer(类指针) 4、GC 发生的位置 4.1、新生代…...
IT系统的基础设施:流量治理、服务治理、资源治理,还有数据治理。
文章目录 引言I IT系统的基础设施流量治理、服务治理、资源治理,还有数据治理。开发语言的选择数据治理(监控系统):整体运维的数据其他II 基础知识的重要性第一,知道原理第二,当遇到一些比较难解的问题时,基础知识就会派上用场。例子III 快速学会一门编程语言把语言照着…...
SpringBoot应用启动过程
Spring 应用抽象 Springboot 是一个用来快速创建 Spring 应用的微服务框架,启动引导器是org.springframework.boot.SpringApplication 这个类,每个 SpringApplication 实例就表示一个 Spring 应用的启动类;Spring 应用生命周期包括创建、启动…...
傻子学编程之——Java并发编程的问题与挑战
傻子学编程之——Java并发编程的问题与挑战 Java并发编程能让程序跑得更快,但也像走钢丝一样充满风险。本文用最直白的语言和代码示例,带你直面并发编程的四大「致命陷阱」,并给出解决方案。 一、资源竞争:多个线程打架怎么办&am…...
groovy 如何遍历 postgresql 所有的用户表 ?
在 Groovy 中遍历 PostgreSQL 所有用户表,你可以使用 JDBC 连接数据库并执行 SQL 查询。以下是一个完整的示例: Groovy 代码示例 import groovy.sql.Sqldef config [url: jdbc:postgresql://localhost:5432/your_database,user: your_username,passwo…...
CPU cache基本原理
CPU cache基本原理 存储器层次结构存储器层次结构中的缓存高速缓存存储器直接映射高速缓存组相联高速缓存全相联高速缓存 多核 CPU 下缓存问题内存的读写操作流程数据一致性与并发控制 高速缓存(cache)是一个小而快速地存储设备,它作为存储在…...
【Java学习笔记】【第一阶段项目实践】零钱通(面向过程版本)
零钱通(面向过程版本) 需求分析 1. 需要实现的功能 (1) 收益入账 (2) 消费 (3 )查看明细 (4 )退出系统 2. 代码优化部分 (1) 对用户输入 4 退出时,给出提示 “你确定要退出吗?y/n”,必须输入正确的 y/n,…...
Cursor无法使用C/C++调试的解决办法
背景 这几天在二开ffmpeg,发现用cursor无法使用cppdbg进行调试,只能上机gdb,比较麻烦。 配置文件 // launch.json {// Use IntelliSense to learn about possible attributes.// Hover to view descriptions of existing attributes.// Fo…...
VSTO(C#)Excel开发进阶2:操作图片 改变大小 滚动到可视区
初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C++的,可以在任何平台上使用。 源码指引:github源码指引_初级代码游戏的博客-CSDN博客 入…...
嵌入式自学第二十二天(5.15)
顺序表和链表 优缺点 存储方式: 顺序表是一段连续的存储单元 链表是逻辑结构连续物理结构(在内存中的表现形式)不连续 时间性能, 查找顺序表O(1):下标直接查找 链表 O(n):从头指针往后遍历才能找到 插入和…...
高云FPGA-新增输出管脚约束
module led (input sys_clk, // clk inputinput sys_rst_n, // reset inputoutput reg [5:0] led, // 6 LEDS pinoutput reg gpio // 1 GPIO pin 25 ); 在原来的代码基础上新增加一个gpio输出,绑定到25管脚上 打开工程文件夹中的cts文件…...
Nginx 返回 504 状态码表示 网关超时(Gateway Timeout)原因排查
Nginx 返回 504 状态码表示 网关超时(Gateway Timeout),这意味着 Nginx 作为反向代理服务器,在等待上游服务器(如后端应用服务器、数据库服务器等)响应时,超过了预设的时间限制,最终…...
单片机 | 基于STM32的智能马桶设计
基于STM32的智能马桶设计结合了传感器技术、嵌入式控制及物联网功能,旨在提升用户体验并实现健康监测。以下是其设计原理、功能模块及代码框架的详细解析: 一、系统架构与核心功能 智能马桶的系统架构通常分为主控模块、传感器模块、执行器模块、通信模块及用户交互模块,主…...
2900. 最长相邻不相等子序列 I
2900. 最长相邻不相等子序列 I class Solution:def getLongestSubsequence(self, words: List[str], groups: List[int]) -> List[str]:n len(groups) # 获取 groups 列表的长度ans [] # 初始化一个空列表,用于存储结果for i, g in enumerate(groups): # 遍…...
欧姆龙 CJ/CP 系列 PLC 串口转网口模块:工业通信升级的智能之选
在工业自动化领域,欧姆龙 CJ/CP 系列 PLC 凭借高可靠性和灵活扩展性,广泛应用于汽车制造、食品加工、能源化工等关键行业。然而,传统串口通信的局限性(如距离受限、协议兼容性差、难以实现远程监控)却成为企业智能化升…...
BGP选路实验
一.需求 1.使用PreVal策略,确保R4通过R2到达192.168.10.0/24 2.使用As_Path策略,确保R4通过R3到达192.168.11.0/24 3.配置MED策略,确保R4通过R3到达192.168.12.0/24 4.使用Local Preference策略,确保R1通过R2到达192.168.1.0/2…...
Linux服务之lvs+keepalived nginx+keepalived负载均衡实例解析
目录 一.LVSKeepAlived高可用负载均衡集群的部署 二.NginxKeepAlived高可用负载均衡集群的部署 一.LVSKeepAlived高可用负载均衡集群的部署 实验环境 主keepalived:192.168.181.10 lvs (7-1) 备keepalived:192.168.181.10…...
idea整合maven环境配置
idea整合maven 提示:帮帮志会陆续更新非常多的IT技术知识,希望分享的内容对您有用。本章分享的是springboot的使用。前后每一小节的内容是存在的有:学习and理解的关联性。【帮帮志系列文章】:每个知识点,都是写出代码…...
pytest框架 - 第二集 allure报告
一、断言assert 二、Pytest 结合 allure-pytest 插件生成美观的 Allure 报告 (1) 安装 allure 环境 安装 allure-pytest 插件:pip install allure-pytest在 github 下载 allure 报告文件 地址:Releases allure-framework/allure2 GitHub下载&#x…...
互联网大厂Java求职面试:构建高并发直播平台的架构设计与优化
标题:互联网大厂Java求职面试:构建高并发直播平台的架构设计与优化 引言 在互联网大厂的Java求职面试中,技术总监级别的面试官通常会提出一系列复杂且前沿的技术问题,以评估候选人的真实技术水平。本篇文章将围绕构建一个千万级…...
Ruby 循环与迭代器
Ruby 循环与迭代器 循环迭代器timesuptostep 循环 。。。。 迭代器 迭代器本质上可以理解为是循环的一种类型 times 3.times do print "Ho! " end begin Ho! Ho! Ho! end上述代码表示我们对当前 block 部分中的内容循环三次。最终,我们打印出了三个…...
pyenv简单的Python版本管理器(macOS版)
问题 python版本是真的多,需要用一个版本管理器管理Python多版本安装在同一台机器的问题。接下来,我们就尝试使用pyenv来管理。 安装pyenv brew update brew install pyenv配置Zsh echo export PYENV_ROOT"$HOME/.pyenv" >> ~/.zshr…...
Automatic Recovery of the Atmospheric Light in Hazy Images论文阅读
Automatic Recovery of the Atmospheric Light in Hazy Images 1. 论文的研究目标与实际意义1.1 研究目标1.2 实际问题与产业意义2. 论文的创新方法、模型与公式2.1 方法框架2.1.1 方向估计(Orientation Estimation)2.1.2 幅值估计(Magnitude Estimation)2.2 与传统方法的对…...
Vuex和Vue的区别
Vue和Vuex有着不同的功能和定位,主要区别如下: 概念与功能 - Vue:是一个构建用户界面的JavaScript框架,专注于视图层的开发,采用组件化的方式构建应用程序,通过数据绑定和指令系统,能方便地…...
全国青少年信息素养大赛 Python编程挑战赛初赛 内部集训模拟试卷八及详细答案解析
信息素养大赛初赛Python编程模拟试卷八 博主推荐 所有考级比赛学习相关资料合集【推荐收藏】1、Python比赛 信息素养大赛Python编程挑战赛 蓝桥杯python选拔赛真题详解...
RabbitMQ 消息模式实战:从简单队列到复杂路由(二)
进阶探索:工作队列模式 工作队列模式剖析 工作队列模式,也被称为任务队列模式,是对简单队列模式的一种扩展和优化,旨在解决当任务量较大时,单个消费者无法快速处理所有任务的问题 。在工作队列模式中,依然…...
崩坏星穹铁道风堇前瞻养成攻略 崩坏星穹铁道风堇配队推荐
风堇是崩坏星穹铁道3.3上半版本即将登场的一名全新五星角色,她的机制和强度都还不错,今天就给大家一些养成攻略。 一、突破材料准备 1.基础材料:旅情见闻 3 个冒险记录 3 个漫游指南 289 个命运的足迹 8 个 2.特供材料:思量的种…...
如何利用 Python 爬虫按关键字搜索京东商品:实战指南
在电商领域,京东作为国内知名的电商平台,拥有海量的商品数据。通过 Python 爬虫技术,我们可以高效地按关键字搜索京东商品,并获取其详细信息。这些信息对于市场分析、选品上架、库存管理和价格策略制定等方面具有重要价值。本文将…...
阿里云的网络有哪些
阿里云的网络类型丰富,主要包括以下几种: 专有网络 VPC(Virtual Private Cloud)1:是用户基于阿里云创建的自定义私有网络。不同的专有网络之间二层逻辑隔离,用户可在自己创建的专有网络内创建和管理云产品…...
【微信小程序】webp资源上传失败
正文 快速开发了一个小程序,图片资源占比较多,于是从 png 到 jpg 压缩,勉强满足了 2MB 的限制,不用另外准备 cdn。 但这样肯定不适合,进一步更新时,空间便会爆表。 于是花了点时间,将所有的…...
鸿蒙 ArkUI - ArkTS 组件 官方 UI组件 合集
ArkUI 组件速查表 鸿蒙应用开发页面上需要实现的 UI 功能组件如果在这 100 多个组件里都找不到,那就需要组合造轮子了 使用技巧:先判断需要实现的组件大方向,比如“选择”、“文本”、“信息”等,或者是某种形状比如“块”、“图…...
科学养生指南:解锁健康生活的密码
健康是人生最宝贵的财富,科学养生则是守护这笔财富的关键。即使抛开传统中医理论,现代科学也为我们提供了诸多实用的养生方法。 合理饮食是健康养生的基石。人体需要碳水化合物、蛋白质、脂肪、维生素和矿物质等多种营养物质维持运转。日常饮食应遵循…...
Linux的进程管理和用户管理
gcc与g的区别 比如有两个文件:main.c mainc.cpp(分别是用C语言和C语言写的)如果要用gcc编译: gcc -o mainc main.c gcc -o mainc mainc.cpp -lstdc表明使用C标准库; 区别一: gcc默认只链接C库&#x…...
数据科学和机器学习的“看家兵器”——pandas模块 之五
目录 4.5 pandas 高级数据处理与分析 一、课程目标 二、对数据表格进行处理 (一)行列转置 (二)将数据表转换为树形结构 三、数据表的拼接 (一)merge () 函数的运用 (二)concat () 函数的运用 (三)append () 函数的运用 四、对数据表格的同级运算 五、计算数据表格中数…...
轻量级Web画板Paint Board如何本地部署与随时随地在线绘画分享
文章目录 前言1.关于Paint Board2.本地部署paint-board3.使用Paint Board4.cpolar内网穿透工具安装5.创建远程连接公网地址6.固定Paint Board公网地址 前言 今天我要给大家介绍一款超级轻便、好玩到飞起的Web画板Paint Board!这可是创意人手中的秘密武器。无论是刚…...
攻击溯源技术体系:从理论架构到工程化实践的深度剖析
一、攻击溯源的理论基石与模型构建 1.1 形式化理论框架 攻击溯源本质上是基于离散数学与图论的演绎推理过程。通过构建攻击事件有向图(AEDG, Attack Event Directed Graph),将网络空间中的每个事件抽象为节点,事件间的因果关系…...
fpga系列 HDL : Microchip FPGA开发软件 Libero Soc 安装 license申请
启动 注册账号:https://login.microchip.com/申请免费许可:https://www.microchipdirect.com/fpga-software-products C:\Windows\System32>vol驱动器 C 中的卷是 Windows卷的序列号是 ****-****为“D:\Microsemi\License.dat”创建环境变量“LM_LICE…...
海康立体相机3DMVS软件使用不同工作模式介绍
文章目录 1. Sensor Calibration(传感器标定模式)2. Depth(深度模式)3. RGB-D(彩色深度融合模式)4. Depalletizing(拆垛模式)5. Debug(调试模式)6. Point Clo…...
深度学习、机器学习及强化学习的联系与区别
联系 深度学习与机器学习 :深度学习是机器学习的一个分支。机器学习涵盖众多方法,如决策树、支持向量机等,而深度学习基于神经网络构建多层结构来学习数据特征。深度学习利用反向传播算法和梯度下降等优化方法来训练神经网络模型,…...
75.xilinx复数乘法器IP核调试
(83*j)*(57j) 935j 正确的是 1971j 分析出现的原因:(abj)* (cdj) (ac-bd)j(adbc) 其中a,b,c,d都是16bit的有符号数,乘积的结果为保证不溢出需要32bit存储,最终的复数乘法结果是两个32b…...
【笔记】CosyVoice 模型下载小记:简单易懂的两种方法对比
#工作记录 笔记标签:#CosyVoice 模型 #模型下载 #ModelScope #Git LFS #语音合成开发 一、强烈推荐:用 ModelScope SDK 下载(简单又靠谱) 1.1 好处多多 不容易出错:能自动把模型需要的所有东西都下载好,…...
本地部署 私有云网盘 Nextcloud 并实现外部访问
Nextcloud 是一款开源免费的私有云盘系统,可以快速地搭建一套属于自己的云同步网盘,从而实现跨设备的文件同步、文件共享、以及团队协作等功能。Nextcloud 功能强大且完全开源,拥有庞大的开源社区支持。 本文将详细的介绍如何利用 Docker 在…...
黑马程序员C++2024版笔记 第0章 C++入门
1.C代码的基础结构 以hello_world代码为例: 预处理指令 #include<iostream> using namespace std; 代码前2行是预处理指令,即代码编译前的准备工作。(编译是将源代码转化为可执行程序.exe文件的过程) 主函数 主函数是…...
D3485:一款高性能RS-485收发器解析
D3485是一款5V供电、半双工RS-485收发器,广泛应用于智能电表、工业控制和安防监控等领域。它内部包含一路驱动器和一路接收器,采用限摆率驱动器设计,能有效减少电磁干扰(EMI)和反射,支持高达10Mbps的无差错…...
std::deque和std::vector对比
std::deque和std::vector都是 C标准库中非常重要的容器,但它们的设计目标和优化方向不同,因此各有适用场景。std::deque并没有取代std::vector,原因主要在于以下几个方面: 1.性能特点不同 1.1std::vector的优势 • 连续存储&am…...
【蓝桥杯省赛真题49】python偶数 第十五届蓝桥杯青少组Python编程省赛真题解析
python偶数 第十五届蓝桥杯青少组python比赛省赛真题详细解析 博主推荐 所有考级比赛学习相关资料合集【推荐收藏】1、Python比赛 信息素养大赛Python编程挑战赛 蓝桥杯python选拔赛真题详解...
15分钟决胜项目管理:碎片时间的高效拆解术
作为项目经理,你是否经常觉得一天像打仗?会议连轴转、消息轰炸、计划赶不上变化……时间总是不够用。但真相是:高效的人并不是时间更多,而是更会“切分时间”。试试“15分钟法则”——每天用几段碎片时间,就能让工作从…...
计算机网络:什么是电磁波以及有什么危害?
电磁波详解 电磁波(Electromagnetic Wave)是由电场和磁场相互激发、在空间中传播的能量形式。它既是现代通信的基石(如手机、Wi-Fi、卫星信号),也是自然界中光、热辐射等现象的本质。以下从定义、产生、特性、分类及应用全面解析: 一、电磁波的本质 1. 核心定义 电场与…...
Docker部署单节点Elasticsearch
1.Docker部署单节点ES 1.前置条件 配置内核参数 echo "vm.max_map_count262144" >> /etc/sysctl.conf sysctl -w vm.max_map_count262144准备密码 本文所有涉及密码的配置,均使用通用密码 Zzwl2024。 生产环境,请用密码生成器生成20…...
Docker构建Nginx、PHP、MySQL及WordPress部署及解释
目录 一、构建Nginx 二、构建PHP 三、构建MySQL 四、启动容器 五、测试 六、部署网站 一、构建Nginx 创建目录并进入目录 bash 复制 mkdir /opt/nginx cd /opt/nginx mkdir /opt/nginx:在 /opt 目录下创建一个名为 nginx 的目录。 cd /opt/nginx&#x…...