jvm对象内存划分

额外概念了解

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

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

1、指针碰撞

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

2、空闲列表

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

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

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

相关推荐
瀚高PG实验室19 小时前
瀚高数据库V9.0.5数据脱敏完整配置步骤
jvm·数据库·postgresql·瀚高数据库
阿里云基础软件20 小时前
一句话看透 JVM,SysOM 诊断 Skill 新增 Java 应用诊断能力
java·开发语言·jvm·人工智能·操作系统·sysom 诊断 skill
wuminyu21 小时前
Kafka的写入延迟与磁盘IO抖动原理分析
java·linux·c语言·jvm·c++
fallwind_of_july21 小时前
JVM 频繁 Full GC 排查思路:从原理到工具实战
jvm
写后端的胖头鱼21 小时前
一文讲懂JVM与调优
jvm·后端·算法·架构·jvm调优
StayInLove2 天前
JVM 内存问题排查方法论
jvm
wuminyu2 天前
Kafka利用sendfile与Page Cache实现高性能传输剖析
java·linux·c语言·jvm·c++
my_realmy2 天前
Java 基础面试笔记(二):JDK、JRE、JVM、JIT 与 JAR
jvm·虚拟机·jit·特性·jre·垃圾回收机制
Nuanyt2 天前
JUC常见核心知识梳理01 线程 并发 JMM volatile 管程 锁 synchronized
java·开发语言·网络·jvm
CodeStats2 天前
【Java 类加载器】Java 类加载器完整体系深度拆解(中):URLClassLoader 能力剖析与继承委派辨析
java·jvm·classloader·类加载器