判断空闲内存
根据内存是否规整使用不同的方法
内存规整:指针碰撞
在空闲区域,按照分配顺序一个接着一个往后排。常用于自带内存整理的垃圾收集器。
内存不规整:空闲列表
虚拟机会维护一个空闲内存列表,会把对象分配到空闲的内存上。
空闲列表的优化
在CMS的实现里面,为了能在多数情况下分配得更快,设计了一个叫作Linear Allocation Buffer的分配缓冲区,通过空闲列表拿到一大块分配缓冲区之后,在它里面仍然可以使用指 针碰撞方式来分配。
多个线程同时争抢一个内存位置
CAS方式
如果分配内存失败重试
TLAB
为每个线程在堆划分一个私有区域,当私有区域用完后,在公共区域使用CAS方式。