JVM——Java虚拟机
JVM——Java虚拟机
- 一. 内存区域划分
- 二. 类加载机制
- 2.1 双亲委派模型(类加载环节)
- 三. 垃圾回收机制(GC)
- 3.1 识别垃圾
- 3.2 释放内存空间
一. 内存区域划分
JVM本身也是一个进程,会向系统申请内存,然后根据实际的用途划分出不同的空间。
JVM申请到的内存主要分为四个部分:堆、栈(此处的堆、栈并非是数据结构中的堆和栈)、程序计数器、元数据区。
- 堆
代码中new出来的对象,位于堆中;对象中持有的非静态成员变量,也在这里。 - 栈
分为本地方法栈和虚拟机栈,包含了方法调用关系和局部变量。
本地方法栈是指:JVM内部,通过C++实现的调用关系和局部变量;
虚拟机栈是指:Java代码的调用关系以及Java中的局部变量。 - 程序计数器
比较小的空间,存储下一条要执行的Java指令的地址。x86的cpu也有一个类似的寄存器——eip。 - 元数据区(方法区)
所谓“元数据”,是指一些具有辅助性质的、描述性质的属性。
比如类的信息、方法的信息、一个程序中有哪些类、每个类中有哪些方法、每个方法中包含哪些指令都会记录在元数据区。
此外还要注意:在JVM中,堆和元数据区只有一份,而栈和程序计数器有多份,每个线程都有一个独立的执行流,有一份独立的栈和程序计数器。
了解了内存区域划分的方法之后,我们来看一个例子加深理解:
class Test{private int n;private static int m;
}
public class Solo{public static void main(String[] args){Test t = new Test();}
}
试问:上述代码中的n,m,t 都存在于内存分区中的哪些区域?
t是一个局部变量,因此位于栈上;
n是一个非静态成员变量,位于堆上,实际上new出来的Test() 对象也位于此处,t中存放的是Test()对象的地址。
m是一个静态成员变量,位于元数据区/方法区,带有static修饰的成员变量也叫做类属性,属于类的信息,因此位于元数据区。
二. 类加载机制
类加载指的是,java进程运行的时候,将.class文件从硬盘读取到内存,并进行一系列的校验解析的过程。
类加载大致可以分为5步:
- 加载
找到硬盘上的.class文件、打开并读取文件内容。 - 验证
确保当前读取到的内容是合法的.class文件格式,包括文件格式验证、字节码验证、符号引用验证等等。 - 准备
给类对象,申请内存空间,此时申请到的内存空间,里面的值全为0(相当于仅执行了申请这一步骤)。 - 解析
主要是针对类中的字符串常量进行处理,将常量池中的符号引用替换为直接引用(初始化常量)。
什么叫做将符号引用替换为直接引用?
由于文件中不存在地址这个概念,地址是“内存”的地址。虽然不存在地址,但是可以通过一些其他的描述来替代地址,比如:偏移量。
如何理解偏移量呢,举个形象的例子:
以前学校组织看电影的时候,要求我们在电影院门口排队,进去影院后按列依次坐下。为了跟我的好朋友坤坤坐在一起,我就需要计算一下:跟坤坤站位隔开几个同学。
同样的,此处的隔开几个同学就是偏移量,是我们进去影院前位置的描述方式。而进去影院后,我们就有了座位,就相当于内存中有了地址。这就是将符号引用替换为直接引用。
- 初始化
针对类对象完成后续的初始化,还要执行静态代码的逻辑,可能会触发父类的加载。
2.1 双亲委派模型(类加载环节)
描述了如何查找.class文件的策略。JVM中进行类加载的操作,有一个专门的模块,称为“类加载器”(ClassLoader),JVM中的类加载器默认有三个,也可以自定义。
- 下层的Application ClassLoader负责查找当前项目的代码目录以及第三方的目录;
- 中层的Extension ClassLoader负责查询扩展库的目录;
- 上层的Bootstrap ClassLoader负责查询标准库的目录。
双亲委派模型的工作过程,是一个递归的过程:
- 从Application ClassLoader进入,开始工作,但是Application ClassLoader不会立即搜索自己负责的目录,会把搜索任务向上传递给Extentsion ClassLoader;
- Extension ClassLoader接到任务后,也不会立即搜索自己负责的目录,同样将任务向上传递;
- Bootstrap ClassLoader接到任务后,不能继续向上传递,于是开始搜索自己的目录,如果没搜索到,就将任务向下传递;
- 此时Extension ClassLoader开始查询自己的目录,若没有查询到,将任务下传,Application ClassLoader进行查询,若仍然没有查询到,就抛出异常:ClassNotFoundException。
那么为什么要这么设定呢?
确保类加载器的优先级。上述执行顺序始终为先查询标准库、再查询扩展库、最后查询自定义库。这样的顺序可以避免由于自己引入的类与标准库中的类重名而引起的问题。就好比我们国家的任何法律都要服从宪法,任何地方行政条例都要服从法律。
当然,如果自定义类加载器,也就不遵守上述双亲委派的模型。
三. 垃圾回收机制(GC)
首先来说,垃圾回收是回收内存。那JVM申请到的内存又分为好几块,具体要回收哪些呢?
- 栈中存放的是局部变量,由于局部变量再代码执行完毕后会自动销毁,因此不需要回收;
- 程序计数器也不需要回收,只需要在每个指令周期内更新即可;
- 元数据区一般也不需要回收,因为很少涉及到类卸载;
既然上面三个都不需要GC,那么堆一定是需要的了。
3.1 识别垃圾
判定这个对象是否为垃圾,主要是看有没有引用指向他,如果没有,则视为垃圾(除了匿名对象)。
//对于这样的匿名对象,在该条代码执行完,就会被视为垃圾.
new Mythread().start();
如果只有一层引用,那么很简单,当栈上的局部变量被销毁后,堆上的对象就被视为垃圾。
而如果是多层调用,这里就不得不引入新的机制:
- 引入计数(PHP,Python采用)
引入计数,就是给每个对象安排一个额外的空间,空间中保存当前对象有几个引用。只有引用数为0时,才将该对象视为垃圾。
之所以未采用这个机制,一是考虑到引入额外的空间会消耗内存(特别时对象比较小的时候,这个空间就显得格外累赘);二是考虑到循环引用的问题(类似于多线程中的死锁),此时这个机制就无法正常工作。
class Test{Test t;
}
Test a=new Test();
Test b=new Test();
a.t=b;
b.t=a;
a=null;
b=null;
比如这段代码,在a、b未被赋值为null之前,引用计数为2;而在a、b被赋值为null之后,引用计数为1,此时也无法访问到a.t和b.t,那么这两个对象就处于既不能用,也没有被视为垃圾的境地。(os:当然你要是能先给a.t和b.t赋值为null,再给a、b赋值null,也不会出现这样的问题,就像死锁是可以人为避免的、但是是容易忽略的)
- 可达性分析(Java采用)
不会产生循环引用的问题、也不会消耗额外的空间,属于以时间换空间的策略。
基本思路就是选择一些变量作为GC Roots(主要是栈和方法区中的对象),反复出发遍历,如果该对象能遍历到,就不是垃圾,如果遍历不到,就视为垃圾。
详细的可以参考这篇
3.2 释放内存空间
当对象被标记为垃圾之后,释放内存空间还有多种方式。
- 标记-清除
把标记为垃圾的对象,直接释放掉(最朴素的方法),缺点是会引起内存碎片化。
- 复制算法
复制算法是将内存空间划分为等大小的两块,当识别出垃圾后,不直接释放,而是把不是垃圾的对象复制到另一边,然后统一释放这一半的内存空间。缺点是浪费了一半的内存空间,且在某些条件下效率低(垃圾极少,几乎复制所有内存)
- 标记-整理
类似于顺序表,删除中间元素的过程,会将后面的元素依次向前搬运。缺点是不论识别出多少垃圾,都会造成大量搬运,效率低。
- 分代回收(Java真正采用)
这是综合了上述的复制算法和标记-整理算法得出的方法,各取所长。
这里引入了一个概念,对象的年龄。Java中有专门的线程负责周期性扫描/释放内存,一个对象,如果被扫描了一次,可达(不是垃圾),年龄+1。
JVM根据对象年龄的差异,将堆内存划分为两个部分,新生代(年龄小)/老年代(年龄大)。整个过程大致如下:
- 当创建一个对象的时候,它位于伊甸区,由于Java中的大部分对象都有朝生夕死的特性,大部分活不过第一轮GC。少数幸存的对象通过复制算法进入生存区,年龄+1。继续扫描新生代,生存区中的对象如果存活,就会在两个生存区之间来回复制。
- 当生存区中的对象经历了若干轮GC之后仍然存在,JVM就认为这个对象的生命周期很长,就会将它拷贝到老年代。
- 老年代的对象,也会被GC扫描,但是扫描的频率会大大降低。当老年代的对象死亡,就会按照标记-整理的方式进行回收。
这个方法综合了复制算法和标记-整理算法。在新生代很大程度上避免了复制算法浪费空间和极端情况下效率低的缺点;在老年代,由于对象不易死亡,不容易引起大量的搬运,也尽量避免了效率低的特点。
os:其实这个过程还真有现实例子可举,比如以后找工作的过程中:
一图胜万言,兄弟们自己体会吧~~
相关文章:
JVM——Java虚拟机
JVM——Java虚拟机 一. 内存区域划分二. 类加载机制2.1 双亲委派模型(类加载环节) 三. 垃圾回收机制(GC)3.1 识别垃圾3.2 释放内存空间 一. 内存区域划分 JVM本身也是一个进程,会向系统申请内存,然后根据实…...
2024年数维杯数学建模A题多源机会信号建模与导航分析解题全过程论文及程序
2024年数维杯数学建模 A题 多源机会信号建模与导航分析 原题再现: (一)问题背景 尽管全球卫星定位系统下的定位导航技术已成熟,但考虑到室内、隧道、建筑密集区等复杂环境或全球卫星定位系统被毁失灵等突发场景,…...
解释 TypeScript 中的类型保护(type guards),如何使用类型保护进行类型检查?
TypeScript类型保护深度解析 核心概念解析 类型保护是TypeScript用于在条件分支中缩小变量类型范围的机制,通过特定的语法结构让编译器能够推导出更精确的类型信息。其核心价值在于提升代码类型安全性,同时保持开发效率。 五大实现方式及实战案例 1.…...
【时时三省】(C语言基础)习题:分析一个程序
( 1 )运行时会输出什么信息?为什么? ( 2 )如果将程序第4,5行改为 c1 197; c2 198; 运行时会输出什么信息?为什么? ( 3 )如果将程序第3行改为 int cl , c2 ; 运行时会输出什么信息?为什么? ( 1 )输出结果…...
基于springboot的旅游网站(013)
摘 要 随着科学技术的飞速发展,各行各业都在努力与现代先进技术接轨,通过科技手段提高自身的优势,旅游网站当然也不能排除在外,随着旅游网站的不断成熟,它彻底改变了过去传统的旅游网站方式,不仅使旅游管理…...
vscode查看文件历史git commit记录
方案一:GitLens 在vscode扩展商店下载GitLens 选中要查看的文件,vscode界面右上角点击GitLens的图标,选择Toggle File Blame 界面显示当前打开文件的所有修改历史记录 鼠标放到某条记录上,可以看到记录详情,选中O…...
基于Wasm的边缘计算Pandas:突破端侧AI的最后一公里——让数据分析在手机、IoT设备上飞驰
引言:边缘计算的算力觉醒 在智能家居设备每秒产生数万条传感器数据、手机App需要实时分析用户行为的今天,传统云计算模式面临高延迟、隐私风险、带宽成本三大挑战。本文将揭示如何通过WebAssembly(Wasm)Pandas的技术组合…...
负载均衡的在线OJ项目
负载均衡的在线OJ项目 所用技术与开发环境项目的宏观结构我们的项目要实现的最重要的功能:我们项目的整体结构:项目编写思路 compile_server模块compiler模块设计与编写Runner模块设计与编写细节setrlimit系统调用函数程序流程图 Compile_and_run模块设计…...
CPP从入门到入土之类和对象Ⅱ
一、六大默认成员函数 默认成员函数是用户没有显式实现,编译器自动生成的成员函数。 一个类,我们在不写的情况下,编译器会默认生成六个默认成员函数 本文详细介绍构造函数和析构函数 二、构造函数 构造函数虽名为构造函数,但是…...
2025年 cocosCreator 1.8 定制 JavaScript 引擎
参考文档:https://docs.cocos.com/creator/1.9/manual/zh/advanced-topics/engine-customization.html PS: 1.8的文档已经没了,只能看1.9的,所幸这两个版本差别不大 获取 JS 引擎 原文中github上的分支已经找不到了,这里直接从c…...
「JavaScript深入」Socket.IO:基于 WebSocket 的实时通信库
Socket.IO Socket.IO 的核心特性Socket.IO 的架构解析Socket.IO 的工作流程Socket.IO 示例:使用 Node.js 搭建实时聊天服务器1. 安装 Socket.IO2. 服务器端代码(Node.js)3. 客户端代码(HTML JavaScript)4. 房间功能 高…...
turnjs图册翻书效果
npm install https://github.com/igghera/turn.js.git //或者 npm install turn.js //import $ from "jquery"; //记得引入jquery import turn.js; // 引入 Turn.jsimport turn from "/utils/turn.min.js";// 引入 Turn.jsinitBook(length) {var that thi…...
大语言模型的训练数据清洗策略
目录 大语言模型的训练数据清洗策略 1. 数据去重与标准化 问题 解决方案 示例代码(Python 实现数据去重): 2. 过滤有害内容 问题 解决方案 示例代码(基于关键词过滤有害内容): 3. 纠正数据不均衡 …...
在 Vue 项目中调用 DeepSeek API(示例篇)
在 Vue 项目中调用 DeepSeek(假设 DeepSeek 是一个提供 API 服务的第三方工具,例如用于搜索、数据分析等),通常需要通过 HTTP 请求与 DeepSeek 的 API 进行交互。以下是一个简单的示例,展示如何在 Vue 项目中调用 DeepSeek API。 实例如下: 安装依赖 首先,确保你的项目中…...
对接股票金融数据源API
StockTV 股票市场API StockTV 提供全面的实时和历史股市数据 API,涵盖全球股票、外汇、期货及市场新闻数据,助力投资者精准把握市场动态。 主要功能 实时和历史股市数据 API 获取全球股票市场的实时行情、历史数据及深度分析,支持多语言查询…...
蓝桥杯关于栈这个数据结构的一个算法题目
文章目录 1.题目概述解释2.思路分析3.代码解析 1.题目概述解释 找出来这个字符串里面重复出现的字符,类似于这个消消乐的游戏; 示例一里面的这个bb是连续的并且是一样的这个字符,因此删除bb,删除之后发现这个aa有一次相邻了&…...
SpringBoot配置文件加载优先级
在Spring Boot项目中,配置属性的优先级是一个重要的概念,它决定了当存在多个配置源时,哪个配置源的属性将被应用。以下是SpringBoot中配置属性的优先级,从最高到最低: 命令行参数: 命令行参数具有最高的优先…...
企业数据治理解决方案(46页PPT)(文末有下载方式)
资料解读:企业数据治理解决方案 详细资料请看本解读文章的最后内容。 在当今数字化时代,数据已成为企业的核心资产,对企业的发展起着至关重要的作用。然而,许多企业在数据管理方面面临诸多挑战,如数据不全、样式繁多、…...
版本控制器Git ,Gitee如何连接Linux Gitee和Github区别
📖 示例场景 假设你和朋友在开发一个「在线笔记网站」,代码需要频繁修改和协作: 只用本地文件管理 每次修改后手动复制文件,命名为 v1.html、v2.html 问题:无法追踪具体改动内容;多人修改易冲突࿱…...
[网安工具] 网安工具库 —— 工具管理手册
0x00:工具管理类 — Tools Management 0x01:信息收集类 — Information Gathering 自动化综合信息收集工具 — ARL 灯塔 0x02:漏洞探测类 — Vulnerability Identification 浏览器渗透辅助插件 —— HackBar 0x03:漏洞利用类…...
在LwIP中,`tcp_recved()`、`tcp_sndbuf()` 和 `tcp_write()`三个函数详细用法及示例
在LwIP中,tcp_recved()、tcp_sndbuf() 和 tcp_write() 是TCP协议栈的核心函数,用于管理接收和发送数据流。以下是它们的详细用法及示例: 1. tcp_recved() 功能 通知协议栈已处理接收数据:当应用层从接收缓冲区读取数据后&#x…...
外卖避雷方案 改进型(个人使用版)
昨天怒花100请教了双尾彗星对外卖避雷的计划。 总结下来是行不通。 1.很容易被水军冲击数据真实性, 1.这种方案是从末端来解决问题,食品卫生问题,最好还是从解决分成方面的问题。 2.这种方案没有解决人们对食品安全的焦虑。 既然这样那只能先弄个只给自己用的避雷程序,打造…...
深度学习与传统算法在人脸识别领域的演进:从Eigenfaces到ArcFace
一、传统人脸识别方法的发展与局限 1.1 Eigenfaces:主成分分析的经典实践 算法原理 Eigenfaces是基于主成分分析(PCA)的里程碑式方法。其核心思想是将人脸图像视为高维向量,通过协方差矩阵计算特征向量(即特征脸&…...
druid开启防火墙之后的bug
bug以及解决方案 不允许执行多个语句不允许有注释部分数据有误识别,抛出异常,导致原本正常执行的语句被中断 解决方案 application.yaml中对于druid配置如下: wall:enabled: true # 开启防火墙config:multi-statement-allow: true # 允许多个…...
代码随想录_动态规划
代码随想录 动态规划 509.斐波那契数 509. 斐波那契数 斐波那契数 (通常用 F(n) 表示)形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是: F(0) 0,F(1) 1 F(n…...
指令系统3(算数运算指令)
一.加法指令(ADD): 用于执行 16 位或 32 位的加法运算。 指令格式及功能: ADD Rd, Rm:将寄存器Rd和Rm的值相加,结果存回Rd,即Rd Rd Rm。ADD Rd, Rn, Rm:把寄存器Rn和Rm的值相加&…...
VLLM专题(三十一)—架构概述
本文档提供了vLLM架构的概述。 1. 入口点 vLLM 提供了多个与系统交互的入口点。下图展示了它们之间的关系。 1.1 LLM 类 LLM 类提供了用于进行离线推理的主要 Python 接口,即在不使用单独的模型推理服务器的情况下与模型进行交互。 以下是 LLM 类的使用示例: from vll…...
【操作系统】进程间通信方式
进程间通信方式 前言 / 概述一、管道管道命名管道 二、消息队列三、共享内存四、信号量信号量概述互斥访问条件同步信号 五、socket总结 前言 / 概述 每个进程的用户地址空间都是独立的,⼀般而言是不能互相访问的,但内核空间是每个进程都共享的ÿ…...
Flutter 打包 ipa出现错误问题 exportArchive
一、错误信息: Encountered error while creating the IPA: error: exportArchive: "Runner.app" requires a provisioning profile with the Push Notifications feature. Try distributing the app in Xcode: open /project/your_app/build/ios/archive/Runner.…...
Ubutu20.04安装docker与docker-compose
系统:20.04.6 LTS (Focal Fossa)" 1.配置apt源(在/etc/apt/sources.list中输入以下内容) # deb cdrom:[Ubuntu 20.04.6 LTS _Focal Fossa_ - Release amd64 (20230316)]/ focal main restricted deb http://mirrors.aliyun.com/ubuntu/ focal main restricted …...
Java 反射机制
Java 反射机制 Java 反射机制1. 反射机制简介2. 反射的核心类3. 反射的基本步骤3.1 加载类,获取类的字节码:Class 对象3.2 获取类的构造器:Constructor 对象3.3 获取类的成员变量:Field 对象3.4 获取类的成员方法:Meth…...
前端流式输出实现详解:从原理到实践
前端流式输出实现详解:从原理到实践 前言一、流式输出核心原理1.1 什么是流式输出?1.2 技术优势对比1.3 关键技术支撑 二、原生JavaScript实现方案2.1 使用Fetch API流式处理关键点解析: 2.2 处理SSE(Server-Sent Eventsÿ…...
CTF题目《easy_tornado》(护网杯 2018)Write Up
题目背景与信息收集 初始访问 题目提供三个文件链接: /flag.txt:提示flag位于/fllllllllllllag文件/welcome.txt:关键词render,暗示模板渲染漏洞(SSTI)/hints.txt:提示签名算法md5(cookie_secre…...
暗光增强技术研究进展与产品落地综合分析(2023-2025)
一、引言 暗光增强技术作为计算机视觉与移动影像领域的核心研究方向之一,近年来在算法创新、硬件适配及产品落地方面取得了显著进展。本文从技术研究与产业应用两个维度,系统梳理近三年(2023-2025)该领域的关键突破,并对比分析主流手机厂商的影像技术优劣势。 二、暗光增…...
CAM350-14.6学习笔记-1:导入Gerber文件
CAM350-14.6学习笔记-1:导入Gerber文件 使用自动导入器导入Gerber1:导航栏Home下面的Import——Automatic Import——选择文件路径——Next2:设置每层的类型:3:设置叠层4:弹出层别显示框及Gerber显示 按照Allegro输出的…...
【Zephyr】【二】学习笔记【RTOS系统架构】
Zephyr RTOS 系统架构 整体架构 #mermaid-svg-MENZa2zm9JlGktYP {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-MENZa2zm9JlGktYP .error-icon{fill:#552222;}#mermaid-svg-MENZa2zm9JlGktYP .error-text{fill:#55…...
Web-Machine-N7靶机通关攻略
获取靶机ip arp-scan -l 端口扫描 nmap xxxx 访问80端口发现没用 扫描目录 gobuster dir -u http:/192.168.117.160 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium,txt -x php,html,txt ,zip 打开exploit.html 点击F12,修改localhost为靶机ip&#…...
CSS 用于图片的样式属性
CSS 设置图像样式 CSS中用于图片的样式属性主要包括以下几个方面: 边框和背景: border:可以设置图片的边框样式、宽度和颜色。例如,img { border: 1px solid #ddd; } 会给图片添加1像素的实线边框,颜色为灰色…...
【工具分享】vscode+deepseek的接入与使用
目录 第一章 前言 第二章 获取Deepseek APIKEY 2.1 登录与充值 2.2 创建API key 第三章 vscode接入deepseek并使用 3.1 vscode接入deepseek 3.2 vscode使用deepseek 第一章 前言 deepseek刚出来时有一段时间余额无法充值,导致小编没法给大家发完整的流程&…...
《Java核心三问:字符串、equals()、hashCode()的隐藏雷区与完美避坑手册》
目录 一.String、StringBuffer、StringBuilder的区别?1. 核心区别总结2. 具体实例演示示例1:不可变性 vs 可变性示例2:线程安全验证 2. 线程安全的关键:synchronized3. 对比StringBuilder的非线程安全4. 可视化执行流程5. 进一步验…...
【Java】TCP网络编程:从可靠传输到Socket实战
活动发起人小虚竹 想对你说: 这是一个以写作博客为目的的创作活动,旨在鼓励大学生博主们挖掘自己的创作潜能,展现自己的写作才华。如果你是一位热爱写作的、想要展现自己创作才华的小伙伴,那么,快来参加吧!…...
背包问题——多重背包(C语言)
代码如下: #include<stdio.h>int knapsack(int weight[], int value[], int count[], int n, int capacity) {int* dp (int*)malloc(sizeof(int) * (capacity 1));for (int i 0; i < capacity; i){dp[i] 0;}for (int i 0; i < n; i)//核心代码{fo…...
微服务》》Kubernetes (K8S) 集群配置网络》》Calico
嘻嘻嘻 以Calico 为例子 Calico官网 官网上有安装Calico插件的步骤 步骤 要在主节点 主节点 主节点 执行 kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.29.2/manifests/tigera-operator.yaml kubectl get pod --all-namespaces kubec…...
寄存器(内部访问)
内存中字的储存 我们之前提到过,字由两个字节组成,当我们用16位寄存器来储存时,把字分别储存在连续的两个内存单元中,高位字节放在高地址单元中,低位字节则放在低位地址单元中。 例如上图,0、1两个单元存放…...
Vue2 watch侦听器(监听器)
watch侦听器(监听器)功能是监听数据变化,执行一些业务逻辑 或 异步操作。 核心选项 handler 监听函数,接收 (newVal, oldVal) 作为参数。deep: true 深度监听对象/数组内部变化。immediate: true 在组件创建时…...
【PCB工艺】基础:电子元器件
电子原理图(Schematic Diagram)是电路设计的基础,理解电子元器件和集成电路(IC)的作用,是画好原理图的关键。 本专栏将系统讲解 电子元器件分类、常见 IC、电路设计技巧,帮助你快速掌握电子电路…...
linux性能监控的分布式集群 prometheus + grafana 监控体系搭建
prometheusgrafana分布式集群资源监控体系搭建 前言一、安装 prometheus二、在要监控的服务器上安装监听器三、prometheus服务器配置四、grafana配置大屏五、创建Linux监控看板五、监控windows服务器注意事项 前言 Prometheus 是一个开源的 分布式监控系统 和 时间序列数据…...
Ubuntu AX200 iwlwifi-cc-46.3cfab8da.0.tgz无法下载的解决办法
文章目录 前言一、检查网卡是否被识别二、确认内核模块是否可用1.AX200 wifi 要求内核5.12.检查 iwlwifi.ko 是否存在:3.如果未找到,可能是内核模块未正确生成。尝试安装 linux-modules-extra:4.再次检查 iwlwifi.ko 是否存在:5.确…...
LinkedList与链表
ArrayList的缺陷 在上一篇博客中,小编已经较为详细得给大家介绍了ArrayList这个结构了。但是ArrayList存在一些缺陷:由于其底层是一段连续空间,当在ArrayList任意位置插入或者删除元素时,就需要将后序元素整体往前或者往后搬移&am…...
CCF 编程能力认证 C++ 四级宝典
CCF编程能力等级认证(以下简称GESP)2025年四次认证时间分别为:3月22日、6月28日、9月27日、12月20日,认证方式为线下机考,认证语言包括:C、Python和Scratch三种语言,其中Scratch认证为一到四级&…...