简单介绍JVM
1.什么是JVM?
JVM就是Java虚拟机【Java Virtual Machine】,简称JVM。主要部分包括类加载子系统,运行时数据区,执行引擎,本地方法库等,接下来我们一一介绍
2.类加载子系统
JVM中运行的就是我们日常写的JAVA代码,代码经过编译加生成.class文件,在经过类加载子系统加载到内存中,如图:

3.JVM运行时数据区

3.1方法区(内存共享)
存储的就是类对象,包括类方法和对象方法
存储数据是公共的,所有线程都可以访问这个区域
补充:方法区别称
JDK7称为永久代
JDK8及以后称为元空间
补充**:如何区别类方法和对对象方法?**
对象方法调用时会有一个隐式this引用,表示当前对象自己,而类对象全局统一。
3.2堆(内存共享)
用来存放在代码中用new关键字创建的对象。也是JVM中内存使用最大的区域。
3.3JAVA虚拟机栈(线程私有)
每创建一个线程都会在内存中创建一个对应的虚拟机栈,栈中存放的是栈帧。
该线程每调用一个方法虚拟机中就会入栈一个栈帧,栈帧中存储的信息与该方法息息相关,主要包括局部变量表,操作站栈,动态连接,方法返回地址,如图:

所以当某线程虚拟机栈空了,也就说明该线程中的方法已经执行完毕,反之亦然。
3.4本地方法栈
调用本地方法时使用的栈
3.5程序计数器(线程私有)
用来记录线程当前执行到了哪一行,下次CPU调度时从计数器位置开始执行,(多线程)
搞懂了这些部分分别是做什么的,我们再来说**.class文件时如何被JVM加载并运行**
1.类加载子系统把.class文件加载到运行时数据区。
2.将类对象,类方法和对象方法存在方法区,后续new对象可以直接从这里找到模板,以便进行对象创建操作。
3.new 出来的对象全部放在堆区。
4.创建的每个线程分配一个虚拟机栈,线程中被调用的方法信息记录在栈帧中并依次入栈,可以说栈中存的是线程对方法的调用层级。
5.本地方法栈中存的是本地方法的调用层级。
6.程序计数器,记录的是当前线程的执行的行号。
4.JVM类加载过程

4.1加载
通过类的全限定名找到所有的.class文件,加载到内存中
4.2验证
验证.class文件是否符合JVM标准
4.3准备
为静态变量以及静态方法分配内存空间并按照数据类型设置初始值(例如:int 初始值为0)。
4.4解析
JVM把常量池中的符号引用(例如:int 符号引用为I)替换为真实引用
4.5初始化
执行类的初始化代码(被static修饰的)
4.6使用
使用的也就是刚刚加载的类,所以使用阶段也是new对象,执行构造方法和父类构造方法的阶段。
4.7卸载
程序停止时–从JVM中卸载。
5.双亲委派模型
双亲委派模型是Java类加载器的一种工作模式,该模式主要用于JVM类加载阶段,用于保证JDK中定义的类不被恶意修改。以下是它的工作图:

具体流程:
1.当创建一个类时,先从应用加载器开始向上转发,一直到启动加载器
2启动加载器在自己路径下找这个类,若找到则加载,没有则向下转发给扩展加载器
3.扩展加载器在自己路径下找这个类,若找到则加载,没有则向下转发给应用程序加载器
4.应用程序加载器在自己路径下找这个类,找到则加载,找不到则报异常或错误
6.垃圾回收
说完了类的加载和卸载,我们来讲对象是如何被回收的,毕竟我们前面讲堆区是JVM中使用内存最大的区域,为什么最大?因为程线程中创建的各种对象多呗,有时一个对象被创建可能仅仅使用一次就不用了,对于这些对象我们要及时回收,不然放那不管是占内存的。
那垃圾回收中的“垃圾”其实也就是不再使用的对象,垃圾回收也就是回收对象占用的堆内存。
所以问题就在于如何标识对象是否死亡?
6.1引用计数算法
核心思想:对于堆中对象,引用一次计数加一,消除引用一次计数减一,当堆中对象引用计数为0时表示该对象已经死亡。
该算法缺点:内存泄漏----堆中某个对象对应的内存空间永远也回收不了。
举个例子:

经过上诉一番操作,t1对象和t2对象虽然还未死,但是:t1.instance所引用的对象永远也访问不了,那这个内存就回收不了,所以这种算法我们一般不用。
6.2可达性分析算法
核心思想:通过某一个根节点(GC root)出发访问不到某个对象,则判定该对象死亡,本轮GC标记,下轮GC回收内存空间。
6.3标记-清除算法
判定哪些对象已死亡需要回收我们OK了,那么如何回收死亡对象呢?
首先登场的时标记-清除算法,工作原理如下图:

GC:一次垃圾回收,垃圾回收的时候会停止所有用户进程(STW,Stop The World)
缺点:会产生大量不连续的空间碎片(看图也能看出来)
导致如果有一个大对象将会没有足够的内存空间存放-------》导致再次触发GC-------》再次触发STW,而GC的时间是不可控的,一秒一天一周都有可能,随着计算机和网络的发展,这样的时间成本是不可接受的。
6.4复制算法
工作原理如下图:

核心思想:将内存区域划分为两个大小相等的区域,区域1来放对象,区域2暂时空闲,当GC开始时,先将区域未死亡对象复制到区域2并按照内存地址顺序整理好,然后全面清除区域1,完成一次完整GC。
优点:解决了内存空间不连续的问题。
缺点:空间利用率不高,只有一半,如果要存储8G对象就要准备至少16G空间。
6.5标记整理算法
核心思想:每回收一次对象后,将剩余对象向一端整理。,具体如下图:

核心思想:在回收死亡对象之后将剩余对象向一端移动。
优点:空间利用率提升了,不再是50%了。
缺点:在移动对象的过程中效率势必会受很大影响。
6.6分代算法(GC中真正使用的算法)
核心思想:将整个内存区域分为新生代(占内存三分之一)和老年代(占内存三分之二)
新生代用来存放刚new 出来的对象,大部分“朝生暮死”老年代用来存放在新生代经历多次GC而未被回收的对象。
新生代采用复制算法,老年代采用标记-整理算法。
新生代又分为Eden区,From区和To区,Eden区占新生代内存的五分之四,剩余由From区和To区占有。
具体回收过程如下图:

每个对象的对象头中有一个字段记录着该对象“年龄”,每GC一次而未被回收则年龄加一,在新生代中,年龄超过某个特定值(一般默认为15)则会被强制移到老年代。
相关文章:
简单介绍JVM
1.什么是JVM? JVM就是Java虚拟机【Java Virtual Machine】,简称JVM。主要部分包括类加载子系统,运行时数据区,执行引擎,本地方法库等,接下来我们一一介绍 2.类加载子系统 JVM中运行的就是我们日常写的JA…...
纷析云:赋能企业财务数字化转型的开源解决方案
在企业数字化转型的浪潮中,财务管理的高效与安全成为关键。纷析云凭借其开源、安全、灵活的财务软件解决方案,为企业提供了一条理想的转型路径。 一、开源的力量:自主、安全、高效 纷析云的核心优势在于其100%开源的财务软件源码。这意味着…...
DeepSeek开源周第二弹:DeepEP如何用RDMA+FP8让MoE模型飞起来?
一、引言:MoE模型的通信瓶颈与DeepEP的诞生 在混合专家(MoE)模型训练中,专家间的全对全(All-to-All)通信成为性能瓶颈。传统方案在跨节点传输时带宽利用率不足50%,延迟高达300μs以上。DeepSee…...
NLP学习记录十:多头注意力
一、单头注意力 单头注意力的大致流程如下: ① 查询编码向量、键编码向量和值编码向量分别经过自己的全连接层(Wq、Wk、Wv)后得到查询Q、键K和值V; ② 查询Q和键K经过注意力评分函数(如:缩放点积运算&am…...
【MySql】EXPLAIN执行计划全解析:15个字段深度解读与调优指南
文章目录 一、执行计划核心字段总览二、关键字段深度拆解1. type(访问类型)——查询性能的晴雨表典型场景分析: 2. key_len(索引使用长度)——索引利用率的检测仪计算示例: 3. Extra(附加信息&a…...
论文笔记(七十二)Reward Centering(五)
Reward Centering(五) 文章概括摘要附录B 理论细节C 实验细节D 相关方法的联系 文章概括 引用: article{naik2024reward,title{Reward Centering},author{Naik, Abhishek and Wan, Yi and Tomar, Manan and Sutton, Richard S},journal{arX…...
Linux内核自定义协议族开发指南:理解net_device_ops、proto_ops与net_proto_family
在Linux内核中开发自定义协议族需要深入理解网络协议栈的分层模型。net_device_ops、proto_ops和net_proto_family是三个关键结构体,分别作用于不同的层次。本文将详细解析它们的作用、交互关系及实现方法,并提供一个完整的开发框架。 一、核心结构体的作用与层级关系 struct…...
SOME/IP-SD -- 协议英文原文讲解6
前言 SOME/IP协议越来越多的用于汽车电子行业中,关于协议详细完全的中文资料却没有,所以我将结合工作经验并对照英文原版协议做一系列的文章。基本分三大块: 1. SOME/IP协议讲解 2. SOME/IP-SD协议讲解 3. python/C举例调试讲解 5.1.3.1 E…...
【数据处理】COCO 数据集掩码 Run-Length Encoding (RLE) 编码转二进制掩码
输入:结果.json 输出:mask.jpg json内容示例如下: {"labels":[ # class_id 1,2,3,...],"scores":[ # 置信度0.2,0.7,0.3,...],"bboxes":[[1244.0,161.0,1335.0,178.0],[1243.0,161.0,1336.0,178.0],[1242.0,1…...
Java中的缓存技术:Guava Cache vs Caffeine vs Redis
在Java中,缓存技术是提升应用性能的重要手段。常见的缓存技术包括Guava Cache、Caffeine和Redis。它们各有优缺点,适用于不同的场景。以下是对它们的详细对比: 1. Guava Cache 类型: 本地缓存 特点: 基于内存的缓存,适用于单机应…...
Day8 蓝桥杯acw讲解
首先先给大家看一道这个题, 我真的是太喜欢y总了,如果大家也是最近在准备蓝桥杯或者计算机相关的比赛,但是得加一个前提就是必须最好基础真的很好,要不然其实买了课,也没啥太大的用处,其实就可以以我本人举…...
《Operating System Concepts》阅读笔记:p147-p158
《Operating System Concepts》学习第 15 天,p147-p158 总结,总计 12 页。 一、技术总结 1.socket (1)定义 A socket is defined as an endpoint for communication(socket 是用于通信的端点,或者说socket 是通信端点的抽象表示。). A s…...
JSON Schema 入门指南:如何定义和验证 JSON 数据结构
文章目录 一、引言二、什么是 JSON Schema?三、JSON Schema 的基本结构3.1 基本关键字3.2 对象属性3.3 数组元素3.4 字符串约束3.5 数值约束 四、示例:定义一个简单的 JSON Schema五、使用 JSON Schema 进行验证六、实战效果6.1 如何使用 七、总结 一、引…...
java后端开发day20--面向对象进阶(一)--static继承
(以下内容全部来自上述课程) 1.static–静态–共享 static表示静态,是java中的一个修饰符,可以修饰成员方法,成员变量。 1.静态变量 被static修饰的成员变量,叫做静态变量。 特点: 被该类…...
FastJSON 默认行为:JSON.toJSONString 忽略 null 字段
完整的 FakeRegistrationController 代码,这让我可以全面分析后端逻辑,特别是为什么空的字段(如 compareDate)不返回给前端。我将详细分析代码的每个接口,尤其是与 list 请求和字段返回相关的部分,并解释原…...
数据结构:基数排序(c++实现)
个人主页 : 个人主页 个人专栏 : 《数据结构》 《C语言》《C》《Linux》《网络》 《redis学习笔记》 文章目录 基数排序的定义和基本原理基本原理具体步骤 基数排序的优缺点:代码实现总结 基数排序的定义和基本原理 基数排序(Radix Sort)是一…...
DOM 事件 HTML 标签属性速查手册
以下是一份 DOM 事件 & HTML 标签属性速查手册,涵盖常用场景和示例,助你快速查阅和使用: 一、DOM 事件速查表 1. 鼠标事件 事件名触发时机适用元素示例代码click元素被点击任意可见元素button.addEventListener(click, () > { ... …...
PhotoShop学习01
了解Photoshop 这里省略了Photoshop的软件安装,请自行查找资源下载。 1.打开图片 下图为启动photoshop后出现的界面,我们可以通过创建新文件或打开已有文件来启用photoshop的工作界面。 可以通过左边的按钮进行新文件的创建或打开已有文件。 也可以点…...
mongodb【实用教程】
MongoDB 是一个开源的文档型数据库管理系统 下载安装 Windows 系统 https://blog.csdn.net/weixin_41192489/article/details/126777309 GUI工具 【推荐】MongoDB Compass https://www.mongodb.com/zh-cn/docs/compass/current/ Robo 3T https://blog.csdn.net/weixin_4119248…...
C语言机试编程题
编写版本:vc2022 1.求最大/小值 #include<stdio.h> int main(){int a[50],n;int max, min;printf("请输入您要输入几个数");scanf_s("%d", &n);printf("请输入您要比较的%d个数\n",n);for (int i 0; i<n; i) {scanf_…...
当LLM成为链上节点:2026奇点大会披露的首个AI原生Layer 1主网性能基准(TPS 47,200,终局延迟<87ms)
第一章:2026奇点智能技术大会:AI原生区块链应用 2026奇点智能技术大会(https://ml-summit.org) 本届大会首次设立“AI原生区块链”主题轨道,聚焦模型权重链上存证、推理过程可验证、智能合约与LLM深度协同等前沿范式。区别于传统Web3应用将…...
深度学习基于YOLOv11+pyqt5的农作物识别检测系统 智慧农业CWC数据集 包含蓝草、藜、刺菜、玉米、莎草、棉花、茄属植物、番茄、天鹅绒、生菜、萝卜,11类农作物
智慧农业基于YOLOv11pyqt5的农作物识别检测系统内含CWC数据集 包含蓝草、藜、刺菜、玉米、莎草、棉花、茄属植物、番茄、天鹅绒、生菜、萝卜,11类农作物 也可自行替换模型,使用该界面做其他,实现检测目标自定义完整源码源文件已标注的数据集训…...
vue 自定义验证规则rule只能为数字
vue中自定义rule进行校验input框只能为数字vue<el-input v-model"age" maxlength"3"/>jsconst isNum (rule, value, callback) > {const age /^[0-9]*$/if (!age.test(value)) {callback(new Error(年龄只能为数字))}else{callback()}}rules: {a…...
DeOldify作品画廊:从黑白到彩色的历史瞬间重现
DeOldify作品画廊:从黑白到彩色的历史瞬间重现 你有没有想过,那些尘封在历史档案里的黑白照片,如果有了色彩,会是什么样子?那些我们只在书本上读到的场景,那些只存在于长辈记忆中的面孔,如果能…...
Windows用户必看:3分钟免费获取macOS同款鼠标指针的终极指南
Windows用户必看:3分钟免费获取macOS同款鼠标指针的终极指南 【免费下载链接】macOS-cursors-for-Windows Tested in Windows 10 & 11, 4K (125%, 150%, 200%). With 2 versions, 2 types and 3 different sizes! 项目地址: https://gitcode.com/gh_mirrors/m…...
工业视觉光源频闪同步:三种主流触发模式的实战选型与调优
1. 工业视觉光源频闪同步的核心价值 在高速产线飞拍、精密装配检测等工业视觉场景中,光源频闪同步技术就像给高速运动的物体按下"暂停键"。想象一下拍摄飞驰的子弹——如果使用普通连续光,照片上只会得到一条模糊的轨迹;而采用精准…...
Z-Image-Turbo-辉夜巫女GPU优化部署教程:显存友好、低配显卡也能跑
Z-Image-Turbo-辉夜巫女GPU优化部署教程:显存友好、低配显卡也能跑 1. 模型简介 Z-Image-Turbo-辉夜巫女是基于Z-Image-Turbo模型的Lora版本,专门针对生成辉夜巫女风格图片进行了优化。这个镜像最大的特点是显存占用低,即使是配置较低的显卡…...
基于AI+场景的数据安全管理平台建设方案:AI技术发展趋势与数据安全结合、AI+场景数据安全管理平台、AI+场景应用实践
该方案以AI技术为核心驱动力,围绕数据资产发现、事件分析、风险评估、策略处置等关键环节,构建了动态、智能的数据安全管理平台。通过自然语言处理、机器学习、深度学习、集成学习等技术,有效提升了敏感数据识别、异常行为检测、风险评估的准…...
利用LFM2.5-1.2B-Thinking-GGUF构建智能知识库问答:基于本地文档的精准回答
利用LFM2.5-1.2B-Thinking-GGUF构建智能知识库问答:基于本地文档的精准回答 1. 企业知识管理的痛点与解决方案 在日常工作中,企业员工经常需要查阅大量内部文档——产品手册、技术规范、公司制度等。传统的关键词搜索往往效率低下,要么返回…...
Qwen3-TTS功能体验:除了文本转语音,还能用自然语言微调音色
Qwen3-TTS功能体验:除了文本转语音,还能用自然语言微调音色 1. 引言:重新定义语音合成的可能性 想象一下,你正在为一个游戏角色配音,需要一种"低沉沙哑的中年男性声音,带着些许疲惫和沧桑感"。…...
