创建对象时的内存分配算法

判断空闲内存

根据内存是否规整使用不同的方法

内存规整:指针碰撞

在空闲区域,按照分配顺序一个接着一个往后排。常用于自带内存整理的垃圾收集器。

内存不规整:空闲列表

虚拟机会维护一个空闲内存列表,会把对象分配到空闲的内存上。

空闲列表的优化

在CMS的实现里面,为了能在多数情况下分配得更快,设计了一个叫作Linear Allocation Buffer的分配缓冲区,通过空闲列表拿到一大块分配缓冲区之后,在它里面仍然可以使用指 针碰撞方式来分配。

多个线程同时争抢一个内存位置

CAS方式

如果分配内存失败重试

TLAB

为每个线程在堆划分一个私有区域,当私有区域用完后,在公共区域使用CAS方式。

猜你喜欢

转载自blog.csdn.net/liha12138/article/details/106695850