jvm对象内存划分

额外概念了解

**jvm内存空间是逻辑上连续的虚拟地址空间(虚拟内存中的概念)映射到物理内存(不一定连续),物理内存不足时还会将物理内存中的数据交换到swap(磁盘的一块区域)。**这块水有点深,查阅资料做了个个人的总结。

内存划分,有指针碰撞 和空闲列表这两种划分方式:

1、指针碰撞

当内存区域规整排列,也就是说已用内存放在一边,空闲内存放在一边,中间用指针作为分界点,在给新的对象分配内存时,可以将指针向空闲端移动对象大小的距离。碰撞是由于指多线程访问时,因内存共享,会存在内存冲突(指针碰撞)的情况,当然可以使用CAS和TLAB两种方式解决

2、空闲列表

当内存区域不规整排列,已用内存和空闲内存交错,此时无法通过指针碰撞划分内存,jvm通过维护一个空闲列表,用来记录空闲内存区间,新对象内存分配时,找到一块足够大的内存空间去分配,并更新空闲列表。

3、那么指针碰撞和空闲列表的使用时机是什么,或者说什么时候内存区域规整或者不规整呢?

不同GC垃圾回收器有不同垃圾回收算法,对于标记-整理算法,内存区域是规整的。而标记-清除算法,内存区域是不规整的。因此也验证了为何标记清除算法会产生内存碎片的问题。

相关推荐
自强的小白1 小时前
jvm面试(Gc)
服务器·jvm·面试
晚安code2 小时前
JVM 垃圾回收全流程拆解:可达性分析、四种算法与五种收集器选型
jvm
用户094248568032 小时前
第20章:JVM G1 GC原理、日志与调优实战
java·jvm
艾莉丝努力练剑4 小时前
【AI大模型接入SDK】ChatSDK 集成测试概述
jvm·c++·人工智能·学习·面试·集成测试·sdk
Joe_Wang55 小时前
【从0到1学习JVM · 14】堆内存各区域分工与Xms和Xmx设为一样的真相
java·jvm·学习·垃圾回收
HwJack205 小时前
【HarmonyOS开发小实践】HarmonyOS GC 引用计数 vs 对象追踪,三种回收算法
jvm·算法·harmonyos
_upupup18 小时前
异常(C++)
java·开发语言·jvm
老三牛擦1 天前
掌握数据结构及算法、计算机组成原理、操作系统、计算机网络和软件工程基础知识,践行Scrum敏捷开发理念
jvm
码上上班1 天前
k3s学习
jvm·学习
用户094248568032 天前
第18章:ConcurrentHashMap与并发容器实战
java·jvm