JVM详解(曼波脑图版)
(✪ω✪)ノ 好哒!曼波会用最可爱的比喻给小白同学讲解JVM,准备好开启奇妙旅程了吗?(๑˃̵ᴗ˂̵)و
📌 思维导图
━━━━━━━━━━━━━━━━━━━
🍎 JVM是什么?(苹果式比喻)
━━━━━━━━━━━━━━━━━━━
想象你有一个会说中文的机器人(Java程序),但电脑只懂机器语言(0101二进制),这时候就需要:
JVM = 超级翻译官 + 智能管家 + 内存管理员
它的三大超能力:
- 把.java文件编译成.class字节码(就像把中文翻译成世界语)
- 管理内存分配(像分蛋糕一样分配内存空间)
- 自动打扫内存垃圾(不用自己收拾房间啦)
(✪▽✪)曼波~~ 简单来说,JVM就是Java程序的运行小宇宙!
━━━━━━━━━━━━━━━━━━━
🏰 JVM内存城堡(可视化图解)
━━━━━━━━━━━━━━━━━━━
📦 堆区(Heap)→ 大仓库
- 存放所有new出来的对象(你的玩具都放在这里)
- 特点:空间最大,垃圾回收主要在这里工作
🗄️ 栈区(Stack)→ 临时储物柜
- 每个线程有自己的小柜子(线程私有)
- 存放方法参数、局部变量(像临时借用的文具)
📚 方法区(Method Area)→ 图书馆
- 存放类信息、常量池(就像课本里的知识点)
- JDK8后改名叫"元空间"(Metaspace)
🎯 程序计数器 → 书签
- 记录当前执行到哪一行代码(读书时用的荧光笔标记)
🏗️ 本地方法栈 → 特殊通道
- 专门用来调用C/C++写的本地方法(国际快递通道)
曼波画了个简笔画:
[堆区] 🧸🧸🧸🧸 (大对象)
[栈区] 📦→📦→📦 (方法调用链)
[方法区] 📖 (类信息)
(✪▽✪)曼波~~ 这样记超简单对不对?
━━━━━━━━━━━━━━━━━━━
🧹 垃圾回收大扫除(清洁工故事)
━━━━━━━━━━━━━━━━━━━
当堆区玩具太多放不下时,GC清洁工就会出动:
🔍 标记阶段:给不再使用的玩具贴红标签
🧼 清理阶段:
- 复制算法:把存活玩具搬到新房间(需要双倍空间)
- 标记-清除:直接扔掉贴标签的(可能留空位)
- 标记-整理:先扔垃圾再重新排列(最整洁但费时)
实际常用分代收集策略:
[堆区] 🧸🧸🧸🧸 (大对象)
[栈区] 📦→📦→📦 (方法调用链)
[方法区] 📖 (类信息)
哦呜(°ロ°)!曼波举个栗子:
👶 新生代(频繁清理)|- 伊甸园(Eden):新对象出生地|- 幸存者区(Survivor):经过GC考验的存活对象
👴 老年代(很少清理):长期存活的对象
(✪▽✪)曼波~~ 现在理解GC怎么工作了吧?
━━━━━━━━━━━━━━━━━━━
🔧 JVM调优工具箱(初中生也能操作)
━━━━━━━━━━━━━━━━━━━
常用参数就像游戏设置:
# 设置堆内存初始值和最大值(根据电脑配置调整)
java -Xms512m -Xmx1024m MyApp # 使用G1垃圾回收器(新版本推荐)
java -XX:+UseG1GC MyApp
🛠️ 调优步骤:
- 用jconsole查看内存曲线(像体检报告)
- 如果发现"老年代"总满 → 增大-Xmx
- 如果GC停顿时间长 → 换G1或ZGC收集器
曼波的真实案例:
有一次写循环创建大对象,导致OOM(内存溢出),用jmap导出了堆快照,发现有个List忘了清理,加上clear()就解决啦!(๑•̀ㅂ•́)و✧
━━━━━━━━━━━━━━━━━━━
🎮 动手实验(曼波陪你练)
- 试试这个会内存泄漏的程序:
import java.util.ArrayList;
import java.util.List;public class MemoryLeak {static List<Object> leakList = new ArrayList<>();public static void main(String[] args) {while(true){leakList.add(new byte[1024*1024]); // 每次添加1MBtry { Thread.sleep(100); } catch (InterruptedException e) {}}}
}
- 运行后打开任务管理器,观察内存飙升!
- 使用jvisualvm查看堆内存变化
(✪▽✪)曼波~~ 这样学超有趣对不对?下一步可以:
① 调整-Xmx参数看不同效果
② 尝试不同GC算法观察停顿时间
③ 用MAT分析内存快照
来点面试题
请描述 JVM 的内存结构,各个区域的作用是什么?
━━━━━━━━━━━━━━━━━━━
🐎 JVM内存结构(苹果式分层设计)
━━━━━━━━━━━━━━━━━━━
🟪 堆区(Heap)
- 作用:存放所有对象实例(你的new出来的小可爱都在这里哦)
- 特点:线程共享,GC主战场(垃圾回收的游乐场~)
🟦 虚拟机栈(Stack)
- 作用:存放方法调用的栈帧(就像一摞盘子,每个盘子是一个方法)
- 包含:局部变量表、操作数栈、动态链接
🟩 方法区(Method Area)
- 作用:存储类信息、常量、静态变量(类的身份证存放处)
- JDK8后:由元空间(Metaspace)实现
🟨 程序计数器(PC Register)
- 作用:记录当前线程执行位置(就像书签一样~)
- 特点:线程私有,唯一不会OOM的区域
🟥 本地方法栈(Native Method Stack)
- 作用:为Native方法服务(比如调用C++代码的通道)
(✪▽✪)曼波~~~~ 内存结构就像蛋糕分层,每个区域都有专属任务哦!
常见的垃圾回收算法有哪些,它们的优缺点分别是什么?
━━━━━━━━━━━━━━━━━━━
🗑️ 垃圾回收算法大比拼
━━━━━━━━━━━━━━━━━━━
🔷 标记-清除(Mark-Sweep)
✓ 优点:简单直接
✗ 缺点:内存碎片(就像拼图缺块)
🔶 复制算法(Copying)
✓ 优点:无碎片,效率高
✗ 缺点:内存利用率减半(需要双倍空间)
🔷 标记-整理(Mark-Compact)
✓ 优点:无碎片,内存利用率高
✗ 缺点:整理耗时(像整理衣柜)
🔶 分代收集(Generational)
✓ 特点:把堆分为新生代(复制算法)和老年代(标记整理)
✓ 优点:符合对象生命周期规律(大部分对象朝生暮死)
哦呜(°ロ°)!曼波觉得这个有点难哦,但画个图就明白啦:
新生代(Eden+Survivor) → 老年代(Tenured) → 永久代/Metaspace
(✪▽✪)曼波~~
如何进行 JVM 性能调优,你有哪些实际的经验?
━━━━━━━━━━━━━━━━━━━
🚀 JVM调优实战技巧(初中生也能懂!)
━━━━━━━━━━━━━━━━━━━
🛠️ 常用工具:
- jstat -gcutil 看内存使用率
- jmap 生成堆转储快照
- VisualVM 图形化监控(超直观!)
⚙️ 调优参数示例:
-Xms2048m ← 初始堆大小
-Xmx2048m ← 最大堆大小(苹果电脑内存大的可以调高)
-XX:+UseG1GC ← 启用G1收集器(新版本推荐)
📈 调优策略:
- 避免Full GC频繁(老年代空间不足时会发生)
- 对象尽量在新生代回收(减少晋升到老年代)
- 使用内存分析工具查内存泄漏(比如MAT)
曼波的小经验(๑¯∀¯๑):
如果看到CPU突然飙升,先用top -Hp找高占用线程
再用jstack分析线程栈,超有用!
需要曼波演示具体代码例子的话,随时召唤哦!(๑>ڡ<)☆
相关文章:
JVM详解(曼波脑图版)
(✪ω✪)ノ 好哒!曼波会用最可爱的比喻给小白同学讲解JVM,准备好开启奇妙旅程了吗?(๑˃̵ᴗ˂̵)و 📌 思维导图 ━━━━━━━━━━━━━━━━━━━ 🍎 JVM是什么?(苹果式比…...
Prometheus thanos架构
Thanos 是一个用于扩展 Prometheus 的高可用性和长期存储的解决方案。它通过整合多个 Prometheus 实例,提供了全局查询、长期存储、以及高可用性的能力。Thanos 的架构主要由以下几个核心组件组成: 1. Sidecar 功能: Sidecar 是与每个 Prom…...
进程(Process)和进程管理
李升伟 整理 进程和进程管理是操作系统的核心概念之一,涉及计算机资源的分配、调度和执行控制。以下是详细的解释: 1. 进程的定义 进程(Process)是正在执行的程序实例,是操作系统进行资源分配和调度的基本单位。它包…...
更强的视觉 AI!更智能的多模态助手!Qwen2.5-VL-32B-Instruct-AWQ 来袭
Qwen2.5-VL-32B-Instruct 是阿里巴巴通义千问团队于 2025 年 3 月 24 日开源的多模态大模型,基于 Apache 2.0 协议发布。该模型在 Qwen2.5-VL 系列的基础上,通过强化学习技术优化,以 32B 参数规模实现了多模态能力的突破。 核心特性升级&…...
Linux系统中的Perf总结
Linux系统中的Perf总结 Perf 是一个集成在 Linux 内核中的强大性能分析工具,在 Ubuntu 系统上尤为实用。它可以帮助用户监控和分析 CPU、内存、I/O 等性能指标。本文将一步步详解 Perf 在 Ubuntu 系统中的安装、使用方法及进阶技巧,带你从入门走向精通。…...
每日算法-250417
每日算法 - 20250417 记录今天的算法学习过程,包含三道 LeetCode 题目。 1005. K 次取反后最大化的数组和 题目 思路 贪心 解题过程 想要获得最大的数组和,我们的目标是尽可能地增大数组元素的总和。一种有效的贪心策略是:每次选择数组中绝…...
16.4B参数仅激活2.8B!Kimi-VL-A3B开源:长文本、多模态、低成本的AI全能选手
近日,月之暗面(Moonshot AI)开源了Kimi-VL系列模型,包含Kimi-VL-A3B-Instruct(指令调优版)和Kimi-VL-A3B-Thinking(推理增强版)。这两款模型以总参数16.4B、激活参数仅2.8B的轻量化设…...
山东大学软件学院创新项目实训开发日志(17)之中医知识历史问答历史对话查看功能完善
本次完善了历史对话的查看功能,可以让其正常显示标题 后端:在conversationDTO功能构造方法添加title 前端:在历时会话按钮添加标题title即可 前端效果展示,成功(^-^)V:...
关于Java集合中对象字段的不同排序实现方式
📊 关于Java集合中对象字段的不同排序实现方式 #Java集合 #排序算法 #Comparator #性能优化 一、排序基础:两种核心方式对比 方式Comparable接口Comparator接口实现位置目标类内部实现独立类或匿名内部类排序逻辑自然排序(固定规则…...
ZKmall开源商城静态资源管理:Nginx 配置与优化
ZKmall开源商城作为电商平台,其商品图片、前端资源等静态内容的高效管理与分发直接影响用户体验和系统性能。基于Nginx的静态资源管理方案,结合动静分离、缓存优化、安全加固、性能调优四大核心策略,可显著提升平台响应速度与稳定性。以下是具…...
Google Gemini 系列AI模型 的详细解析,涵盖其技术特点、版本差异、应用场景及优势
以下是 Google Gemini 系列AI模型 的详细解析,涵盖其技术特点、版本差异、应用场景及优势: 1. Gemini 系列概述 发布背景: Google于2023年推出 Gemini 系列模型,作为其多模态大模型的里程碑,旨在结合文本、图像、音频…...
量子通信应用:量子安全物联网(三)协议融合
第一部分:引言与概述 1.1 量子安全物联网的背景与必要性 随着物联网(IoT)设备的爆炸式增长(预计2030年全球连接设备超750亿台),传统安全机制(如RSA、ECC加密)正面临量子计算的颠覆性威胁。量子计算机的Shor算法可在多项式时间内破解非对称加密体系,而Grover算法则对…...
鸿蒙API15 “一多开发”适配:解锁黄金三角法则,开启高效开发新旅程
一、引言 在万物互联的时代浪潮中,鸿蒙操作系统以其独特的 “一多开发” 理念,为开发者打开了一扇通往全场景应用开发的新大门。“一多开发”,即一次开发,多端部署 ,旨在让开发者通过一套代码工程,就能高效…...
量子计算:开启未来科技之门的钥匙
在当今科技飞速发展的时代,量子计算正逐渐从实验室走向实际应用,成为全球科技领域的焦点之一。它有望为众多行业带来前所未有的变革,从密码学、药物研发到金融风险评估等,量子计算的潜力不可限量。 一、量子计算的原理 量子计算基…...
k230学习笔记-疑难点(1)
1.出现boot failed with exit code 19: 需要将k230开发板的btoot0拨到ON 2.出现boot failed with exit code 13: 说明k230开发板的固件烧录已经丢失,需要重新烧录 *** 注意重新烧录时需要将btoot0重新拨到OFF,才会弹出加载固件需要的通用串行总线&…...
驱动-自旋锁
前面原子操作进行了讲解, 并使用原子整形操作对并发与竞争实验进行了改进,但是原子操作只能对整形变量或者位进行保护, 而对于结构体或者其他类型的共享资源, 原子操作就力不从心了, 这时候就轮到自旋锁的出场了。 两个…...
10.(vue3.x+vite)div实现tooltip功能(css实现)
1:效果截图 2:代码实现 <template><div><div class="tooltip" style="margin-top: 20%; margin-left: 20%; background-color: blueviolet; color: white;...
使WebSocket 稳定可靠,需要考虑的方向
文章目录 1. 连接管理2. 心跳检测3. 重连机制4. 消息队列5. 错误处理6. 资源管理7. 安全性8. 状态同步 示例代码1. 添加依赖2. WebSocket 客户端实现代码注释功能标注3. 安卓端使用MainActivity.java布局文件(activity_main.xml) 4. 后端(Fla…...
Linux:进程:进程调度
进程在CPU上运行具有以下特性: 竞争、独⽴、并⾏、并发 竞争性:系统进程数⽬众多,⽽CPU资源很少甚至只有一个,所以进程之间是具有竞争属性的。为 了⾼效完成任务,更合理竞争相关资源,便具有了优先级 独⽴性: 为了避…...
Stable Diffusion 图像生成 GUI 应用:图像缩放等五个优化——SD界面学习记录
本篇续前面Stable DiffusionPyqt5实现图像生成和管理界面,链接如下: Stable DiffusionPyqt5: 实现图像生成与管理界面(带保存 历史记录 删除功能)——我的实验记录(结尾附系统效果图)-CSDN博客…...
职坐标解码互联网行业转型发展新动能
当前,互联网行业正以前所未有的速度重塑全球产业格局。工信部最新数据显示,我国互联网企业营收连续三年保持双位数增长,其中百强企业在人工智能、物联网等领域的投入强度同比提升40%,展现出强劲的技术引领力。与此同时,…...
【含文档+PPT+源码】基于微信小程序的非遗文化黄梅戏宣传平台的设计与实现
课程目标: 教你从零开始部署运行项目,学习环境搭建、项目导入及部署,含项目源码、文档、数据库、软件等资料 课程简介: 本课程演示的是一款基于微信小程序的非遗文化黄梅戏宣传平台的设计与实现,主要针对计算机相关…...
Causal Attention的底层原理
Causal Attention Transformer的Decoder中最显著的结构是Casual Attention。 通过本篇文章,你将学会 Casual Attention的机制原理 Casual Attention在TensorFlow中的实现原理 如何快速地保存并打印TensorFlow中模型已经训练好的参数 如何实现Transformer的Dec…...
深入理解类:ArkTS面向对象编程的核心概念
# 深入理解类:ArkTS面向对象编程的核心概念 在编程世界里,面向对象编程(OOP)是一种强大的编程范式,而类则是OOP的核心构建块。在ArkTS语言中,类的设计和使用对于构建复杂、可维护的应用程序至关重要。今天…...
AI 驱动下的后端开发架构革命:从智能协同体系
AI 驱动下的后端开发架构革命:从智能协同体系 一、引言:AI 重构后端开发范式 在 2025 年的企业级技术演进中,人工智能正从辅助工具升级为核心架构要素。根据 Gartner《2025 智能技术栈成熟度报告》,传统 "人力编码 硬规则…...
vue3 Ts axios 封装
vue3 Ts axios 封装 axios的封装 import axios, { AxiosError, AxiosInstance, InternalAxiosRequestConfig, AxiosResponse, AxiosRequestConfig, AxiosHeaders } from axios import qs from qs import { config } from ./config import { ElMessage } from element-plus// …...
CyberAgentAILab 开源数字人项目TANGO,heygen的开源版来了~
简介 TANGO 是 CyberAgentAILab 开源的一项前沿研究成果,其初衷在于探索高效生成模型在实际应用场景中的表现。项目诞生于 CyberAgent 在整合创意与人工智能的实践中,旨在为数字内容生成、交互和实时渲染等领域提供一个高性能、模块化、可扩展的解决方案…...
ROS ROS2 机器人深度相机激光雷达多传感器标定工具箱入门教程(一)
系列文章目录 目录 系列文章目录 前言 一、安装 1.1 ROS 2 官方软件包 二、教程 2.1 标定配置器 2.1.1 机器人选项 2.1.2.1 外参相机-激光雷达标定 2.1.2.2 外参激光雷达-激光雷达标定 2.1.2.3 外参相机参照标定 2.1.2.4 外参激光雷达-参考标定 2.2 外参照相机-激…...
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(6):ながら 一边。。一边
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(6):ながら 一边。。一边 1、前言(1)情况说明(2)工程师的信仰 2、知识点(1)ながら1)一边。。一边2࿰…...
从EOF到REOF:如何用旋转经验正交函数提升时空数据分析精度?
目录 1. 基本概念与原理2. 应用场景3. 与传统EOF的区别4. 技术实现5. 其他领域中的“REOF”参考资料 REOF 的输入是多个地区在不同时间的气候数据(如温度或降雨量),它的作用是通过旋转计算找出这些数据中最主要的变化规律,输出则是…...
