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

【JVM】内存区域划分,类加载机制和垃圾回收机制

本篇内容为了解 JVM 的内存区域划分,类加载机制,垃圾回收机制。实际开发中几乎用不到,但为了某些情况我们又不得不了解。

目录

一、JVM中的内存区域划分

1.1 内存区域划分考点

二、JVM的类加载机制

2.1 类加载流程

2.2 类加载什么时候会触发?

2.3 双亲委派模型

三、JVM垃圾回收机制

3.1 找垃圾

3.1.1 引用计数

3.1.2 可达性分析

3.2 释放垃圾

3.2.1 标记清除

3.2.2 复制算法

3.2.3 标记整理

3.2.4 分代回收


一、JVM中的内存区域划分

JVM 本质上是一个 Java 进程,Java 进程会从操作系统申请一大块区域给 Java 代码使用。这一大块区域会进行划分,主要划分为堆、栈、方法区/元数据区。具体分为:

  • 堆:存放对象实例(所有被 new 出来的对象)
  • 栈:存放方法调用的栈(局部变量、方法的参数、返回地址等)
  • 方法区/元数据区:存储类元数据(类结构、方法代码、静态变量、常量池等)
  • 程序计数器:记录当前线程执行的字节码指令地址(即JVM指令的行号)
  • 本地方法栈:为执行本地方法(Native Method,如JNI调用)提供栈帧
  • 虚拟机栈:执行 Java 代码

如上图所示,对基本的内存区域划分图,下面来详细解释每个区域对应的工作。

  1. 堆,主要是 new  出来的对象即成员变量
  2. 栈,主要是用来维护方法之间的调用即局部变量
  3. 方法区/元数据区,方法在内存中是按照一些二进制指令的形式来存储的(字节码),特殊情况热加载机制需要在字节码维度做出一些特殊的处理。因此它是类和加载之后的类对象(.class文件、Test.class文件)(静态变量等)
  4. 虚拟机栈, 给 Java 代码使用的        
  5. 本地方法栈 ,给JVM 内部的本地方法使用(JVM内部通过C++方法实现)
  6. 程序计数器,记录当前程序指定到哪个指令,使用简单的 long 类型存储了一个内存地址,内存地址就是下一个要执行的字节码所在的地址

我们在编写 Java 代码时,会产生一份线程,这个线程会同时在操作系统和 Java 虚拟机存在,在 Java 层面会在虚拟机栈存一份线程,而操作系统层面会在本地方法栈存一份。

此外,堆区和元数据区,在一个 JVM 进程中只有一份。而栈(本地方法栈和虚拟机栈)和程序计数器是有多份的。


1.1 内存区域划分考点

考点,给出一串代码,回答某个变量处于哪个区域。

void func() {Test test = new Test();
}

test 是一个引用类型且是一个局部变量因此它是在栈上的,而 new Test() 是对象的本体它是在堆上的。 在栈中的数据存放的是在堆中对象的地址,如下图所示:


二、JVM的类加载机制

2.1 类加载流程

把 .class 文件加载到内存,得到类对象这样的过程叫做类加载。程序需要想运行,就需要依赖某些指令和数据放入内存中。流程:加载、验证、准备、解析、初始化。

  1. 加载,找到 .class 文件,并且读文件内容。
  2. 验证,.class 文件是否为明确的数据格式(二进制),在官方文档中 class 文件中是以一个 C++ 结构体形式存放的,每一步都有明确的数据格式。
  3. 准备,给类对象分配内存空间(未初始化的空间,内存空间中的数据全是0,类对象中的静态成员也全是0),类加载最终就是为了得到类对象。
  4. 解析,针对字符串常量进行初始化,会将符号引用替换为直接引用。
  5. 初始化,针对类对象进行初始化(初始化静态成员、执行静态代码块、类如果有父类还要加载父类)以上的五个步骤都是 JVM 中的一块代码,都是人为划分出来的,

解析步骤问题,常量池内的符号引用替换为直接引用的过程?举例说明?

举例说明,在高中我暗恋一个女生,有一次全校举行看电影,我为了和我的女神坐在一起,但排列方式是按照座位来决定的。于是在去操场的过程中我一直帖着她走,最后到达地点后我成功的与她坐在了一起。而这个过程就是符号引用替换到直接引用了,也就是说在到达地点之前我是不知道能够与她坐一起而在去操场的过程中她和我的相对位置是确定的,直到最后位置确定了,她和我之间的变为绝对位置了。

在 Java 层面,类名、方法名、字段名都是以字符串形式存放的,在 .class 文件中字符串常量之间会建立一个“偏移量”,即字符串常量不知道自己在内存中实际地址,在真正类加载到内中后,就会把该字符串常量放入特定的内存地址,此时字符串常量之间的相对地址还是存在的只不过类加载后给定了特殊的内存来使它们连接,也就变成了直接引用。


2.2 类加载什么时候会触发?

类加载机制并不是 JVM 一启动就把 .class 文件都加载了,而是通过一个“懒加载”的机制(懒汉模式)即非必要不加载,必要:

  • 创建了这个类的实例
  • 使用了这个类的静态方法/静态属性
  • 使用子类,会触发父类的加载

2.3 双亲委派模型

双亲委派模型为在第一个步骤加载中出现的问题,在加载中找到 .class 文件的过程。

JVM中,加载类 需要用到一组特殊的模块,类加载器。JVM中 内置了三个类加载器:

  1. BootStrap ClassLoader 负责加载 Java 标准库中的类
  2. Extension ClassLoader 负责加载一些非标准的但是 Sun/ Oracle 扩展库的类
  3. Application ClassLoader 加载项目中自己写的类,以及第三方库中的类

加载一个类的过程为:

先给定一个类的全限定类名 “java.long.String" 的字符串,并把问题抛给 Application ClassLoader ,Application ClassLoader 作为“儿子”再把问题抛给 Extension ClassLoader ,Extension ClassLoader 作为“父亲“再把问题抛给 BootStrap ClassLoader ,BootStrap ClassLoader 作为”爷爷“ 而它上方为 null 此时就会自行处理问题,处理不了则把问题抛给”父亲“Exten..,依次类推,直到某一步能解决问题则执行后续的2345步骤,否则则抛出一个异常 “ClassNotFoundException”。以上的流程类似于,员工在处理问题时依次向上通报。


三、JVM垃圾回收机制

什么是 JVM 垃圾回收机制,c 语言中 malloc 必须手动进行 free 进行释放,如果程序光申请内存不释放,程序后续会崩溃。

在 Java 以及后面发明的语言,引入了 GC(Garbage Collection垃圾回收) 来解决上述问题,它能够有效的减少内存泄露出现的问题。 

内存申请的时间是明确的(使用了必须要释放),释放的时间是模糊的(程序彻底不使用了才能释放),C/C++ 靠程序设计者本人来实现的,而 Java 通过 JVM 自动判定,通过一系列策略来进行判定。


3.1 找垃圾

JVM 有多个内存区域,主要释放堆里面的内容即被 new 出来的对象。程序计数器,主要存放地址的不需要释放而是随着线程的结束一并销毁。栈,也是随着线程的结束而销毁,它里面主要存放局部变量,当方法调用完毕,方法中的局部变量就随着出栈操作就销毁了。方法区,存储的是类对象很少被销毁。

Java 中使用一个对象需要通过引用,如果一个对象没有被引用,那么它就是一个垃圾。如果一个对象被引用但并没有实质性的使用它也不能很草率的判定它是一个垃圾,因此 Java 对垃圾对象的识别是很保守的。

Java 怎样判断一个对象是否有引用指向呢?采用可达性分析,但判断的方式却有两种:引用计数和可达性分析。


3.1.1 引用计数

引用计数,给对象分配一块额外的空间,保存一个整数,表示这个对象有几个引用指向。随着引用的增加,计数器就增加。引用的销毁,计数器就减少。当计数器为0时,则认为该对象没有引用即该对象为一个垃圾。缺陷:浪费内存空间,存在循环引用问题


3.1.2 可达性分析

把对象之间的引用关系,理解成了一个树形结构。即从一些特殊的起点出现进行遍历。只要能遍历到该对象就是可达的,遍历不到(不可达)则认为是一个垃圾。 有以下伪代码:

class Node {int value;Node left;Node right;
}Node a = new Node();a.left = b
a.right = c
b.left = d
b.right = e
e.left = g
c.right = fNode root = createTree()

以上代码中的 abcdefg 结点都是能够被访问的即都是可达的,当 root.right = null 时,c 和 f 就变为不可达了,此时就认为 c 和 f 为两个垃圾。

 可达性分析关键要点在于对对象进行遍历,进行遍历的起点称之为 gcroots ,可以是:

  • 栈上面的局部变量,栈可能有多个(每个栈的每个局部变量都是起点)
  • 常量池中引用的对象
  • 方法区中的静态成员引用的对象

综上所述,可达性分析就是从所有的 gcroots 出发的,看看该 gcroots 通过引用能访问到哪些对象,把能范围的对象标记为“可达”,剩下未标记的就是不可达的。可达性分析,弥补了引用计数的两个缺陷,从而产生了自己的问题:

消耗更多时间,当某个对象变为垃圾时不能第一时间发现,因为扫描的过程是需要消耗时间的。此外,当遍历的过程中当前对象的引用发生变化了就会采用 STW(Stop The World)来解决该问题,直到问题解决。


3.2 释放垃圾

3.2.1 标记清除

将垃圾对象直接释放,释放的空间都是离散的垃圾碎片。


3.2.2 复制算法

为了避免内存碎片,采用了复制算法。将内存划分为两块区域,左侧区域用来使用,当需要释放垃圾对象时,将不释放的对象移至右侧,然后把左侧整块区域释放即可。

缺点:

  1. 内存利用率较低
  2. 当大部分是有用的对象,采用复制算法成本较高 

3.2.3 标记整理

将不是垃圾的对象依次移动到前面,剩余后面的空间全部释放掉。


3.2.4 分代回收

针对不同“年龄”的对象采用不同的回收策略。

回收策略大概如下:

新创建的对象存放在伊甸区,经过各方大佬确认,当 GC 扫描到伊甸区后绝大部分对象都会被释放掉。

当对象通过 GC 在伊甸区的第一轮扫描,则会把该对象复制到生存区。生存区中有两块相同的区域,其实就是一个复制算法,用来判断该对象是否为垃圾,不是则把该对象复制到生存区的另一半。

当该对象经过多轮的 GC 后依然存在生存区,此时该对象就会通过复制算法复制到老年代区。

进入老年代区的对象,消亡的概率相对新生代要少很多,毕竟要死早死了也熬不到老年,因此在后续的 GC 扫描中就会对老年代的扫描频率降低。如果老年代中发现某个对象是垃圾了,则会使用标记整理策略来进行释放该对象。

特殊情况,如果对象非常大,则直接进入老年区,因为大对象进行复制算法成本较高,而且比较大的对象又不是很多。

相关文章:

【JVM】内存区域划分,类加载机制和垃圾回收机制

本篇内容为了解 JVM 的内存区域划分,类加载机制,垃圾回收机制。实际开发中几乎用不到,但为了某些情况我们又不得不了解。 目录 一、JVM中的内存区域划分 1.1 内存区域划分考点 二、JVM的类加载机制 2.1 类加载流程 2.2 类加载什么时候会…...

代码随想录算法训练营第十四天|替换数字

文档讲解:代码随想录 难度:easy 附:冲 passion!!!passion!!!passion!!! 替换数字 卡码网题目链接(opens new window) 给定一个字符串…...

Java实体类(Javabean)-编程规范

Java学习笔记-Java实体类详解 今天我们要聊一个看似简单却至关重要的知识点——Java实体类。就像快递小哥打包物件需要包装盒一样,在Java世界里处理数据也需要专门的容器,这就是我们的实体类! 一、实体类是什么?——程序的"…...

深入解析 Java Stream API:筛选子节点的优雅实现!!!

🚀 深入解析 Java Stream API:筛选子节点的优雅实现 🔧 大家好!👋 今天我们来聊聊 Java 8 中一个非常常见的操作:使用 Stream API 从 Map 中筛选出特定条件的元素。🎉 具体来说,我们…...

Vala编程语言教程-面向对象编程语基础

基础 尽管Vala语言并不强制你使用对象进行编程,但有些功能只能通过对象的方式来实现。因此,在大多数情况下,你肯定会希望采用面向对象的编程风格。与大多数当前的编程语言一样,为了定义你自己的对象类型,你需要编写一个…...

写读后感的时候,可以适当地引用书中的内容吗?

写读后感时,适当地引用书中的内容是可以的,这样可以更好地支持你的观点和感受,增强文章的可信度和说服力。 引用书中的内容可以帮助读者更好地理解你所讨论的主题和人物,同时也可以展示你对原著的深入理解和阅读能力。但是&#…...

计算机网络高频(二)TCP/IP基础

计算机网络高频(二)TCP/IP基础 1.什么是TCP/IP⭐⭐ TCP/IP是一种网络通信协议,它是互联网中最常用的协议之一。TCP/IP有两个基本的协议:TCP(传输控制协议)和IP(互联网协议)。 TCP(Transmission Control Protocol,传输控制协议)是一种可靠的、面向连接的协议。它负…...

蓝桥杯 之 数论

文章目录 习题质数找素数 LCM报数游戏 快速幂数字诗意 组合数与错位排序小蓝与钥匙 同余取模 数论,就是一些数学问题,蓝桥杯十分喜欢考察,常见的数论的问题有:取模,同余,大整数分解,素数&#x…...

无法写入文件:(FileSystemError): Error: EPERM: operation not permitted, open...)

问题分析: 当我想在Visual Studio Code中编写文件时,出现无法写入文件的错误,发现是权限的问题 解决办法: 右键应用图标 → 以管理员身份运行就可以了...

Java爬虫抓取B站视频信息

依赖 <dependency><groupId>org.jsoup</groupId><artifactId>jsoup</artifactId><version>1.17.2</version> <!-- 最新版可去官网查看 --></dependency>编码 public static List<VideoDto> parseSearchPage(Str…...

Sql Server数据迁移易错的地方

背景&#xff1a;之前一直台式机&#xff0c;毕业准备答辩了&#xff0c;要将代码搬到笔记本运行才方便些。这个Sql数据弄过来搞了好几个小时 还原备份报错&#xff1a;媒体簇的结构不正确。SQL Server 无法处理此媒体簇。 解决&#xff1a;升级到sql server版本比备份的那个高…...

七、服务器远程桌面报错

&#x1f33b;&#x1f33b;目录&#x1f33b;&#x1f33b; 一、远程桌面报错-用户账户限制&#xff08;例如&#xff0c;时间限制&#xff09;会阻止你登录。 一、远程桌面报错-用户账户限制&#xff08;例如&#xff0c;时间限制&#xff09;会阻止你登录。 原因是被远程的系…...

JAVA 之「优先队列」:大顶堆与小顶堆的实现与应用

Java 优先队列&#xff1a;大顶堆与小顶堆的实现与应用 文章目录 Java 优先队列&#xff1a;大顶堆与小顶堆的实现与应用一、什么是优先队列和堆&#xff1f;1. 优先队列2. 堆 二、Java PriorityQueue 基本用法1. 默认小顶堆示例代码输出 2. 实现大顶堆示例代码输出 三、大顶堆…...

压缩壳学习

壳是什么 壳就是软件的一个保护套&#xff0c;防止软件被进行反编译或被轻易地修改。 其作用就是为了保护软件。 常见的大类壳有压缩壳、加密壳、VM 壳的分类。 压缩壳顾名思义就是用来减小软件的文件大小的&#xff1b;加密壳&#xff0c;通过加密软件来保护软件&#xff…...

VRRP配置双出口ipsec隧道建立。

背景&#xff1a;在做毕设时&#xff0c;发现规划的不是那么合理&#xff0c;vrrp主备切换后&#xff0c;ipsec隧道并没有跟着切换到与备防火墙建立隧道&#xff0c;这是因为配置了双出口&#xff0c;路由的设计导致vrrp主备切换ipsec隧道没有跟着切换。 fw1为主&#xff0c;fw…...

机器学习——Numpy的神奇索引与布尔索引

在 NumPy 中&#xff0c;神奇索引&#xff08;Fancy Indexing&#xff09; 和 布尔索引&#xff08;Boolean Indexing&#xff09; 是两种强大的索引方式&#xff0c;用于从数组中提取特定元素或子集。以下是它们的详细说明和示例&#xff1a; 1. 神奇索引&#xff08;Fancy In…...

Linux:进程间通信

文章目录 前言一、进程间通信介绍1.1 进程间通信的目的1.2 进程间通信的发展与分类 二、管道2.1 匿名管道原理2.2 通信管道会出现的情况和特性&#xff08;重要&#xff09;2.3 命名管道2.3.1 命名管道与匿名管道的区别 三、system V3.1 共享内存原理3.2 键值3.2.1 键值生成原理…...

Mysql配套测试之查询篇

&#x1f3dd;️专栏&#xff1a;Mysql_猫咪-9527的博客-CSDN博客 &#x1f305;主页&#xff1a;猫咪-9527-CSDN博客 “欲穷千里目&#xff0c;更上一层楼。会当凌绝顶&#xff0c;一览众山小。” 目录 条件查询简单测试&#xff1a; 1.查询英语成绩不及格的同学(<60) 2…...

基于SSM框架的汽车租赁平台(源码+lw+部署文档+讲解),源码可白嫖!

摘要 时代在飞速进步&#xff0c;每个行业都在努力发展现在先进技术&#xff0c;通过这些先进的技术来提高自己的水平和优势&#xff0c;汽车租赁平台当然不能排除在外。汽车租赁平台是在实际应用和软件工程的开发原理之上&#xff0c;运用Java语言以及SSM框架进行开发&#x…...

常考计算机操作系统面试习题(三下)

20. 请求页式存储管理系统缺页率计算 题目&#xff1a; 假设一个作业的页面走向为 1、2、3、4、1、2、5、1、2、3、4、5&#xff0c;当分配给该作业的物理块数分别为 3 和 4 时&#xff0c;计算采用下述页面置换算法的缺页率&#xff1a; (1) 先进先出&#xff08;FIFO&…...

Spring IOC核心详解:掌握控制反转与依赖注入

文章目录 前言一、IOC核心思想二、IOC容器实现1.核心接口&#xff1a;2.XML配置范例 三、Bean管理实践1.创建对象&#xff08;1&#xff09;基于xml方式创建对象&#xff08;2&#xff09;用注解的方式创建对象 2.依赖注入&#xff08;1&#xff09;基于xml方式注入属性基础类型…...

Servlet、HttpServletRequest、HttpServletResponse、静态与动态网页、jsp、重定向与转发

DAY15.2 Java核心基础 JavaWeb 要想通过浏览器或者客户端来访问java程序&#xff0c;必须通过Servlet来处理 没有Servlet&#xff0c;java是无法处理web请求的 Web交互&#xff1a; 接收请求HttpServletRequest&#xff1a;可以获取到请求的信息&#xff0c;比如uri&#…...

Linux 内核源码阅读——ipv4

Linux 内核源码阅读——ipv4 综述 在 Linux 内核中&#xff0c;IPv4 协议的实现主要分布在 net/ipv4/ 目录下。以下是一些关键的源文件及其作用&#xff1a; 1. 协议栈核心 net/ipv4/ip_input.c&#xff1a;处理接收到的 IPv4 数据包&#xff08;输入路径&#xff09;。net…...

组合总和 II:去重逻辑深度解析

组合总和 II&#xff1a;去重逻辑深度解析 在算法中&#xff0c;解决“组合总和 II”这类问题时&#xff0c;去重往往是最具挑战性的一环。如何避免重复组合&#xff0c;同时保证所有组合的唯一性&#xff0c;是实现高效算法的关键。今天&#xff0c;我们就来深度解析组合总和…...

蓝桥杯备考:二分答案之路标设置

最大距离&#xff0c;找最小空旷指数值&#xff0c;我们是很容易想到用二分的&#xff0c;我们再看看这个答案有没有二段性 是有这么个二段性的&#xff0c;我们只要二分就行了&#xff0c;但是二分的check函数是有点不好想的&#xff0c;我们枚举空旷值的时候&#xff0c;为了…...

[HY000][1366] Incorrect string value: ‘张三‘ for column ‘name‘ at row 1

常见原因 字符集不兼容 插入的数据包含当前字符集&#xff08;如 latin1&#xff09;不支持的特殊字符&#xff08;如中文、Emoji 等&#xff09;。 表、列或连接的字符集未正确配置为支持目标字符&#xff08;如未使用 utf8mb4&#xff09;。 客户端/服务端编码不一致 客户…...

什么是C++对象之间的view proxies

在C中&#xff0c;view proxies 是一种轻量级的对象&#xff0c;用于提供对另一个对象的间接访问或视图&#xff0c;而不直接拥有或管理该对象的数据。它们通常用于简化对复杂数据结构的访问&#xff0c;或在不需要复制数据的情况下提供特定的视图。 1. View Proxies 的核心概…...

MyBatis参数赋值技巧:#{} 和 ${} 的区别与实践

目录 一、前言二、 #{} 和${} 的使用方法和区别2.1 #{}使用方法2.2 ${}使用方法2.3#{} 和 ${} 的主要区别2.4使用建议 三、总结 一、前言 在 MyBatis 中&#xff0c;#{} 和 ${} 都用于在 SQL 语句中绑定参数&#xff0c;但它们在具体实现和安全性方面有所不同。理解它们的区别…...

5-1 使用ECharts将MySQL数据库中的数据可视化

方法一&#xff1a;使用Python Flask框架搭建API 对于技术小白来说&#xff0c;使用ECharts将MySQL数据库中的数据可视化需要分步骤完成。以下是详细的实现流程&#xff1a; 一、技术架构‌ 后端服务‌&#xff1a;使用Python Flask框架搭建API&#xff08;简单易学&#xff…...

协程的调度的对称与非对称

下图表示的就是对称协程&#xff0c;进入到该协程之后只能有一个操作就是yield&#xff0c;把cpu让回给调度器; 下图表示非对称协议&#xff0c;可以有两个操作&#xff0c;就是resume和yield&#xff0c;从哪里resume的&#xff0c;yield就会回到该位子&#xff1b;...

C# 中比较实用的关键字,基础高频面试题!

前言 在C#编程中关键字是构建逻辑和实现功能的基石&#xff0c;它承载着编程语言的语法规则和编程智慧。熟练掌握这些基础高频关键字对提升编程能力和面试表现至关重要&#xff0c;它们是日常开发和解决复杂问题的关键。 DotNetGuide 全面的C#/.NET/.NET Core学习、工作、面试指…...

文献分享: XTR——优化Token级检索的高效多向量模型

原文章 文章目录 1. XTR \textbf{1. XTR} 1. XTR原理 1.1. \textbf{1.1. } 1.1. 导论 1.2. XTR \textbf{1.2. XTR} 1.2. XTR的训练和推理 2. \textbf{2. } 2. 实验与分析 2.1. \textbf{2.1. } 2.1. 实验配置与结果 2.2. \textbf{2.2. } 2.2. 结果分析 3. \textbf{3. } 3. 其它分…...

【数据结构】C语言实现树和森林的遍历

C语言实现树和森林的遍历 导读一、树的遍历二、森林的遍历2.1 为什么森林没有后序遍历?2.2 森林中存不存在层序遍历?三、C语言实现3.1 准备工作3.2 数据结构的选择3.3 树与森林的创建3.4 树与森林的遍历3.4.1 先根遍历3.4.2 后根遍历3.4.3 森林的遍历3.5 树与森林的销毁3.6 算…...

《Python深度学习》第七讲:生成式深度学习

在深度学习的世界里,生成式模型是一种非常有趣且富有创造力的技术。它们能够生成全新的内容,比如文本、图像、音乐等,甚至可以创造出从未见过的虚拟世界。这一讲,我们将深入探讨生成式深度学习的核心技术,包括 LSTM 文本生成、DeepDream、神经风格迁移、变分自编码器(VAE…...

Spring的IOC

在现代 Java 开发中&#xff0c;Spring 框架几乎无处不在&#xff0c;特别是其核心的 IOC&#xff08;Inversion of Control&#xff09; 容器&#xff0c;几乎所有Spring的功能都与它紧密相关。 一、什么是IOC IOC&#xff0c;全称为 Inversion of Control&#xff08;控制反…...

常考计算机操作系统面试习题(四)

目录 1. Peterson 算法伪代码 2. 信号量生产者消费者问题分析 3. 注释 Peterson 主函数并分析输出结果 4. 用 fork 创建子进程的程序 1. Peterson 算法伪代码 题目&#xff1a; 写出 Peterson 算法的伪代码。 参考答案&#xff1a; // 定义变量 boolean flag[2]; //…...

Visual Studio Code 连接 SAP ERP 系统

首先确保服务打开 在vscode&#xff0c;在extension安装ABAP remote filesystem&#xff0c;然后打开设置SAP 系统的地址配置 CtrlshiftP 执行代码&#xff1a;AbapFS connect to an ABAP system&#xff0c;可以根据要求一步一步配置。 根据配置。加载系统 也可以直接在extens…...

从报错到成功:Mermaid 流程图语法避坑指南✨

&#x1f680; 从报错到成功&#xff1a;Mermaid 流程图语法避坑指南 &#x1f680; &#x1f6a8; 问题背景 在开发文档或技术博客中&#xff0c;我们经常使用 Mermaid 流程图 来可视化代码逻辑。但最近我在尝试绘制一个 Java Stream 转换流程图时&#xff0c;遭遇了以下报错…...

TDengine 中的 show 命令

简介 SHOW 命令可以用来获取简要的系统信息。若想获取系统中详细的各种元数据、系统信息和状态&#xff0c;请使用 select 语句查询 INFORMATION_SCHEMA 数据库中的表, 详见 元数据查询 SHOW APPS SHOW APPS;显示接入集群的应用&#xff08;客户端&#xff09;信息。 SHOW …...

博弈论中的均衡精炼:完美贝叶斯均衡、序贯均衡与颤抖手均衡详解

博弈论中的均衡精炼&#xff1a;完美贝叶斯均衡、序贯均衡与颤抖手均衡详解 1. 引言&#xff1a;为什么需要均衡精炼&#xff1f; 在博弈论中&#xff0c;纳什均衡是分析策略互动的核心工具&#xff0c;但其存在一个显著缺陷&#xff1a;无法排除不合理的均衡。例如&#xff0…...

github代理 | 快速clone项目

代理网址&#xff1a; https://ghproxy.com/ https://ghproxy.com/代理网址&#xff1a; https://ghproxy.com/ 比如需要克隆的项目git地址为&#xff1a;https://github.com/AUTOMATIC1111/stable-diffusion-webui.git git clone https://ghproxy.com/https://github.com/AUTO…...

C语言基础与进阶学习指南(附运行效果图及术语解析)

C语言基础与进阶学习指南&#xff08;附运行效果图及术语解析&#xff09; 目录 C语言标准与编译流程CPU与内存基础C语言基础语法数据类型详解变量与内存管理运算符与表达式输入输出函数函数与内存管理指针与内存操作结构体与高级应用 1. C语言标准与编译流程 1.1 C语言标准演…...

【Scrapy】Scrapy教程8——处理子链接

通过前面几篇文章,已经了解了如何去爬取网页内容并存储到数据库,但是目前只是存储了一个页面的内容,现在想要获取每篇文章链接内的文章内容,我们来看看怎么获取。 生成新请求 首先我们肯定要先拿到链接,所以第一步都获取文章标题和链接肯定少不了,然后再爬取获取到到子…...

Python推导式深入解析

引言 Python 以其简洁、高效的语法而备受开发者喜爱&#xff0c;其中推导式&#xff08;Comprehensions&#xff09;更是 Python 语法的一大特色。推导式提供了一种简洁明了的方式来创建列表、集合和字典等数据结构&#xff0c;让代码更加紧凑和易读。本文将深入探讨 Python 推…...

在 macOS 上配置 SSH 连接 GitHub

在 macOS 上使用 SSH 连接 GitHub&#xff0c;可以免去每次使用 Git 时输入密码的麻烦&#xff0c;提高开发效率。本文将介绍如何在 macOS 上生成 SSH 密钥并配置 GitHub 进行身份认证。 1. 检查是否已有 SSH 密钥 在终端运行以下命令&#xff0c;检查是否已有 SSH 密钥&#…...

常考计算机操作系统面试习题(二)(中)

目录 24. 操作系统的主要功能有哪些&#xff1f; 25. 文件的属性主要有哪些&#xff1f; 26. 对文件的基本操作主要有哪些&#xff1f; 27. 目录的基本操作有哪些&#xff1f; 28. 目录的逻辑结构有哪些种&#xff1f; 29. 简述银行家算法的Available、Max、Allocation、…...

手机录视频风噪太大?华为Pura X“AI降风噪“太硬核了

你是否也在用手机录像时&#xff0c;比如大海海浪、阅览群山、空旷的原野的时候&#xff0c;呼啸的风总是能沦为刺耳的噪音&#xff0c;让精心构思的镜头&#xff0c;最后因为呼啸的风声最终成为“灾难现场”。传统的解决方式往往陷入两难&#xff1a;物理防风罩影响收音指向性…...

React 事件处理

1. React 事件处理的基本概念 React 事件处理的特点&#xff1a; 驼峰命名法&#xff1a;事件名采用驼峰命名法&#xff0c;如 onClick、onChange。JSX 语法&#xff1a;事件处理函数通过 JSX 传递给元素&#xff0c;如 <button onClick{handleClick}>。合成事件&#…...

搭建React简单项目

一、项目构建 目录结构&#xff1a; 安装脚手架 npm install -g create-react-app // or yarn add -g create-react-app 一、项目版本 1、react&#xff1a;"^18.3.1"&#xff1b; 2、react-router-dom&#xff1a;"^6.23.1"&#xff1b; 3、项目创…...

ROCK 280A-M 工业级电调:高性能无人机动力心脏,重塑严苛场景飞行边界

—— 工业级动力控制系统解决方案 —— 【产品概述】 针对工业级无人机高负载、复杂工况需求&#xff0c;南昌长空科技的ROCK 280A-M 电调以航空级标准打造动力控制中枢。采用工业级控制算法与智能自适应系统&#xff0c;为多旋翼 / 固定翼无人机提供稳定动力支撑&#xff0c;突…...