JVM学习笔记20-内存结构,内存回收和空间分配担保

【Java面试整理之JVM】深入理解JVM结构、类加载机制、垃圾回收GC原理、JVM内存分配策略、JVM内存泄露和溢出 一、前言最近要准备找工作,JVM肯定是跑不掉的面试内容,所以把JVM相关的内容拿来认真学习一遍,整理成自己能够快速消化的提纲,方便随时可以调用。主要分JVM结构、类加载机制、垃圾回收GC原理、JVM内存分配策略 四个方面展开。二、JVM结构JVM的内部结构直接贴图: 各部分的主要功能: 类加载器 JVM启动,程序开始执行时,负责将class字节码加载到JVM内存区域中 执行引擎 负责 阅读详情

1.内存结构

如下图所示
JVM内存结构

  1. 堆上分配
    大多数情况在Eden上分配,偶尔直接在Old上分配
    其细节取决于GC的实现
  2. 栈上分配
    原子类型的局部变量

2 内存回收

2.1 引用类型

GC要做的是将那些消亡对象所占用的内存回收掉

  • Hotspot认为没有引用的对象是消亡的
  • Hotspot将引用分为四种
    • Strong—强引用
      即默认通过Object obj = new Object这种方式赋值的引用
    • Sotf—软引用
    • Weak—弱引用
    • Phantom—虚引用

Sotf,Weak,Phantom这个三种都是继承Reference

2.1 内存回收

在Full GC会对Reference类型的引用进行特殊处理

  • Soft—内存不够时一定会被GC,长期不用一定会被GC
  • Weak—一定会被GC,当标记为消亡时,会在ReferenceQueue中通知
  • Phantom—本来就没引用,当前JVM 堆中释放时会通知

3 空间分配担保

在发生Minor GC之前,虚拟机会先检查老年代最大可用的连续空间是否大于新生代所有对象的总空间,如果这个条件成立,那么Minor GC可以确保是安全的

当大量对象在Minor GC后仍然存活,就需要老年代进行空间分配担保,把Survivor无法容纳的对象直接进入老年代

如果老年代判断剩余空间不足(根据以往每一次回收晋升到老年代对象容量的平均值作为经验),则进行一次Full GC

JVM内存分配担保机制 目录 担保机制 案例1:新生代无法分配内存,晋升到老年代,且担保成功 结果1:使用Serial收集器 结果2:使用ParallelScavenge收集器 案例2:Parallel Scavenge晋升条件:当需要分配的内存小于等于Eden区内存的一半,就有可能让Eden区现有的对象晋升到老年代 结果 FullGC(Ergonomics) Parallel Scavenge的执行入口 Ergonomics的值 再看【need_full_gc】的值 进入【should_full... 阅读详情

相关推荐

JVM系列之内存分配与回收策略

前言 经过前面几篇文章,我们已经对JVM虚拟机有了个初步认识,也了解了各区域应用哪些收集器,以及每个收集器用哪些收集算法,但是在这一系列过程中,其实就是一个对象的由生到死的过程,那么在这过程中对象是怎么处理它的生命周期的呢,今天我们就来介绍下对象在内存中的分配和回收分配给对象的内存,那么,让我们带着愉快的周末心情来开启今天的JVM之旅吧。 内存分配 内存分配,通俗讲就是对象在堆上分配:对象主要分配在新生代的Eden区上,如果启动了本地线程分配缓冲,将按线程优先在TLAB上分配。少数对象也可能直接.

吭哧吭哧快乐的小牛码 2万+

深入理解jvm-CMS垃圾回收器

本文参考圣思园张龙深入理解jvm CMS收集器 CMS收集器:https://www.cnblogs.com/webor2006/p/11055468.html 介绍和优缺点 Concurrent 并发:垃圾收集的线程可以跟用户的执行线程同时执行,也非绝对。 而标记哪些对象是存活的,哪些对象是可以回收的。 CMS,以获取最短的回收停顿时间为目标,是一款基于“标记—清除”算法实现的...

zz133110的博客 1270

新生代的内存回收机制和空间分配担保

新生代的内存回收机制和空间分配担保新生代内存回收机制空间分配担保 新生代内存回收机制 对象被创建时,内存的分配首先发生在新生代(大对象可以直接被创建在老年代,可以设置JVM参数来确定多大的对象可以直接被创建在老年代),大部分的对象在创建后很快就不再使用,因此很快变得不可达,于是被新生代的GC机制清理掉(IBM的研究表明,98%的对象都是很快消亡的),这个GC机制被称为Minor GC或叫Young GC。 注意,Minor GC并不代表新生代内存不足,它事实上只表示在Eden区上的GC,表示的应该仅是Ede

weixin_44481891的博客 577

JVM空间分配担保(失败担保机制)

在发生Minor GC之前,虚拟机会先检查老年代最大可用的连续空间是否大于新生代所有对象总空间。如果这个条件成立,那么Minor GC可以确保是安全的。如果不成立,则虚拟机会查看HandlerPromotionFailure设置是否允许担保失败。如果允许,那么会继续检查老年代最大可用的连续空间是否大于历次晋升到老年代对象的平均大小。如果大于,将尝试着进行一次Monitor GC,尽管这次GC是有风...

varyall的专栏 9746

GD32F470实战:如何用EXMC+SDRAM搞定LVGL大内存需求(附完整代码)

本文详细介绍了如何在GD32F470微控制器上通过EXMC接口驱动外部SDRAM,以满足LVGL图形库的大内存需求。内容涵盖硬件连接、EXMC时序配置、轻量级内存管理器实现,以及将LVGL帧缓冲和资源无缝集成到SDRAM的实战方法,并提供了完整的代码示例和调试技巧,帮助开发者构建稳定可靠的嵌入式GUI系统。

k9l0m1的博客 442

统信UOS下获取root权限的两种姿势:图形化开启开发者模式 vs 命令行直接提权

本文详细解析了统信UOS下获取root权限的两种方法:通过图形界面永久开启开发者模式和使用命令行临时提权。开发者模式适合系统级开发,提供完整root权限但降低安全性;临时提权则更灵活,适合日常管理任务。文章还对比了两种方案的优缺点,帮助用户根据需求选择最佳权限管理策略。

weixin_30266885的博客 515

深入理解JVM内存空间的担保策略

本文将介绍 jvm中垃圾回收(GC)时空间担保策略是如何执行的

一名后端程序猿 3516

Vue3多级路由缓存失效的深度解析与实战解决方案

本文深度解析了Vue3项目中多级路由嵌套下keep-alive缓存失效的根本原因,并提供了三种实战解决方案。通过剖析组件树、router-view与keep-alive的协作机制,揭示了缓存无法穿透多层router-view的技术本质。文章对比了路由扁平化重构、状态管理配合路由守卫以及使用社区插件等方案的优缺点与适用场景,为开发者解决这一常见难题提供了清晰的选型指导。

weixin_29001423的博客 271

【编程底层思考】什么是JVM对象内存分配的空间分配担保,咋担保的?

JVM对象内存分配的空间分配担保,该机制主要用于新生代垃圾收集MinorGC和老年代垃圾收集MajorGC或FullGC之间的协调,以避免出现内存不足的情况。是一种确保在进行垃圾收集GC时,有足够空间处理对象晋升和分配的策略。具体来说,空间分配担保机制的工作原理如下。

Dylaniou的博客 1078

告别硬件!用Wokwi在线模拟ESP32点灯,5分钟搞定开发环境搭建

本文介绍如何使用Wokwi在线模拟器快速搭建ESP32开发环境,5分钟内完成点灯实验。无需硬件即可体验GPIO控制、PWM调光等核心功能,特别适合物联网开发初学者和快速原型验证。Wokwi的零成本、全功能模拟特性让嵌入式开发变得前所未有的简单高效。

weixin_42567497的博客 495

OpenMV识别颜色源码

【代码】OpenMV识别颜色源码。

dxt258013的博客 403

Java核心篇之JVM探秘:对象创建与内存分配机制

Java虚拟机(JVM)是Java语言的核心组件之一,负责执行Java字节码。在JVM中,对象的创建和内存管理是一个复杂而精细的过程,涉及多个阶段和多种策略。本文将深入探讨JVM中的对象创建流程、内存分配机制以及它们如何影响程序性能。JVM中对象的创建和内存分配是一个多步骤、多策略的过程,涉及类加载、内存布局、垃圾回收等多个层面。理解和优化这一机制对于提升Java应用程序的性能至关重要。通过合理的设计和编码实践,我们可以最大限度地发挥JVM的优势,构建高效稳定的应用系统。

小码农的博客 3157

【2025年华为秋招(AI)-11月19日-第二题(200分)- 终端款型聚类识别】(题目+思路+Java&C++&Python解析+在线测试)

该摘要总结了题目要求、输入输出格式、KMeans算法的实现步骤以及关键点。以下是150字内的摘要: 本文提出基于KMeans算法对终端型号进行聚类的方法。通过包间隔时长、连接持续时长、漫游前后信号强度4个特征,使用欧氏距离度量相似度。算法采用固定初始化策略(前k个样本作为初始质心),经过分配-更新迭代,直至质心移动小于1e-8或达到最大迭代次数。最终输出各簇样本数并按升序排列,解决了终端型号自动分类问题。示例显示该方法能有效识别3-4类终端,并准确统计每类数量。

m0_73659489的博客 141

JVM-内存分配与回收策略

JVM 规范中运行时数据区域中的方法区,在 HotSpot 虚拟机中也称为永久代(Permanet Generation),存放一些类信息、常量、静态变量等数据,当系统要加载的类、反射的类和调用的方法较多时,永久代可能会被占满,会触发 Full GC。值是否设置为允许担保失败, 如果是,那么会继续检查老年代最大可用的连续空间是否大于历次晋升到老年代对象的平均大小, 如果大于,将尝试进行一次 Minor GC,尽管这次 Minor GC 是有风险的;, 如果这个条件成立,Minor GC 可以确保是安全的;

Dc253061007的博客 1020

【Simulink教程案例7】基于Simulink的滑模控制器设计与实现

欢迎订阅滑膜控制是一种变结构控制策略,其和常规控制方法的主要区别在于控制的不连续性,即一种使系统结构随时间变化的开关特性。所以,滑膜控制器也叫做变结构控制器,其本质是一类特殊的非线性控制器,并且这种非线性为不连续性。滑膜控制器和其他控制方式最大的区别在于其结构的不固定性,在其工作过程中,系统当前的状态会发生变化,使得系统按照预先设置的“滑动模态”的状态轨迹运动。正是由于这个特点,滑膜控制器具有快速响应的优点。滑模控制的基本定义如下所示:1).穿越切换面上的某个点;2).从切换面上的某个点离开;

FPGA/MATLAB学习教程/源码/项目合作开发 3240

图像修复的万能模型:用Instruct-IPT统一解决去雨、去雾、去模糊三大难题

从原理到实战,你已经掌握了Instruct-IPT的核心逻辑和使用方法。它不仅能一站式解决多种图像退化问题,还能通过文本指令灵活控制,是图像恢复领域的“多面手”。现在,不妨找几张有雨雪、雾霾、模糊问题的图像,用Instruct-IPT亲手试试效果。当你看到模糊的图像变得清晰,被雨雾遮挡的细节重新浮现时,你会真切感受到这项技术的魅力。后续还可以尝试调整文本指令的描述方式,看看模型的响应有什么变化——探索的过程,就是你技术进阶的最好见证。

m0_71589036的博客 227

空间分配担保机制

空间分配担保机制是 JVM 中确保垃圾回收过程中有足够空间处理对象晋升和分配的重要策略。通过合理配置相关参数,可以优化垃圾回收行为,避免频繁的 Full GC,提升应用的性能和稳定性。理解和调优空间分配担保机制,有助于更好地管理 JVM 内存,提高 Java 应用的效率。

m0_54187478的博客 2443

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Java 入门指南:JVM(Java虚拟机)垃圾回收机制 —— 内存分配和回收规则

垃圾回收(Garbage Collection,GC),顾名思义就是释放垃圾占用的空间,当需要排查各种内存溢出问题、当垃圾收集成为系统达到更高并发的瓶颈时,我们就需要对这些“自动化”的技术实施必要的监控和调节。有效的使用可以使用的内存,对内存堆中已经死亡的或者长时间没有使用的对象进行清除和回收。

热带鱼的技术博客 2056

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

jvm学习之空间分配担保机制

JVM空间分配担保机制定理定义整理笔记 JVM使用分代收集算法,将堆内存划分为年轻代、年老代 分别采取不同的垃圾回收算法 空间担保值得是老年的进行空间分配担保 空间分配担保概念: 在发生Minor GC之前,虚拟机会检测老年代最大可用的连续空间是否大于新生代的所有对象的总空间。 大于->此次Minor GC (young GC) 是安全的 ...

ccmedu的博客 1500

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

垃圾回收器、垃圾回收算法、空间分配担保、JVM调优、GC回收对象的过程

一个对象的GC年龄,是存储在对象头里面的,一个Java对象在JVM内存中的布局由三个部分组成,分别是对象头、实例数据、对齐填充。而对象头里面有4个bit位来存储GC年龄。4个bit位能够存储的最大数值是15,所以从这个角度来说,JVM分代年龄之所以设置成15次是因为它最大能够存储的数值就是15。虽然JVM提供了参数来设置分代年龄的大小,但是这个大小不能超过15。从设计角度来看,当一个对象触发了最大值15次gc,还没有办法被回收,就只能移动到old generation了。

我是Java程序员廖志伟,感谢朋友们的支持! 718

【jvm】空间分配担保策略

1.如果老年代的空间不足以容纳新生代中晋升的对象,JVM会触发一次Full GC来回收老年代的空间,以确保有足够的空间来进行下一次Minor GC。1.在Java虚拟机(JVM)中,空间分配担保策略是一种关键的内存管理机制,它确保在进行垃圾收集(GC)时,有足够的空间来处理对象的晋升和分配。2.如果老年代的可用连续空间大于新生代所有对象的总大小或历次晋升的平均大小,那么这次Minor GC就是安全的,不会触发Full GC。2.较高的阈值可以减少对象晋升,但会增加新生代的GC频率。

王佑辉的博客 1058
上一篇: JVM学习笔记19-常见GC算法
下一篇: JVM学习笔记22-Java内存泄露的经典原因
L.T.F.
博客等级 码龄14年 2粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值