JVM 内存区域详解
JVM 内存区域详解
Java 虚拟机(JVM)的内存区域划分为多个部分,每个部分有特定的用途和管理机制。以下是 JVM 内存区域的核心组成及其功能:
一、运行时数据区(Runtime Data Areas)
1. 线程共享区域
内存区域 | 别名 | 特性 | 异常类型 |
---|---|---|---|
堆(Heap) | 新生代+老年代 | 存储对象实例和数组,GC主要工作区域 | OutOfMemoryError |
方法区 | 元空间(Metaspace) | 存储类信息、常量、静态变量、JIT编译后的代码(JDK8+使用本地内存实现) | OutOfMemoryError |
2. 线程私有区域
内存区域 | 特性 | 异常类型 |
---|---|---|
程序计数器(PC Register) | 记录当前线程执行的字节码行号,唯一不会OOM的区域 | 无 |
虚拟机栈(JVM Stack) | 存储栈帧(局部变量表、操作数栈、动态链接、方法出口) | StackOverflowError |
本地方法栈(Native Stack) | 为Native方法服务 | StackOverflowError |
二、各区域深度解析
1. 堆内存(Heap)
-
新生代 (Young Generation)
- Eden区:对象初次分配区域
- Survivor区(S0/S1):Minor GC后存活对象暂存区
- 比例:默认
Eden:S0:S1 = 8:1:1
(可通过-XX:SurvivorRatio
调整)
-
老年代 (Old Generation)
- 存储长期存活对象(默认经过15次GC仍存活的对象)
- 触发Major GC/Full GC
-
配置参数:
-Xms1024m # 初始堆大小 -Xmx1024m # 最大堆大小 -XX:NewRatio=2 # 老年代/新生代比例
2. 方法区(Method Area)
-
存储内容:
- 类型信息(类名、访问修饰符等)
- 运行时常量池
- 静态变量(JDK7+静态变量移至堆中)
- JIT编译后的代码缓存
-
演进历史:
- JDK7及之前:永久代(PermGen),
-XX:PermSize
/-XX:MaxPermSize
- JDK8+:元空间(Metaspace),使用本地内存,
-XX:MetaspaceSize
/-XX:MaxMetaspaceSize
- JDK7及之前:永久代(PermGen),
3. 虚拟机栈(JVM Stack)
-
栈帧结构:
-
局部变量表:
- 基本数据类型直接存储值
- 引用类型存储指向堆的引用
- 槽位(Slot)是基本存储单位(32位)
-
配置参数:
-Xss256k # 设置线程栈大小
三、直接内存(Direct Memory)
-
特点:
- 不属于JVM运行时数据区
- 通过NIO的
ByteBuffer.allocateDirect()
分配 - 避免Java堆与Native堆间数据拷贝
-
相关异常:
OutOfMemoryError: Direct buffer memory
-
配置参数:
-XX:MaxDirectMemorySize=256m
四、内存区域交互关系
五、异常示例与调优
1. 堆内存溢出
// 持续创建大对象
List<byte[]> list = new ArrayList<>();
while(true) {list.add(new byte[1024*1024]); // 1MB per object
}
调优:增大-Xmx
,分析内存泄漏
2. 栈溢出
// 无限递归
public void stackOverflow() {stackOverflow();
}
调优:增大-Xss
或修复递归终止条件
3. 方法区溢出
// 借助CGLib持续生成类
while(true) {Enhancer enhancer = new Enhancer();enhancer.setSuperclass(OOMObject.class);enhancer.setUseCache(false);enhancer.create();
}
调优:增大-XX:MaxMetaspaceSize
六、JDK工具监控
工具 | 功能 | 示例命令 |
---|---|---|
jstat | 监控堆内存和GC情况 | jstat -gcutil <pid> 1000 |
jmap | 堆转储和分析 | jmap -heap <pid> |
VisualVM | 图形化监控所有内存区域 | 可视化工具 |
NMT(Native Memory Tracking) | 跟踪本地内存使用 | -XX:NativeMemoryTracking=detail |
七、重要注意事项
-
JDK版本差异:
- JDK7:字符串常量池在方法区(PermGen)
- JDK8+:字符串常量池移至堆中
-
对象创建流程:
类加载检查 → 分配内存(堆)→ 初始化 → 设置对象头 → 执行<init>方法
-
内存分配策略:
- 优先在Eden区分配
- 大对象直接进入老年代(
-XX:PretenureSizeThreshold
) - 长期存活对象进入老年代(
-XX:MaxTenuringThreshold
)
理解JVM内存区域是性能调优和故障诊断的基础,合理配置各区域大小可以显著提升应用稳定性和性能。
相关文章:
JVM 内存区域详解
JVM 内存区域详解 Java 虚拟机(JVM)的内存区域划分为多个部分,每个部分有特定的用途和管理机制。以下是 JVM 内存区域的核心组成及其功能: 一、运行时数据区(Runtime Data Areas) 1. 线程共享区域 内存…...
【java】在 Java 中,获取一个类的`Class`对象有多种方式
在 Java 中,获取一个类的Class对象有多种方式。Class对象代表了 Java 中的一个类或接口的运行时类信息,可以用于反射操作。以下是获取Class对象的几种常见方法: 1.使用.class属性 每个类都有一个.class属性,可以直接获取该类的Cl…...
蓝桥杯:对字符串处理常用知识笔记
一、前面四个是计算带有空格字符串的的长度计算 C语言代码 #include<string.h> #include<stdio.h> int main() { char s[105]; gets(s); printf("%d", strlen(s)); return 0; } 算法2 C 代码(常用) #include <iostream> #in…...
c++网络编程,信号透传可能是什么意思
在 C 网络编程中,**信号透传**(Signal Pass-Through)通常 refers to the concept of allowing signals to propagate through a network protocol stack without being interrupted or modified. 具体来说,信号透传可以涉及到几个…...
数据结构与算法学习笔记----贪心·绝对值不等式
数据结构与算法学习笔记----贪心绝对值不等式 author: 明月清了个风 first publish time: 2025.4.5 ps⭐️感觉其实是一个数学的问题, Acwing 104. 货仓选址 [原题链接](104. 货仓选址 - AcWing题库) 在一条数轴上有 N N N家商店,他们的坐标分别为 A…...
CUDA学习--体验GPU性能
学习来源:2 CUDA Python--并行计算基础-卷积计算以及共享内存_哔哩哔哩_bilibili 处理一张图片的处理速度对比 import cv2 from numba import cuda import time import math cuda.jit() def process_gpu(img,channels):tx cuda.blockIdx.x*cuda.blockDim.xcuda…...
博途 TIA Portal之1200做主站与200SMART的S7通讯
有时候,我们与之作S7通讯的西门子系PLC并不是同一个厂商或是同一时期供货的,也有可能不在一个编程软件中。此时进行S7能讯会有所不同。本文将演示博途与200SMART做S7通讯。 1、硬件准备 1200PLC一以,200SMART一台,网线2根,交换机一台。 2、关于编程 1200做主站,因此需…...
a标签download下载图片
a标签的download属性是HTML5中新增的一个属性,用于指定链接点击时直接下载文件,而不是在浏览器中打开文件。 基本用法 指定下载文件名:在a标签中添加download属性,并指定一个文件名。例如: <a href"…...
#SVA语法滴水穿石# (013)关于 disable iff、matched 、expect 的用法
SystemVerilog 断言(SVA)中 disable iff、matched 和 expect 的语法知识。 1. disable iff (condition) 功能与定义 作用:当指定条件(condition)为真时,禁用当前属性的检查。 常用于复位(rese…...
Day2-2:前端项目uniapp壁纸实战
再在wallpaper新建一个目录components 在components下新建组件common-title 记得点击创建同名目录 在index加 <view class"select"><common-title></common-title></view> 图片换了下,原来的有点丑,图片可按自己喜欢…...
pycharm如何通过跳板机连接服务器在本地debug
现在假设你有一个服务器,需要跳板机登陆,但是你从跳板机到服务器,只知道能直接通过ssh连接。 首先你可以现在本地创建一个 SSH 配置文件(~/.ssh/config): Host jumpHostName 跳板机地址Port 端口User 用户…...
Mysql explain中列的解析
EXPLAIN列的解释: table:显示这一行的数据是关于哪张表的 type:这是重要的列,显示连接使用了何种类型。从最好到最差的连接类型为const、eq_reg、ref、range、indexhe和ALL possible_keys:查询可以利用的索引&#…...
场馆预定系统小程序PHP+uniapp
场馆预定系统小程序:基于PHPUniApp的多场景体育场馆智慧化解决方案 随着全民健身意识的提升,体育场馆的数字化管理需求日益增长。场馆预定系统小程序凭借其轻量化、高便捷性,成为体育馆、羽毛球馆、兵乒球馆等场所提升运营效率的核心工具。本…...
05.unity 游戏开发-3D工程的创建及使用方式和区别
05.unity 游戏开发-3D工程的创建及使用方式和区别 提示:帮帮志会陆续更新非常多的IT技术知识,希望分享的内容对您有用。本章分享的是Python基础语法。前后每一小节的内容是存在的有:学习and理解的关联性,希望对您有用~ unity简介…...
php8 命名参数使用教程
简介 PHP 8 引入 命名参数(Named Arguments),允许在调用函数时按参数名传递值,而不是按照参数位置。这增强了代码的可读性、灵活性,并减少参数顺序依赖。 基本用法 传统位置参数(Positional Arguments&a…...
Transformer与注意力机制详解
1 Transformer与注意力机制详解 本文直观上详细介绍了大语言模型中十分重要的结构——Transformer,及其核心:注意力机制的原理。 1. Transformer结构 基础结构如下图所示,左侧由一系列Encoder block(编码器)构成,接收字词句输入;右侧由一系列Decoder block(解码器)…...
xLua环境控制+xLua的Lua调用C#的1
编写自定义加载器加载指定路径的Lua文件: using System.Collections; using System.Collections.Generic; using System.IO; using UnityEngine; using XLua;//Lua是脚本语言,编写代码脚本是实现功能最重要的方式 public class Loader : MonoBehaviour …...
RabbitMQ应用问题
RabbitMQ应用问题 一.幂等性1.简述概念2.MQ的幂等性介绍3.解决幂等性问题(1)全局唯一ID(2)业务逻辑判断 二.顺序性保障1.简单介绍2.无法保证顺序性的场景3.保障方案1)单队列消费者2)分区消费3)消息确认机制4)业务逻辑控制 三.消息积压问题1.原因分析2.解决方案 一.幂等性 1.简…...
轻量化大模型微调工具XTuner指令微调实战(下篇)
接着上篇文章《轻量化大模型微调工具XTuner指令微调实战(上篇)》来接着写教程。 一、模型转换 模型训练后会自动保存成 PTH 模型(例如 iter_500.pth),我们需要利用 xtuner convert pth_to_hf 将其转换为 HuggingFace…...
Redis数据结构之ZSet
目录 1.概述2.常见操作2.1 ZADD2.2 ZRANGE2.3 ZREVRANGE2.4 ZRANGEBYSCORE2.5 ZSCORE2.6 ZCARD2.6 ZREM2.7 ZINCRBY2.8 ZCOUNT2.9 ZMPOP2.10 ZRANK2.11 ZREVRANK 3.总结 1.概述 ZSet和Set一样也是String类型元素的集合,且不允许重复的成员,不同的是ZSet…...
STM32提高篇: CAN通讯
STM32提高篇: CAN通讯 一.CAN通讯介绍1.物理层2.协议层二.STM32CAN外设1.CAN控制器的3种工作模式2.CAN控制器的3种测试模式3.功能框图三.CAN的寄存器介绍1.环回静默模式测试2.双击互发测试四.CAN的HAL代码解读一.CAN通讯介绍 CAN(Controller Area Network 控制器局域网,简称…...
贪心算法之最小生成树问题
1. 贪心算法的基本思想 贪心算法在每一步都选择局部最优的边,希望最终得到整体最优的生成树。常见的两种 MST 算法为 Kruskal 算法 和 Prim 算法。这两者均满足贪心选择性质和最优子结构性质,即: 贪心选择性质:局部最优选择&…...
C++EasyX之五子棋PVP和PVE
以下是该C EasyX五子棋代码的详细解析: 1 代码 1.1 全代码 #include <graphics.h> #include <conio.h> #include <Windows.h> #include <cmath> #include <vector> #include <tuple> #include <algorithm>using na…...
【Tauri2】015——前端的事件、方法和invoke函数
目录 前言 正文 准备 关键url 获取所有命令 切换主题set_theme 设置大小 获得版本version 名字name 监听窗口移动 前言 【Tauri2】005——tauri::command属性与invoke函数-CSDN博客https://blog.csdn.net/qq_63401240/article/details/146581991?spm1001.2014.3001.…...
【C++奇遇记】C++中的进阶知识(继承(二))
🎬 博客主页:博主链接 🎥 本文由 M malloc 原创,首发于 CSDN🙉 🎄 学习专栏推荐:LeetCode刷题集 数据库专栏 初阶数据结构 🏅 欢迎点赞 👍 收藏 ⭐留言 📝 如…...
qt designer 软件主题程序设计
对于使用Qt Designer设计的界面,主题切换的实现需要结合Qt的信号槽机制、样式表动态加载以及资源管理。以下是针对Qt Designer UI的详细解决方案: 一、UI文件与主题系统的整合架构 二、核心实现步骤 1. 动态样式表加载系统 // ThemeManager.h class …...
2025 年 4 月补丁星期二预测:微软将推出更多 AI 安全功能
微软正在继续构建其 AI 网络安全战略,并于本月宣布在 Microsoft Security Copilot 中引入新代理。 他们引入了用于网络钓鱼分类的代理、用于数据丢失预防和内部风险管理的警报分类、条件访问优化、漏洞修复和威胁情报简报。 这些代理的目标是不断从这些不同学科中…...
docker swarm常用命令
1、初始化Swarm集群 用于初始化一个Swarm集群,并将当前节点设置为Manager节点。 用法:docker swarm init --advertise-addr <Manager节点IP> # docker swarm init --advertise-addr 192.168.1.100 这会将当前节点初始化为Swarm集群的管理节点&…...
抖音直播位置与IP属地不同?解析原因与应对策略
在当今短视频直播盛行的时代,抖音作为头部平台吸引了大量主播和观众。然而,许多用户发现一个令人困惑的现象:直播间显示的位置信息与账号IP属地不一致。这种情况不仅让观众产生疑问,也可能给主播带来不必要的麻烦。本文将深入分析…...
「限时开源」全网首发!DeepSeek-R1+AI绘画+音乐生成全栈源码
—企业级AIGC私有化终极方案,3大模态整合,成本直降90% 行业痛点:为什么企业急需这套方案? 1. 多模态AIGC的三大困局 成本失控 API吸血: 使用MidjourneyStable DiffusionGPT-4Suno API生成内容,企业月均支…...
设计模式简述(二)单例模式
单例模式 描述基本使用防破坏单例饿汉式懒汉式有上限多例 描述 一个类全局只有一个实例,自行实例化并提供给使用。 构造函数私有化是前提 基本使用 防破坏单例 防反射:在构造函数中判断类中实例是否已初始化 private InnerClassSingleton (){if(Inn…...
区块链钱包:与主流钱包APP的区别
前言 在前端开发者速入:DApp中的前端要干些什么?文中我简单讲解了在DApp中前端开发者要干的是什么,本来在接下来的内容中我应该继续讲解在DApp中前端开发者的一系列工作和其他所要用到的技术栈,但是为了方便后续的讲解,我们这里不得不提及一下在区块链中让无数人又爱又恨…...
23种设计模式-行为型模式-中介者
文章目录 简介问题解决代码架构优势 总结 简介 中介者是一种行为设计模式, 能让你减少对象之间混乱无序的依赖关系。该模式会限制对象之间的直接交互,强制让它们通过一个中介者对象进行合作。 问题 假如你有一个创建和修改用户资料的对话框࿰…...
mysql数据库中getshell的方式总结
mysql数据库中getshell的方式总结 MySQL版本大于5.0,MySQL 5.0版本以上会创建日志文件,我们通过修改日志文件的全局变量,就可以GetSHELL,下面这篇文章主要给大家介绍了关于mysql数据库中getshell的方式,需要的朋友可以参考下 outfile和dumpfile写shell 利用条件 …...
神经网络基础
神经网络的基本组成元素 一个神经元: 单层神经网络: 多层神经网络:(前向计算) 为什么要使用激活函数 如果不使用激活函数,每层只对上层的输入进行线性变换,实际这些线性变换可以归为一层即可。…...
Redis的公共操作命令
目录 1.Key操作命令1.1 keys *1.2 exists <key]>1.3 type <key>1.4 del <key>1.5 unlink <key>1.6 ttl <key>1.7 expire <key> <秒数>1.8 move <key> <index> 2.库操作命令2.1 select <index>2.2 dbsize2.3 flush…...
Redash:一个开源的数据查询与可视化工具
Redash 是一款免费开源的数据可视化与协作工具,可以帮助用户快速连接数据源、编写查询、生成图表并构建交互式仪表盘。它简化了数据探索和共享的过程,尤其适合需要团队协作的数据分析场景。 数据源 Redash 支持各种 SQL、NoSQL、大数据和 API 数据源&am…...
Transformer+BO-SVM多变量时间序列预测(Matlab)
TransformerBO-SVM多变量时间序列预测(Matlab) 目录 TransformerBO-SVM多变量时间序列预测(Matlab)效果一览基本介绍程序设计参考资料 效果一览 基本介绍 本期推出一期高创新模型,基于Transformer提取时序特征后输入S…...
【Redis】服务端高并发分布式结构
一、认识Redis Redis是开源的,用于存储数据的,在内存中存储数据。Redis被用作数据库,缓存,消息队列等一些作用。 在数据库的学习中,我们学习了MySQL,但是MySQL有一些大问题:其访问速度比较慢。在…...
C和C++(list)的链表初步
链表是构建其他复杂数据结构的基础,如栈、队列、图和哈希表等。通过对链表进行适当的扩展和修改,可以实现这些数据结构的功能。想学算法,数据结构,不会链表是万万不行的。这篇笔记是一名小白在学习时整理的。 C语言 链表部分 …...
第九课:LoRA模型的原理及应用
文章目录 Part.01 3种LoRA的使用方式Part.02 5种LoRA的应用方向Part.01 3种LoRA的使用方式 LoRA能够在家用级设备上训练,实现对Checkpoint在某些方面的微调使用Lora的三种方式:放置Lora模型到目录中,然后作为提示词的一部分输入。点击生成按钮下面的“画”,然后打开Additio…...
make_01_Program_07_$@ $^ 是什么含义
在 Makefile 中,$ 和 $^ 是自动变量,用于表示目标和依赖关系的特殊含义。它们常用于规则中的命令部分,以便简化 Makefile 的书写。 自动变量解析 $: $ 表示当前规则的目标文件名。换句话说,在一个特定的规则中&#x…...
CKPT文件是什么?
检查点(Checkpoint,简称ckpt)是一种用于记录系统状态或数据变化的技术,广泛应用于数据库管理、机器学习模型训练、并行计算以及网络安全等领域。以下将详细介绍不同领域中ckpt检查点的定义、功能和应用场景。 数据库中的ckpt检查点…...
YOLOv11训练教程:PyTorch与PyCharm在Windows 11下的完整指南
YOLOv11训练教程:PyTorch与PyCharm在Windows 11下的完整指南 介绍与引言 YOLO(You Only Look Once)是当前最流行的实时目标检测算法系列之一,YOLOv11作为该系列的最新演进版本,继承了YOLO家族高效、快速的特点,同时在精度和速度…...
使用MATIO库写入MATLAB结构体(struct)数据的示例程序
使用MATIO库写入MATLAB结构体(struct)数据的示例程序 MATIO是一个用于读写MATLAB数据文件(.mat)的开源C库。下面是一个完整的示例程序,展示如何使用MATIO库创建一个包含结构体数据的MAT文件。 示例程序 #include <stdio.h> #include <stdlib.h> #inc…...
【大模型深度学习】提示学习:Prefix tuning 、P-tuning v2、P-tuning 到底有什么区别?
Prefix tuning 、P-tuning v2、P-tuning还在傻傻分不清。 到底有什么区别,本文希望说明白这些区别,如有错误欢迎指出。 一、为什么需要提示学习? 从全参微调到参数高效微调(PEFT),这些微调方法的思想都是重新训练模…...
多周期多场景的供应链优化问题 python 代码
这段代码是一个使用 Gurobi 优化器的混合整数规划(MIP)模型,用于解决一个多周期多场景的供应链优化问题。代码定义了一个名为 `MCCG` 的类,该类包含了多个方法,用于构建和解决主问题(Master Problem)、子问题(Subproblem)和子子问题(Sub-subproblem)。下面是对代码中…...
CCF GESP Python编程 一级认证真题 2025年3月
Python 一级 2025 年 03 月 题号 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 答案 D D B D D C B D C A B D C A A 一、单选题(每题 2 分,共 30 分) 第 1 题 2025年春节有两件轰动全球的事件,一个是DeepSeek横空出世,另一…...
python爬虫爬取淘宝热销(热门)男装商品信息(课程设计;提供源码、使用说明文档及相关文档;售后可联系博主)
TOC 本文仅为记录学习轨迹,如有侵权,联系删除 一、环境说明 使用前必须检查以下环境 (1)python编译环境 (2)python脚本执行所需要的库,具体看代码(main.py)import导入的部分库 &a…...
AntDesign下,Select内嵌Menu标签,做一个多选下拉框,既可以搜索,还可以选择下拉项
话不多说,直接上效果和代码 效果图一: 效果图二: renderAddStyleOption (item: any) > {const { value } this.props;const { currentSelectedOptionIds, currentStyleId } this.state;const styleSettings value?.styleSettings;c…...