了解JVM
目录
一、内存区域划分
1.方法区(元数据区)
2.堆
3.栈
4.程序计数器
5.本地方法栈
总结:
二、类加载
1.加载
2.验证
3.准备
4.解析
5.初始化
三、双亲委派模型
四、垃圾回收
1.找到垃圾
1)引用计数
2)可达性分析
2.回收垃圾
1)标记清除
2)复制算法
3)标记整理
分代回收
JVM内部涉及到的内容非常广泛,这里主要讨论三个方面的主题。
- JVM内存区域划分
- JVM中类加载的过程
- JVM中的垃圾回收机制
一、内存区域划分
JVM运行时数据区域也叫内存布局,但需要注意的是它和java内存模型(java memory model,简称JMM)完全不同,属于两个不同的概念。
- 内存区域划分解决的是“数据”存哪里的问题。
- JMM解决的是“多线程下保证数据读写安全”的问题。
一个运行起来的java进程就像是一个JVM虚拟机,就需要从操作系统申请一大块内存,把这块内存划分成不同的区域,每个区域都有不同的作用。
JVM会把这块内存划分成下面区域。
1.方法区(元数据区)
用于存储被虚拟机加载的类信息、常量、静态变量和即时编译器编译后的代码等数据的。
补充:
JDK1.8元空间的变化:
JDK8中把字符串常量池移动到了堆中。
运行时常量池是方法区的一部分,存放字面量与符号引用。
- 字面量:字符串(JDK8d+移动到了堆中)、final常量、基本数据类型的值。
- 符号引用:类和结构的完全限定名、字段的名称和描述符、方法的名称和描述符。
2.堆
堆的作用:程序中创建的所有对象都在保存在堆中。
我们常见的JVM参数设置 -Xms10m最小启动内存是针对堆的,-Xms10m最大运行内存也是针对堆的。
ms是memory start 简称,mx是memory max的简称。
堆里面分为两个区域:新生代和老生代,新生代放新建的对象,当经过一定GC次数之后还存活的对象会放入老生代。新生代还有3个区域:一个Endn +两个Survivor(S0/S1)。
垃圾回收的时候会将Endn中存活的对象放到一个未使用的Survivor中,并把当前的Endn和正在使用的Survivor清除掉。(后面的内容会讲到垃圾回收机制)
3.栈
java虚拟机栈的作用:java虚拟机栈的生命周期和线程相同,java虚拟机描述的是java方法执行的内存模型:每个方法在执行的同时都会创建一个栈帧(Stack Frame)用于存储局部变量表、操作数栈、动态链接、方法出口等信息。
java虚拟机栈中的栈帧中包含了一下4个部分:
1.局部变量表:存放了编译器可知的各种基本数据类型(8大基本数据类型)、对象引用。局部变量表所需的内存空间在编译期间完成分配,当进入一个方法时,这个方法需要再帧中分配多大的局部变量空间是完全确定的,在执行期间不会改变局部变量表大小。简单来说就是存放方法参数和局部变量。
2.操作栈:每个方法会生成一个先进后出的操作栈。
3.动态链接:指向运行时常量池的方法引用。
4.方法返回地址:PC寄存器的地址。
4.程序计数器
程序计数器的作用:用来记录当前下一条执行的指令在内存中的哪个地方。
刚开始调用的方法,程序计数器记录的就是方法的入口地址,随着一条一条的执行指令,每执行一条指令,程序计数器的值都会自动更新指向下一条指令。
5.本地方法栈
本地方法栈和虚拟机栈类似,只不过java虚拟机栈是给JVM使用的,而本地方法栈是给本地方法使用的。
总结:
每个进程有自己的程序计数器,栈空间和本地方法栈,而这些线程之间共用同一份堆和方法区。
二、类加载
对于一个类来说,它的生命周期是这样的:
其中前5步是固定的顺序并且也是类加载的过程,其中中间的3步我们都属于连接,所以对于类加载来说总共分为以下几个步骤:
1.加载
2.连接
1)验证
2)准备
3)解析
3.初始化
1.加载
所谓的加载,就是类加载器通过全限定名定位 .class文件或其他资源,读取字节码数据,找要找的类的信息并加载到内存中并生成Class对象。
补充:
Class对象并非是实例new后的对象,而是java中
java.lang.Class
类的实例,用于描述存储类的元信息(如方法,属性,继承结构等)。
比如在执行代码中遇到class A,但是内存中没有class A的相关信息,于是就会从.class文件或其他资源中去找到class A的信息并加载到内存中。
加载loading的阶段,jvm需要完成一下三件事情:
- 通过一个类的全限定名例如:java.lang.A 来读取.class文件或其他资源,找到类A,获取定义此类的二进制字节流。
- 将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构。
- 方法区创建类A的元数据(类型信息、方法代码等),并在堆中生成一个代表这个类的java.lang.Class对象,作为访问入口。
2.验证
验证这一阶段的目的是确保Class文件的字节流中包含的信息符合 《java虚拟机规范》的全部约束要求,保证这些信息被当做代码运行后不会危害虚拟机自身安全。
验证选项:
- 文件格式验证
- 字节码验证
- 符号引用验证....
3.准备
准备阶段是正式为类中定义的变量(即静态变量,被static修饰的变量)分配内存并设置类变量初始值的阶段。
这里只是分配内存空间,还没有初始化,此时这个空间上的内存的数值就是全0。
4.解析
解析阶段是java虚拟机将常量池内的符号引用替换为直接引用的过程,也就是初始化常量的过程。
5.初始化
初始化阶段,java虚拟机真正开始执行类中编写的java程序代码,将主导权移交给应用程序。初始化阶段就是执行类构造器方法的过程,即针对类对象进行初始化,把类对象中需要的各个属性都设置好。
三、双亲委派模型
双亲委派模型属于类加载第一个步骤,“加载”过程中的这一个环节。
双亲委派模型中,类加载器通过全限定名(如java.lang.String)定位类资源,并依据层级委派规则并创建对应的类对象。
常见定位的类资源来源包括:
- 本地文件系统的.class文件(如用户编写的类);
- jar包中的.class文件(如第三方依赖);
- 网络传输的字节流;
- jvm核心类库。
类加载器:
是jvm中的一个模块,JVM中,内置了三个类加载器
1.BootStrap ClassLoader
2.Extension ClassLoader
3.Application ClassLoader
双亲委派模型原理:
如果一个类加载器收到了类加载的请求,它首先不会自己去尝试加载这个类,而是把这个请求委派给父类加载器去完成,每一个层次的类加载器都是如此,因此所有的加载请求最终都应该传送到最顶层的启动类加载器中,只有当父加载器反馈自己无法完成这个加载请求时(搜索范围中没有找到所需的类)传递给子加载器,子加载器才会尝试自己去完成加载。
类加载过程:
- 给定一个类的全限定类名,形如java.lang.String。
- 从Application ClassLoader 作为入口,开始执行查找的逻辑。
- Application ClassLoader,不会立即去扫描自己负责的目录,而是把查找的任务交给它的父亲,即Extension ClassLoader。
- Extension ClassLoader也不会立即去扫描自己负责的目录,而是把查找的任务,再交给它的父亲,即BootStrap ClassLoader。
- BootStrap ClassLoader,也不想立即扫描自己负责的目录,也想要把任务交给它的父亲,结果发现自己没有父亲,因此BootStrap Loader只能亲自扫描标准库的目录。
- 如果找到了,就执行后续 的类加载操作,此时查找过程结束,如果没有找到,还是把任务交给其孩子(Extension ClassLoader)执行。
- 如果还是没有扫描到,就会回到Application ClassLoader,Application ClassLoader就会负责扫描当前项目和第三方库的目录。
- 如果还是没有找到,就会抛出一个ClassNotFoundException。
四、垃圾回收
垃圾回收(Garbage Collection GC)是一种自动内存管理机制,由虚拟机(JVM)在程序运行时动态识别并回收不再被引用的对象的内存,防止内存泄露和溢出,降低开发者手动管理内存的负担。
垃圾指的是内存中没有引用指向的对象。
垃圾回收机制可以理解成两大步骤:
1.找到垃圾
2.回收垃圾
1.找到垃圾
在GC的圈子中,有两种主流的方案:引用计数;可达性分析。
1)引用计数
在java中,引用与对象关联,如果要操作对象,则必须使用引用。因此,可以通过引用计数来确定对象是否可以被回收。如果一个对象被引用一次,引用计数+1,反之没有引用计数归零了,该对象不被引用,则被视为垃圾,并且被GC回收利用。
然而引用计数并不被java所引用,原因存在两种:
- 比较浪费内存:
对象占据内存空间越小,计数器占比的空间就越大,这样计数器占据的空间就难以忽视。
- 引用计数机制,存在“循环问题”会导致对象清理不掉
2)可达性分析
可达性分析,本质上是时间换空间这样的手段。
有这么一个或一组线程,周期性的扫描我们代码中的所有对象,从一些特定的对象出发,尽可能的进行访问的遍历,把所有能够访问到的对象,都标记“可达”,反之,经过扫描后,未标记的对象就是垃圾了。
2.回收垃圾
回收垃圾有三种基本思路:标记清除;复制算法;标记整理。
1)标记清除
把对应的对象直接释放掉,就是标记清除的方案。
注:灰色标记
把标记的对象直接释放掉,就是标记清除的方案。
但是这个方案其实非常不好,会产生很多的内存碎片,当我们在申请内存的时候,申请到的都是“连续”的内存空间。随着时间的推移,内存碎片的情况就会越来越多,导致后面申请内存变得困难。
2)复制算法
通过复制的方式,把有效的对象归类到一起,然后再统一释放剩下的空间。
把内存分成两份,一次只用其中的一半,这个方案可以有效解决内存碎片的问题,但是,缺点也很明显:
1.内存要浪费一半,利用率不高。
2.如果有效的对象非常多,拷贝开销就很大。
3)标记整理
既能够解决内存碎片的问题,又能够处理复制中算法利用率的问题。
方法是先标记删除,然后再整理内存,类似与顺序表中删除元素的搬运操作,但是搬运的开销仍然很大。
实际上,JVM采用的释放思路,是上述基础思想的结合体,叫做“分代回收”机制。
分代回收
分代回收的其目的是识别并回收不被引用的对象,从而释放器占用的内存空间,是JVM中主要的回收的思想方法。
JVM将内存分为不同区域,根据对象生命周期差异化处理。
- 年轻代:存储新创建的短期对象,通过可达性分析扫描后,大部分对象会变成垃圾。
- 老年代:存储长期存活的对象,是使用标记-清除或标记-整理算法释放内存。
具体回收流程:
1.标记阶段:标记所有可达对象;
2.清除/整理阶段:
- 对年轻代使用复制算法,将存活的对象复制到年轻代的一块Survivor区,直接释放,然后再直接释放原区域内存,经过多次GC扫描之后,若有对象短时间内释放不掉就会把这个对象拷贝到老年代中。
- 对老年代使用标记-清除(释放离散垃圾内存)或标记-整理(压缩内存消除碎片)。
相关文章:
了解JVM
目录 一、内存区域划分 1.方法区(元数据区) 2.堆 3.栈 4.程序计数器 5.本地方法栈 总结: 二、类加载 1.加载 2.验证 3.准备 4.解析 5.初始化 三、双亲委派模型 四、垃圾回收 1.找到垃圾 1)引用计数 2)…...
Linux - 工具
一、 代码编译(g/gcc) 1) 预处理 g –E hello.c –o hello.i宏替换 条件编译 头文件展开 去注释 2) 编译 g –S hello.i –o hello.s检查语法将代码转为汇编 3) 汇编 g –c hello.s –o hello.o将汇编转为二进制代码 4) 链接 g hello.o –o …...
ASP.NET Core 6 MVC 文件上传
概述 应用程序中的文件上传是一项功能,用户可以使用该功能将用户本地系统或网络上的文件上传到 Web 应用程序。Web 应用程序将处理该文件,然后根据需要对文件进行一些验证,最后根据要求将该文件存储在系统中配置的用于保存文件的存储中&#…...
大模型LoRA微调训练原理是什么?
环境: LoRA 问题描述: 大模型LoRA微调训练原理是什么? 解决方案: LoRA(Low-Rank Adaptation)微调是一种高效的参数优化技术,专门用于大型语言模型的微调,旨在减少计算和内存需求…...
Ubuntu系统上部署Node.js项目的完整流程
以下是在Ubuntu系统上部署Node.js项目的完整流程,分为系统初始化、环境配置、项目部署三个部分: 一、系统初始化 & 环境准备 bash # 1. 更新系统软件包 sudo apt update && sudo apt upgrade -y# 2. 安装基础工具 sudo apt install -y buil…...
vue3:七、拦截器实现
一、前言 拦截器可以很好的统一处理请求和响应 请求拦截器:可以在请求发送之前对请求进行统一处理,比如添加认证信息(如 token)、设置请求头、添加公共参数等。响应拦截器:可以在响应返回之后对响应数据进行统一…...
K8S高可用集群-小白学习之二进制部署(ansible+shell)
一.K8S高可用集群配置概述 序言:本文从一个小白的视角进行K8S的研究和部署,采用二进制的方式是为了更清楚了分解部署流程及了解这个集群是怎么运作的,加上ansible+shell是方便在这个过程中,遇到了问题,我们可以不断的快速重复部署来测试和研究问题的所在点,本文的架构图…...
学生管理信息系统的需求分析与设计
伴随教育的迅猛演进以及学生规模的不断扩增,学生管理信息系统已然成为学校管理的关键利器。此系统能够助力学校管控学生的课程成绩、考勤记载、个人资讯等诸多数据,提升学校的管理效能与服务品质。 一.需求分析 1.1 学生信息管理 学生信息在学校管理体…...
010---基于Verilog HDL的分频器设计
文章目录 摘要一、时序图二、程序设计2.1 rtl2.2 tb 三、仿真分析四、实用性 摘要 文章为学习记录。绘制时序图,编码。通过修改分频值参数,实现一定范围分频值内的任意分频器设计。 一、时序图 二、程序设计 2.1 rtl module divider #(parameter D…...
Pytorch使用手册—雅可比矩阵、海森矩阵、hvp、vhp 等:组合函数变换(专题四十四)
计算雅可比矩阵或海森矩阵在许多非传统深度学习模型中是非常有用的。使用 PyTorch 的常规自动微分 API(Tensor.backward(),torch.autograd.grad)计算这些量是困难的(或者很麻烦)。PyTorch 的受 JAX 启发的函数变换 API 提供了高效计算各种高阶自动微分量的方法。 注意: 本…...
OpenCV计算摄影学(16)调整图像光照效果函数illuminationChange()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 对选定区域内的梯度场应用适当的非线性变换,然后通过泊松求解器重新积分,可以局部修改图像的表观照明。 cv::illuminati…...
WPF框架---MvvmLight介绍
目录 1. MvvmLight 框架准备 2. MvvmLight 中的相关基类 3. MvvmLight 中的数据绑定与通知 a. 核心功能 b. 关键方法与属性 c. 完整示例 d. 高级用法 4. MvvmLight 中的命令对象 a. 命令对象的作用 b. 核心接口:ICommand c. MvvmLight 中的 RelayCommand…...
C语言基础之【指针】(下)
C语言基础之【指针】(下) 指针和字符串字符指针字符指针做函数参数const修饰的指针变量指针数组做为main函数的形参项目开发常用字符串应用模型while和do-while模型两头堵模型字符串反转模型 字符串处理函数strchr()strrchr()strstr()strtok()strcpy()st…...
Deepseek中的MoE架构的改造:动态可变参数激活的MoE混合专家架构(DVPA-MoE)的考虑
大家好,我是微学AI,今天给大家介绍一下动态可变参数激活MoE架构(Dynamic Variable Parameter-Activated MoE, DVPA-MoE)的架构与实际应用,本架构支持从7B到32B的等多档参数动态激活。该架构通过细粒度难度评估和分层专家路由,实现“小问题用小参数,大问题用大参数”的精…...
【0012】Python函数详解
如果你觉得我的文章写的不错,请关注我哟,请点赞、评论,收藏此文章,谢谢! 本文内容体系结构如下: 编写代码往往是为了实现特定的功能,如果需要使用功能多次,也要写同样的代码多次吗…...
Stable Diffusion教程|快速入门SD绘画原理与安装
什么是Stable Diffusion,什么是炼丹师?根据市场研究机构预测,到2025年全球AI绘画市场规模将达到100亿美元,其中Stable Diffusion(简称SD)作为一种先进的图像生成技术之一,市场份额也在不断增长&…...
鸿蒙应用开发深度解析:API 14核心特性与实战指南
文章目录 一、HarmonyOS API 14架构升级解析1.1 系统架构演进1.2 核心能力对比 二、ArkUI 3.0开发实战2.1 声明式UI完整示例2.2 自定义组件开发 三、分布式能力深度开发3.1 跨设备数据同步流程3.2 分布式数据库操作 四、系统能力扩展开发4.1 后台任务管理4.2 硬件服务调用 五、…...
docker中kibana启动后,通过浏览器访问,出现server is not ready yet
问题:当我在浏览器访问kibana时,浏览器给我报了server is not ready yet. 在网上试了很多方法,都未能解决,下面是我的方法: 查看kibana日志: docker logs -f kibana从控制台打印的日志可以发现ÿ…...
2025年天梯赛第1场选拔赛
目录 A:徐老师的积木山峰 B:徐老师的最长上升子序列 C:徐老师的机器命令 D:徐老师的地下堡 E:徐老师的新鲜羊腿 F:徐老师的黄金矿工 G:徐老师的成绩统计 H:春节糖果 I:幸运函数 J:好坏钥匙 A:徐老师的积木山峰 徐老师有 n 块积木排成一排,从左往右数编号依次为 1∼…...
28-文本左右对齐
给定一个单词数组 words 和一个长度 maxWidth ,重新排版单词,使其成为每行恰好有 maxWidth 个字符,且左右两端对齐的文本。 你应该使用 “贪心算法” 来放置给定的单词;也就是说,尽可能多地往每行中放置单词。必要时可…...
SpringBoot校园管理系统设计与实现
在现代校园管理中,一个高效、灵活的管理系统是不可或缺的。本文将详细介绍基于SpringBoot的校园管理系统的设计与实现,涵盖管理员、用户和院校管理员三大功能模块,以及系统的部署步骤和数据库配置。 管理员功能模块 管理员是系统的核心管理…...
thunder bird 配置邮箱
1.配 outlook https://cn.windows-office.net/?p22940 2.配 qq 邮箱 https://blog.csdn.net/lx_ros/article/details/124831850 3.QQ邮箱的授权码在 账号与安全 4.qq 邮箱 更换 foxmail 邮箱名 https://www.yigujin.cn/blog/p10094.html 结语 感觉网上搜到的都不咋好&…...
机器学习中的线性代数:奇异值分解 SVD
线性代数 奇异值分解(SVD) 参考资料: 超详细!彻底搞懂矩阵奇异值分解(SVD)本质计算应用!_哔哩哔哩_bilibili 非常好的视频,本文内容主要来自于该视频,在此表示感谢&#…...
机器学习深度学习基本概念:logistic regression和softmax
逻辑回归用来处理二分类问题 softmax用来处理多分类问题:比如llm在generate的时候,每个batch里面的一个样本的一个一次generate就是softmax生成一个大小为vocab_size的向量的概率分布,然后再采样 逻辑回归(logistic regression&…...
机器学习(六)
一,决策树: 简介: 决策树是一种通过构建类似树状的结构(颠倒的树),从根节点开始逐步对数据进行划分,最终在叶子节点做出预测结果的模型。 结构组成: 根节点:初始的数据集…...
在 Maven 中使用 <scope> 元素:全面指南
目录 前言 在 Maven 中, 元素用于定义依赖项的作用范围,即依赖项在项目生命周期中的使用方式。正确使用 可以帮助我们优化项目的构建过程,减少不必要的依赖冲突,并提高构建效率。本文将详细介绍 的使用步骤、常见作用范围、代码…...
Manus邀请码如何申请,有哪些办法
Manus是由Monica团队推出的一款通用型AI智能体产品,旨在通过自主任务规划与执行能力,将用户的想法转化为实际成果。它不仅能够理解复杂指令,还能通过调用虚拟环境中的工具(如浏览器、代码编辑器、文件处理器等)&#x…...
大型WLAN组网部署(Large scale WLAN network deployment)
大型WLAN组网部署 大型WLAN网络关键技术 技术 作用 VLAN Pool 通过VLAN Pool把接入的用户分配到不同的VLAN,可以减少广播域,减少网络中的广播报文,提升网络性能。 DHCP Option 43 & 52 当AC和AP间是三层组网时,AP通过…...
MQ保证消息的顺序性
在消息队列(MQ)中保证消息的顺序性是一个常见的需求,尤其是在需要严格按顺序处理业务逻辑的场景(例如:订单创建 → 支付 → 发货)。 一、消息顺序性被破坏的原因 生产者异步/并行发送:消息可能…...
SQL Server查询计划操作符(7.3)——查询计划相关操作符(9)
7.3. 查询计划相关操作符 78)Repartition Streams:该操作符消费多个输入流并产生多个输出流。期间,记录内容与格式保持不变。如果查询优化器使用一个位图过滤(bitmap filter),则输出流中的数据行数将会减少。一个输入流的每行记录被放入一个输出流。如果该操作符保留顺序…...
杨校老师课堂之零基础入门C++备战信息学奥赛-基础篇
零基础快速入门C C学习路线一、基础语法1. C基础框架2. C语言输出3. C 语言输入4. C 数据类型5. C 赋值6. 运算符与表达式7. 控制结构语句7.1 if分支结构语句7.1.1 单分支结构语句7.1.2 双分支结构语句7.1.3 多分支结构语句 7.2 switch开关语句 8. 循环结构语句8.1 for循环8.2 …...
wxWidgets GUI 跨平台 入门学习笔记
准备 参考 https://wiki.wxwidgets.org/Microsoft_Visual_C_NuGethttps://wiki.wxwidgets.org/Tools#Rapid_Application_Development_.2F_GUI_Buildershttps://docs.wxwidgets.org/3.2/https://docs.wxwidgets.org/latest/overview_helloworld.htmlhttps://wizardforcel.gitb…...
Aws batch task 无法拉取ECR 镜像unable to pull secrets or registry auth 问题排查
AWS batch task使用了自定义镜像,在提作业后出现错误 具体错误是ResourceInitializationError: unable to pull secrets or registry auth: The task cannot pull registry auth from Amazon ECR: There is a connection issue between the task and Amazon ECR. C…...
亚信安全发布2024威胁年报和2025威胁预测
在当今数字化时代,网络空间已成为全球经济、社会和国家安全的核心基础设施。随着信息技术的飞速发展,网络连接了全球数十亿用户,推动了数字经济的蓬勃发展,同时也带来了前所未有的安全挑战。2024年,网络安全形势愈发复…...
verb words
纠正correct remedy 修正modify 协商 confer 磋商/谈判 negotiate 通知notice notify *宣布announce 声明declare 宣告 declare *颁布 promulgate /introduce 协调coordinate 评估evaluate assess 撤离evacuate *规定stipulate 参与participate, 涉及refer…...
程序诗篇里的灵动笔触:指针绘就数据的梦幻蓝图<12>
大家好啊,我是小象٩(๑ω๑)۶ 我的博客:Xiao Xiangζั͡ޓއއ 很高兴见到大家,希望能够和大家一起交流学习,共同进步。 目录 一、回调函数二、qsort2.1 使用qsort函数排序整型数据2.2 使用qsort排序结构数据2.3 qsort函数的模…...
视频录像机视频通道是指什么
视频录像机的视频通道是指摄像机在监控矩阵或硬盘录像机设备上的视频输入的物理位置。 与摄像头数量关系:在视频监控系统中,有多少个摄像头就需要多少路视频通道,通道数量决定了视频录像机可接入摄像头的数量,一般硬盘录像机有4路…...
MySQL 实战 4 种将数据同步到ES方案
文章目录 1. 前言2. 数据同步方案 2.1 同步双写2.2 异步双写2.3 定时更新2.4 基于 Binlog 实时同步 3. 数据迁移工具选型 3.1 Canal3.2 阿里云 DTS3.3 Databus3.4 Databus和Canal对比3.4 其它 4. 后记 上周听到公司新同事分享 MySQL 同步数据到 ES 的方案,发现很有…...
sqlserver中的锁模式 | SQL SERVER如何开启MVCC(使用row-versioning)【启用行版本控制减少锁争用】
文章目录 引言锁和隔离级别的关系锁模式之间兼容性I 隔离级别SQLServer默认的隔离级别为:“read commited” (已提交读)在SQLServer2005引入了基于行版本控制的隔离级别。SQL SERVER如何开启MVCC(使用row-versioning)sqlserver开启MVCC后的锁II sqlserver中的锁模式**1、共享…...
拥抱健康养生,开启活力生活
在快节奏的现代生活中,健康养生已成为人们关注的焦点,它不仅是对身体的呵护,更是一种积极的生活态度。 合理饮食是健康养生的基石。我们应秉持均衡膳食的理念,谷物、蔬菜、水果、蛋白质类食物一个都不能少。每天保证足够的蔬菜摄入…...
江科大51单片机笔记【9】DS1302时钟可调时钟(下)
在写代码前,记得把上一节的跳线帽给插回去,不然LCD无法显示 一.DS1302时钟 1.编写DS1302.c文件 (1)重新对端口定义名字 sbit DS1302_SCLKP3^6; sbit DS1302_IOP3^4; sbit DS1302_CEP3^5;(2)初始化 因为…...
Python可视化——地理空间型图表(自用)
地图信息可视化的实现就是将不可展开的曲面上的地理坐标信息转化为二维平面进行显示,这个过程也叫地图投影(空间三维投影到平面二维) 地图投影的要求:等面积、等角度、等距离。总的来说就是映射到二维平面中的任何点通过比例尺放大…...
Python 网络爬虫教程与案例详解
Python 网络爬虫教程与案例详解 在当今数字化时代,数据的价值愈发凸显。Python 作为一门强大的编程语言,在数据获取领域有着广泛的应用,其中网络爬虫便是一项重要的技术。网络爬虫能够自动从网页中提取所需数据,极大地提高了数据…...
最新的前端场景面试题
1、如何实现一个Vue3的弹框组件,你会如何设计? 如果要实现一个 Vue3 的弹框组件,我会从以下几个关键点进行设计: 组件结构:定义组件的基础结构,包括模块(template)、脚本(script)和样式(style);显示和隐藏逻辑:设计和实现弹框的显示和隐藏机制,通常通过传递 pro…...
冲刺高分!挑战7天一篇孟德尔联合meta分析 DAY1-7
Day1 此前我们完成了若干篇关于meta的挑战,这一次挑战想在meta分析基础上进一步创新一些,这一次想要挑战孟德尔联合meta分析的文章,有想学习的师弟师妹跟我们一起完成这波挑战吧~ Day1任务收集信息明确选题明确目标期刊精读范文…...
win32汇编环境,对话框中使用树形视图示例二
;运行效果 ;win32汇编环境,对话框中使用树形视图示例二 ;得到树形视图控件Treeview的全路径字符串,这里的方法是由子项向父项挨个找的算法找齐路径 ;直接抄进RadAsm可编译运行。重要部分加备注。 ;下面为asm文件 ;>>>>>>>>>>>>>>&g…...
前端开发10大框架深度解析
摘要 在现代前端开发中,框架的选择对项目的成功至关重要。本文旨在为开发者提供一份全面的前端框架指南,涵盖 React、Vue.js、Angular、Svelte、Ember.js、Preact、Backbone.js、Next.js、Nuxt.js 和 Gatsby。我们将从 简介、优缺点、适用场景 以及 实际…...
tomcat的web管理
进入到conf cd /usr/local/tomcat/conf/备份tomcat-users.xml cp tomcat-users.xml{.,bak}编辑tomcat-users.xml vim tomcat-users.xml增加以下内容 配置tomcat-users.xml <role rolename"manager-gui"/><role rolename"admin-gui"/><use…...
类和对象(上)
1.面向过程与面向对象的初步认识 面向过程:以步骤为中心,适合简单逻辑,但复杂系统易混乱。 面向对象:以对象职责为中心,通过抽象和模块化应对复杂需求。 C语言:面向过程,关注的是过程࿰…...
springcloud智慧工地物联网云管理系统源码
智慧工地以物联网云平台为核心,基于智慧工地物联网云平台与现场多个子系统的互联,实现现场各类工况数据采集,存储、分析与应用。通过接入智慧工地物联网云平台的多个子系统板块,根据现场管理实际需求灵活组合,实现一体…...