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

【JVM】总结篇-运行时内存篇

文章目录

    • JVM内存模型(内存结构)
      • 程序计数器 pc
      • 虚拟机栈
      • 本地方法栈 native
        • 堆空间
        • 堆中一些JVM参数
        • 堆中垃圾回收过程
        • MinorGC MajorGC FullGC
          • 年轻代GC(Minor GC)触发机制:
          • 老年代GC(Major GC/Full GC)触发机制:
          • Full GC触发机制:
        • OOM解决?
      • 方法区
      • 直接内存
      • StringTable

JVM内存模型(内存结构)

在这里插入图片描述
在这里插入图片描述

程序计数器 pc

在这里插入图片描述
它是程序控制流的指示器,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这个计数器来完成。

PC寄存器用来存储指向下一条指令的地址,也即将要执行的指令代码。执行引擎的字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令。

JVM中的PC寄存器是对物理PC寄存器的一种抽象模拟。

  • 它是一块很小的内存空间,几乎可以忽略不记。也是运行速度最快的存储区域。不会随着程序的运行需要更大的空间。

  • 在JVM规范中,每个线程都有它自己的程序计数器,是线程私有的,生命周期与线程的生命周期保持一致。

  • 它是唯一一个在Java 虚拟机规范中没有规定任何OutOtMemoryError 情况的区

在这里插入图片描述
多线程在一个特定的时间段内只会执行其中某一个线程的方法,CPU会不停地做任务切换,这样必然导致经常中断或恢复。

虚拟机栈

在这里插入图片描述

栈和堆的区别
角度一:GC;OOM
角度二:栈、堆执行效率
角度三:内存大小;数据结构
角度四:栈管运行;堆管存储。

栈中存在垃圾回收吗?不存在GC ; 存在OOM

Java 虚拟机规范允许Java栈的大小是动态的或者是固定不变的。
如果采用固定大小的Java虚拟机栈,那每一个线程的Java虚拟机栈容量可以在线程创建的时候独立选定。如果线程请求分配的栈容量超过Java虚拟机栈允许的最大容量,Java虚拟机将会抛出一个 StackOverflowError 异常。
如果Java虚拟机栈可以动态扩展,并且在尝试扩展的时候无法申请到足够的内存,或者在创建新的线程时没有足够的内存去创建对应的虚拟机栈,那Java虚拟机将会抛出—个 OutOfMemoryError 异常。

什么情况下会发生栈内存溢出?
一、局部数组过大。当函数内部的数组过大时,有可能导致堆栈溢出。
二、递归调用层次太多。递归函数在运行时会执行压栈操作,当压栈次数太多时,也会导致堆栈溢出。

如何设置栈内存的大小? -Xss size (即:-XX:ThreadStackSize)-Xss1024k

栈内部的单位是栈帧
每个栈帧中存储着:

局部变量表(Local Variables)
操作数栈(Operand Stack)(或表达式栈)
动态链接(DynamicLinking) (或指向运行时常量池的方法引用)
方法返回地址(Return Address)(或方法正常退出或者异常退出的定义)
一些附加信息

在这里插入图片描述
局部变量表中的变量也是重要的垃圾回收根节点,只要被局部变量表中直接或间接引用的对象都不会被回收。

动态链接:Java源文件被编译到字节码文件中时,所有的变量和方法引用都作为符号引用(Symbolic Reference)保存在class文件的常量池里。比如:描述一个方法调用了另外的其他方法时,就是通过常量池中指向方法的符号引用来表示的,那么动态链接的作用就是为了将这些符号引用转换为调用方法的直接引用。
动态链接引出 ①虚方法 ②invokedynamic指令 ③虚方法表

在这里插入图片描述

public class LocalVariableThreadSafe {//s1的声明方式是线程安全的,因为线程私有,在线程内创建的s1 ,不会被其它线程调用public static void method1() {//StringBuilder:线程不安全StringBuilder s1 = new StringBuilder();s1.append("a");s1.append("b");//...}//stringBuilder的操作过程:是线程不安全的,// 因为stringBuilder是外面传进来的,有可能被多个线程调用public static void method2(StringBuilder stringBuilder) {stringBuilder.append("a");stringBuilder.append("b");//...}//stringBuilder的操作:是线程不安全的;因为返回了一个stringBuilder,// stringBuilder有可能被其他线程共享public static StringBuilder method3() {StringBuilder stringBuilder = new StringBuilder();stringBuilder.append("a");stringBuilder.append("b");return stringBuilder;}//stringBuilder的操作:是线程安全的;因为返回了一个stringBuilder.toString()相当于new了一个String,// 所以stringBuilder没有被其他线程共享的可能public static String method4() {StringBuilder stringBuilder = new StringBuilder();stringBuilder.append("a");stringBuilder.append("b");return stringBuilder.toString();/*** 结论:如果局部变量在内部产生并在内部消亡的,那就是线程安全的*/}
}

本地方法栈 native

和虚拟机栈类似,只不过它是管理native本地方法。

几乎”所有的对象实例都在这里分配内存。
所有的线程共享Java堆,在这里还可以划分线程私有的缓冲区(Thread Local Allocation Buffer, TLAB)。

堆空间

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

JVM内存为什么要分成新生代,老年代,持久代。新生代中为什么要分为Eden和Survivor
JVM的内存结构,Eden和Survivor比例。

java对象的生命周期长短
几乎所有的Java对象都是在Eden区被new出来的。
绝大部分的Java对象的销毁都在新生代进行了。

堆中一些JVM参数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

什么是空间分配担保策略?

在这里插入图片描述

堆中垃圾回收过程

什么时候对象会进入老年代?(渣打银行)
什么时候对象会进入老年代?(顺丰)
问什么幸存者区15次进入老年区,懂原理吗?(58)
JVM的伊甸园区,from区,to区的比例是否可调?(花旗银行)
JVM中一次完整的GC流程是怎样的,对象如何晋升到老年代(字节跳动)
什么时候对象会进入老年代? (字节跳动)
对象在堆内存创建的生命周期 (蚂蚁金服)
重点讲讲对象如何晋升到老年代,几种主要的JVM参数 (蚂蚁金服)
新生代和老年代的内存回收策略 (蚂蚁金服)
什么时候对象可以被收回? (蚂蚁金服)

在这里插入图片描述
一次完整的GC流程
在这里插入图片描述
在这里插入图片描述
内存分配策略(或对象提升(promotion)规则):
如果对象在Eden 出生并经过第一次MinorGC 后仍然存活,并且能被Survivor 容纳的话,将被移动到Survivor 空间中,并将对象年龄设为1 。对象在Survivor 区中每熬过一次MinorGC , 年龄就增加1岁,当它的年龄增加到一定程度(默认为15 岁,其实每个JVM、每个GC都有所不同)时,就会被晋升到老年代中。
在这里插入图片描述

/** 测试:大对象直接进入老年代* -Xms60m -Xmx60m -XX:NewRatio=2 -XX:SurvivorRatio=8 -XX:+PrintGCDetails*/
public class YoungOldAreaTest {public static void main(String[] args) {byte[] buffer = new byte[1024 * 1024 * 20];//20m}
}

在这里插入图片描述

MinorGC MajorGC FullGC

在这里插入图片描述

Minor GC 与 Full GC 分别在什么时候发生?(腾讯)
老年代的垃圾回收机制什么时候触发,自动触发的阈值是多少(蚂蚁金服)
新生代的垃圾回收什么时候触发(蚂蚁金服)
简述 Java 内存分配与回收策略以及 Minor GC 和Major GC(国美)
什么时候发生Full GC(58)
简述 Java 内存分配与回收策略以及 Minor GC 和Major GC (百度)
JVM垃圾回收机制,何时触发Minor GC等操作 (蚂蚁金服)
JVM的一次完整的GC流程(从ygc到fgc)是怎样的(蚂蚁金服)
描述JVM中一次full gc过程 (腾讯)
什么情况下触发垃圾回收? (阿里)

新生代的垃圾回收什么时候触发(花旗银行) 老年代的垃圾回收机制什么时候触发,自动触发的阈值是多少(花旗银行)

年轻代GC(Minor GC)触发机制:

年轻代空间不足时,就会触发Minor GC。这里的年轻代满指的是Eden区满,Survivor满不会引发GC。(每次 Minor GC 会清理年轻代的内存。)
因为 Java 对象大多都具备朝生夕灭的特性,所以 Minor GC 非常频繁,一般回收速度也比较快。这一定义既清晰又易于理解。
Minor GC会引发STW,暂停其它用户的线程,等垃圾回收结束,用户线程才恢复运行。
在这里插入图片描述

老年代GC(Major GC/Full GC)触发机制:

在这里插入图片描述

Full GC触发机制:

在这里插入图片描述

OOM解决?

在这里插入图片描述

为什么需要把Java堆分代?不分代就不能正常工作了吗?

其实不分代完全可以,分代的唯一理由就是优化GC性能。如果没有分代,那所有的对象都在一块,就如同把一个学校的人都关在一个教室。GC的时候要找到哪些对象没用,这样就会对堆的所有区域进行扫描。而很多对象都是朝生夕死的,如果分代的话,把新创建的对象放到某一地方,当GC 的时候先把这块存储“朝生夕死”对象的区域进行回收,这样就会腾出很大的空间出来。

为什么有TLAB(Thread Local Allocation Buffer)?

在这里插入图片描述

什么是TLAB?

从内存模型而不是垃圾收集的角度,对Eden区域继续进行划分,JVM为每个线程分配了一个私有缓存区域,它包含在Eden空间内。
在这里插入图片描述
选项“-XX:+/-UseTLAB”设置是否开启TLAB空间。

方法区

栈 堆 方法区
在这里插入图片描述
在jdk7及以前,习惯上把方法区,称为永久代。jdk8开始,使用元空间取代了永久代。元空间与永久代最大的区别在于:元空间不在虚拟机设置的内存中,而是使用本地内存。

方法区jvm参数设置

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

方法区存了什么

在这里插入图片描述
注意运行时常量池:
在这里插入图片描述

为什么要用元空间替代永久代?

1)为永久代设置空间大小是很难确定的。
2)对永久代进行调优是很困难的。

StringTable为什么要调整?

jdk7中将StringTable放到了堆空间中。因为永久代的回收效率很低,在full gc的时候才会触发。而full gc是老年代的空间不足、永久代不足时才会触发。
这就导致StringTable回收效率不高。而我们开发中会有大量的字符串被创建,回收效率低,导致永久代内存不足。放到堆里,能及时回收内存。

方法区的垃圾收集

主要回收两部分内容:常量池中废弃的常量和不再使用的类型。

在这里插入图片描述
在大量使用反射、动态代理、CGLib等字节码框架,动态生成JSP以及OSGi这类频繁自定义类加载器的场景中,通常都需要Java虚拟机具备类型卸载的能力,以保证不会对方法区造成过大的内存压力。

直接内存

在这里插入图片描述

StringTable

1.通过字面量的方式(区别于new)给一个字符串赋值,此时的字符串值声明在字符串常量池中。
2.字符串常量池中是不会存储相同内容的字符串的。

在这里插入图片描述
在这里插入图片描述

相关文章:

【JVM】总结篇-运行时内存篇

文章目录 JVM内存模型(内存结构)程序计数器 pc虚拟机栈本地方法栈 native堆堆空间堆中一些JVM参数堆中垃圾回收过程MinorGC MajorGC FullGC年轻代GC(Minor GC)触发机制:老年代GC(Major GC/Full GC)触发机制&#xff1a…...

【2025最新计算机毕业设计】基于SpringBoot+Vue智慧养老医护系统(高质量源码,提供文档,免费部署到本地)【提供源码+答辩PPT+文档+项目部署】

作者简介:✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流。✌ 主要内容:🌟Java项目、Python项目、前端项目、PHP、ASP.NET、人工智能…...

【数据仓库】hive on Tez配置

hive on Tez 搭建 前提是hive4.0hadoop3.2.2数仓已搭建完成,现在只是更换其执行引擎 为Tez。搭建可参考【数据仓库】hive hadoop数仓搭建实践文章。 Tez 下载 下载地址 https://archive.apache.org/dist/tez/ 官网地址 https://tez.apache.org/releases/apac…...

基于HTML和CSS的旅游小程序

一、技术基础 HTML(HyperText Markup Language):超文本标记语言,用于定义网页的内容和结构。在旅游小程序中,HTML用于搭建页面的基本框架,包括标题、段落、图片、链接等元素,以及用于交互的表单…...

CDP集成Hudi实战-文件存储布局实况讲解

[〇]关于本文 本文我们参考一张在hdfs中的hud表讲解一下hudi表的文件存储布局 [一]时间线文件解析 目录结构中列出的文件和子目录如下&#xff1a; 1-文件类型解析 时间线目录中的文件主要有以下几种类型&#xff1a; <commit_id>.deltacommit.inflight 表示一项事务&…...

22408操作系统期末速成/复习(考研0基础上手)

第一部分:计算题&#xff1a; 考察范围&#xff1a;&#xff08;标红的是重点考&#xff09; 第一章&#xff1a;CPU利用率&#xff1a; 第二章&#xff1a; 进程调度算法&#xff08;需要注意不同调度算法的优先级和题目中给出的是否可以抢占【分为可抢占和不可抢占&#xff…...

Qt的信号与槽

文章目录 信号与槽机制信号与槽的定义 Qt使用信号与槽机制进行对象间的通信。当某个对象的状态发生变化时&#xff0c;该对象会触发一个信号。 该信号和另外一些对象的槽函数绑定&#xff0c;信号的触发将导致这些槽函数的执行&#xff0c;以处理第一个对象状态的变化。触发信号…...

牛客网刷题 ——C语言初阶——JZ15 二进制中1的个数

1.题目描述 题目OJ链接 描述 输入一个整数 n &#xff0c;输出该数32位二进制表示中1的个数。其中负数用补码表示。 2.思路 求2进制中1的个数&#xff0c;可以转换为求每一位&#xff0c;1的个数&#xff0c;1&1还是1 所以判断如果该数值&1为真&#xff0c;我们就co…...

【游戏设计原理】47 - 超游戏思维

对于这条原理&#xff0c;我首先想到的是开放世界&#xff0c;或者探索性游戏&#xff0c;这是最能包容各类玩家的游戏类型。这类游戏定义了基本规则&#xff0c;玩家的可操作性很强。就像上图里的沙池一样&#xff0c;里面有滑梯&#xff0c;是规则性比较明确的&#xff0c;而…...

Elasticsearch Serverless中的数据流自动分片深度解析

Elasticsearch Serverless中的数据流自动分片深度解析 一、Elasticsearch Serverless概述 1. 什么是Elasticsearch Serverless Elasticsearch Serverless是一种云端全托管的Elasticsearch服务&#xff0c;它基于云原生Serverless技术架构&#xff0c;提供自动弹性和完全免运…...

Elasticsearch JavaRestClient版

文章目录 初始化RestHighLeveClient&#xff08;必要条件&#xff09;索引库操作1.创建索引库&#xff08;4步&#xff09;2.删除索引库&#xff08;3步&#xff09;3.判断索引库是否存在&#xff08;3步&#xff09;4.总结&#xff1a;四步走 文档操作1.创建文档&#xff08;4…...

通过爬虫方式实现视频号助手发布视频

1、将真实的cookie贴到解压后目录中cookie.txt文件里,修改python代码里的user_agent和video_path, cover_path等变量的值,最后运行python脚本即可; 2、运行之前根据import提示安装一些常见依赖,比如requests等; 3、2025年1月份最新版; 代码如下: import json import…...

如何在VMware ESXi和Workstation中打开VMDK文件?

VMware 中的 VMDK 是什么&#xff1f; 在 VMware 中&#xff0c;VMDK 是虚拟磁盘文件的格式&#xff0c;全称是 Virtual Machine Disk。VMDK 文件用于存储虚拟机的硬盘内容&#xff0c;包括操作系统、应用程序、文件等。它相当于虚拟机的硬盘驱动器&#xff0c;可以模拟出各种…...

【计算机视觉技术 - 人脸生成】2.GAN网络的构建和训练

GAN 是一种常用的优秀的图像生成模型。我们使用了支持条件生成的 cGAN。下面介绍简单 cGAN 模型的构建以及训练过程。 2.1 在 model 文件夹中新建 nets.py 文件 import torch import torch.nn as nn# 生成器类 class Generator(nn.Module):def __init__(self, nz100, nc3, n…...

「Mac畅玩鸿蒙与硬件54」UI互动应用篇31 - 滑动解锁屏幕功能

本篇教程将实现滑动解锁屏幕功能&#xff0c;通过 Slider 组件实现滑动操作&#xff0c;学习事件监听、状态更新和交互逻辑的实现方法。 关键词 滑动解锁UI交互状态管理动态更新事件监听 一、功能说明 滑动解锁屏幕功能包含以下功能&#xff1a; 滑动解锁区域&#xff1a;用…...

JVM学习指南(9)-JVM运行时数据区

JVM学习指南(9)-JVM运行时数据区 引言 Java虚拟机(JVM)是Java程序运行的核心,它为Java程序提供了一个与平台无关的执行环境。JVM的重要性不仅在于它实现了Java的跨平台特性,还在于它对程序执行过程中内存的管理。JVM运行时数据区是程序执行过程中存储数据的关键区域,理解…...

前端实现大文件上传(文件分片、文件hash、并发上传、断点续传、进度监控和错误处理,含nodejs)

大文件分片上传是前端一种常见的技术&#xff0c;用于提高大文件上传的效率和可靠性。主要原理和步骤如下 文件分片 确定分片大小&#xff1a;确定合适的分片大小。通常分片大小在 1MB 到 5MB 之间使用 Blob.slice 方法&#xff1a;将文件分割成多个分片。每个分片可以使用 Bl…...

什么是 C++ 的序列化?

什么是 C 的序列化&#xff1f; 序列化&#xff08;Serialization&#xff09;是指将对象的状态转换为可以存储或传输的格式的过程。它使得对象能够以二进制或文本的形式被保存到文件中&#xff0c;或者通过网络发送到远程计算机上&#xff0c;稍后可以重新构造出来&#xff0…...

047_小驰私房菜_Qcom 8系列,Jpeg GPU 旋转

【问题背景】 横屏模式下&#xff0c;发现有些三方app拍照旋转了90度。 【修改策略】 adb shell setprop endor.debug.camera.overrideGPURotationUsecase 1 或者在/vendor/etc/camera/camxoverridesettings.txt 里面添加如下内容 overrideGPURotationUsecase1 【解释】 Ga…...

【C++】2039:【例5.6】冒泡排序

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 &#x1f4af;前言&#x1f4af;题目描述&#x1f4af;我的初步实现我的代码实现问题分析 &#x1f4af;老师的实现方式老师代码的特点分析老师代码的执行过程 &#x1f4af;我的代码与老师代码的对比优点…...

【Java回顾】Day4 反射机制

反射机制 之前学过一部分&#xff0c;笔记在20250103Java包_网络编程.md里,这里在之前的笔记的基础上做一些补充。 反射&#xff1a;得到class对象后反向获取对象的各种信息。 包 Field 类或接口中的字段(成员变量)&#xff0c;动态访问和修改类的字段 模板 获取Class 对象 …...

MATLAB画柱状图

一、代码 clear; clc; figure(position,[150,100,900,550])%确定图片的位置和大小&#xff0c;[x y width height] %准备数据 Y1[0.53,7.9,8.3;0.52,6.8,9.2;0.52,5.9,8.6;2.8,5.8,7.9;3.9,5.2,7.8;1.8,5.8,8.4]; % withoutNHC X11:6; %画出4组柱状图&#xff0c;宽度1 h1…...

web漏洞之文件包含漏洞

一、文件包含漏洞 1、把DVWA页面改为low级别&#xff0c;然后点击File Inclusion页面 原理是File Inclusion页面访问的是low.php和include.php&#xff0c;这两个页面包含了include($_GET[page])这句话&#xff0c;意思是page会把用户输入的参数带进来然后由$_GET读取&#x…...

spring mvc源码学习笔记之六

pom.xml 内容如下 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/P…...

深入理解 PyTorch 的 Dataset 和 DataLoader:构建高效数据管道

文章目录 简介PyTorch 的 DatasetDataset 的基本概念自定义 Dataset实现 __init__ 方法示例&#xff1a;从 CSV 文件加载数据 实现 __len__ 方法实现 __getitem__ 方法另一种示例&#xff1a;直接传递列表训练集和验证集的定义 1. 单个 Dataset 类 数据分割2. 分别定义两个 Da…...

VSCode设置ctrl或alt+mouse(left)跳转

总结&#xff1a; &#xff08;1&#xff09;VSCode初次远程连接服务器时&#xff0c;需要在服务器上下载 python 拓展&#xff0c;然后选择对应的环境 &#xff08;2&#xff09;VSCode设置ctrl或altmouse(left)跳转到定义...

在Ubuntu 18.04.6 LTS安装OpenFace流程

一、修改配置:将gcc8&#xff0c;g8作为默认选项 sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-8 100 sudo update-alternatives --config gcc 选择版本&#xff0c;再查看gcc --version sudo update-alternatives --install /usr/bin/g g /usr/bin/g-…...

微服务拆分的艺术:构建高效、灵活的系统架构

目录 一、微服务拆分的重要性 二、微服务拆分的策略 1. 按照业务领域拆分 2. 按照团队结构拆分 3. 按照业务边界拆分 4. 按照数据和数据库拆分 5. 按照用户界面或外部接口拆分 6. 按照功能模块或领域驱动设计拆分 7. 按照性能和可伸缩性需求拆分 三、微服务拆分的实践…...

PHP框架+gatewayworker实现在线1对1聊天--发送消息(6)

文章目录 发送消息原理说明发送功能实现html部分javascript代码PHP代码 发送消息原理说明 接下来我们发送聊天的文本信息。点击发送按钮的时候&#xff0c;会自动将文本框里的内容发送出去。过程是我们将信息发送到服务器&#xff0c;服务器再转发给对方。文本框的id为msgcont…...

java项目之读书笔记共享平台(源码+文档)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的闲一品交易平台。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 读书笔记共享平台的主要使…...

RabbitMq的Java项目实践

在现代软件开发中&#xff0c;消息队列&#xff08;Message Queue&#xff0c;简称MQ&#xff09;作为一种重要的组件&#xff0c;承担着上下游消息传递和通信的重任。RabbitMQ作为一款流行的开源消息队列中间件&#xff0c;凭借其高可用性、可扩展性和易用性等特点&#xff0c…...

气膜球幕:引领元宇宙时代的科技与艺术光影盛宴—轻空间

在科技与艺术交织的时代&#xff0c;未来的观影体验将不再受限于传统屏幕的束缚。随着气膜球幕的崭新亮相&#xff0c;突破性的光影效果和沉浸式体验让我们走进了一个全新的视听世界。这不仅仅是一个简单的球形影院&#xff0c;它是连接现实与虚拟、科技与艺术、光与影的桥梁&a…...

行为模式2.命令模式------灯的开关

行为型模式 模板方法模式&#xff08;Template Method Pattern&#xff09;命令模式&#xff08;Command Pattern&#xff09;迭代器模式&#xff08;Iterator Pattern&#xff09;观察者模式&#xff08;Observer Pattern&#xff09;中介者模式&#xff08;Mediator Pattern…...

Linux环境下静态库和动态库的实现

Linux 环境下静态库和动态库的实现 在软件开发中&#xff0c;库是非常重要的组成部分。它们包含了一组可复用的函数和代码片段&#xff0c;用于提高开发效率和代码质量。在Linux系统中&#xff0c;库分为静态库和动态库两种。本文将介绍它们的实现方式&#xff0c;结合C语言代…...

如何很快将文件转换成另外一种编码格式?编码?按指定编码格式编译?如何检测文件编码格式?Java .class文件编码和JVM运行期内存编码?

如何很快将文件转换成另外一种编码格式? 利用VS Code右下角的"选择编码"功能&#xff0c;选择"通过编码保存"可以很方便将文件转换成另外一种编码格式。尤其&#xff0c;在测试w/ BOM或w/o BOM, 或者ANSI编码和UTF编码转换&#xff0c;特别方便。VS文件另…...

Tortoisegit 安装之后没有Add、ignore解决

在本地的仓库文件夹中点击右键&#xff0c;找到Settings&#xff0c; 从General 找到Contex Menu&#xff0c;我的系统是Win11&#xff0c;所以用Win11 Contex Menu 将所需要的操作打勾即可。...

线性代数考研笔记

行列式 背景 分子行列式&#xff1a;求哪个未知数&#xff0c;就把b1&#xff0c;b2放在对应的位置 分母行列式&#xff1a;系数对应写即可 全排列与逆序数 1 3 2&#xff1a;逆序数为1 奇排列 1 2 3&#xff1a;逆序数为0 偶排列 将 1 3 2 只需将3 2交换1次就可以还原原…...

C语言带参数的宏定义的相关知识汇总(最常用的形式、带标记分隔符##的形式...)

阅读大型C工程代码时&#xff0c;绕不开带参数的宏定义的阅读&#xff0c;所以有必要强化一下这一块的知识。 01-带参数的宏定义最常用的形式 # define S(a,b) a*b ... ... ... area S(3,2);则在编译预处理时area S(3,2);被展开为&#xff1a; area 3 * 2;02-带标记分隔符…...

cpp编译链接等

一、编译预处理 C程序编译的过程&#xff1a;预处理 -> 编译&#xff08;优化、汇编&#xff09;-> 链接 预处理指令主要有以下三种&#xff1a; 包含头文件&#xff1a;#include 宏定义&#xff1a;#define&#xff08;定义宏&#xff09;、#undef&#xff08;删除宏…...

openbmc sdk09.03 适配(一)

1.说明 本节是根据最新的sdk09.03适配ast2600平台。 sdk下载路径为: https://github.com/AspeedTech-BMC/openbmc可参阅文档: https://blog.csdn.net/wit_yuan/article/details/144613247nfs挂载方法: # mount -o nolock -t nfs serverip:/xx...

JavaScript HTML DOM 实例

JavaScript HTML DOM 实例 JavaScript 的 HTML DOM(文档对象模型)允许您通过脚本来控制 HTML 页面。DOM 是 HTML 文档的编程接口,它将 Web 页面与编程语言连接起来,使得开发者可以改变页面中的内容、结构和样式。在这篇文章中,我们将通过一系列实例来探讨如何使用 JavaSc…...

【Vue】:解决动态更新 <video> 标签 src 属性后视频未刷新的问题

问题描述 在 Vue.js 项目&#xff0c;当尝试动态更新 <video> 标签的 <source> 元素 src 属性来切换视频时&#xff0c;遇到了一个问题&#xff1a;即使 src 属性已更改&#xff0c;浏览器仍显示旧视频。具体表现为用户选择新视频后&#xff0c;视频区域继续显示之…...

C语言| 二维数字的定义

【二维数组】 二维数组的本质就是一维数组&#xff0c;表现形式上是二维的。 定义一般形式为 类型说明符 数组名[常量表达式][常量表达式]; 举例 int a[2][3]; 定义了一个2行3列的二维数组a&#xff0c;共有6个元素。 元素名字依次是&#xff1a;a[0][0],a[0][1],a[0][…...

全国青少年信息学奥林匹克竞赛(信奥赛)备考实战之循环结构(for循环语句)—(十)(求解数学中特殊的数)

实战训练1—完全数 问题描述&#xff1a; 数学上的“完全数”是指真因子&#xff08;除了自身以外的约数&#xff09;之和等于它本身的自然数。例如&#xff0c;6的因子是1,2,3&#xff0c;而1236&#xff0c;所以6是完全数。如果一个正整数小于它的所有真因数之和&#xff0…...

【大模型】ChatGPT 数据分析与处理使用详解

目录 一、前言 二、AI 大模型数据分析介绍 2.1 什么是AI数据分析 2.2 AI数据分析与传统数据分析对比 2.2.1 差异分析 2.2.2 优劣势对比 2.3 AI大模型工具数据分析应用场景 三、AI大模型工具数据分析操作实践 3.1 ChatGPT 常用数据分析技巧操作演示 3.1.1 快速生成数据…...

[gcc]常见编译开关

GCC 提供了许多编译开关&#xff08;编译选项&#xff09;&#xff0c;这些开关可以用于控制编译过程的各种方面&#xff0c;如优化级别、调试信息、警告和错误处理等。 以下是一些常见的 GCC 编译开关&#xff1a; -o&#xff1a;指定输出文件名。例如&#xff0c;gcc -o myp…...

iOS实现在collectionView顶部插入数据效果

有时候&#xff0c;我们会遇到这种需求&#xff0c;就是下拉刷新的时候&#xff0c;在 collectionView顶部插入数据&#xff0c;这个时候&#xff0c;需要我们注意 主要有两点 1 关闭隐式动画 由于我们使用insert在collectionView顶部插入数据是有从头部插入的隐式动画的&#…...

GPIO、RCC库函数

void GPIO_DeInit(GPIO_TypeDef* GPIOx); void GPIO_AFIODeInit(void); void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct); void GPIO_StructInit(GPIO_InitTypeDef* GPIO_InitStruct); //输出 读 uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx,…...

PostgreSQL学习笔记(一):PostgreSQL介绍和安装

目录 概念 PostgreSQL简介 PostgreSQL的关键特性 1. 标准兼容性 2. 扩展性 3. 数据完整性和可靠性 4. 丰富的数据类型 5. 查询能力 6. 事务和并发控制 7. 扩展和插件 8. 跨平台和多语言支持 9. 高可用性和扩展性 常用场景 安装 Linux apt安装 下载安装包安装 客…...

从摩托罗拉手机打印短信的简单方法

昨天我试图从摩托罗拉智能手机上打印短信&#xff0c;但当我通过USB将手机连接到电脑时&#xff0c;我在电脑上找不到它们。由于我的手机内存已达到限制&#xff0c;并且我想保留短信的纸质版本&#xff0c;您能帮我将短信从摩托罗拉手机导出到计算机吗&#xff1f; 如您所知&…...