jvm对象内存划分

额外概念了解

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

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

1、指针碰撞

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

2、空闲列表

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

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

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

相关推荐
Access开发易登软件2 小时前
Access 用 VBA 操作 SQLite,不用装任何驱动
jvm·数据库·sqlite·vba·access·access开发
Niyy_2 小时前
WASM 的使用笔记
jvm·笔记·wasm
小L写Java2 小时前
第六章:JVM 调优实战 —— GC日志分析、内存溢出排查与线上问题定位
java·jvm
小江的记录本5 小时前
【JVM虚拟机】类加载机制:类加载器、双亲委派模型、好处、破坏双亲委派的场景(附《思维导图》+《面试高频考点清单》)
java·jvm·spring boot·后端·python·spring·面试
Devin~Y5 小时前
智慧物流+AIGC客服Java大厂面试:Spring Boot、Kafka、Redis、JVM与RAG Agent实战
java·jvm·spring boot·redis·spring cloud·kafka·rag
码上有光6 小时前
c++:多态
java·jvm·c++·多态·多态原理
搜佛说6 小时前
sfsDb 和 SQLite、InfluxDB “硬碰硬”的底层性能与技术架构对比
jvm·架构·sqlite
Javatutouhouduan6 小时前
普通Java程序员如何高效学习JVM?
java·jvm·java虚拟机·java面试·后端开发·java编程·java八股文
仙俊红6 小时前
事务消息是什么
jvm·数据库·oracle
一只小白0007 小时前
【JVM | 第三篇】—— 类的生命周期 完整详解
jvm