在 Java 中,堆内存(Heap)是所有线程共享的区域。当多个线程同时在堆上分配对象时,如果不进行控制,就会出现两个线程同时使用同一块内存地址的指针碰撞(并发冲突)问题。 为了在保证线程安全的同时最大化分配效率,JVM 主要采用了两种核心机制来解决这个问题:TLAB(本地线程分配缓冲) 和 CAS(Compare-And-Swap)搭配失败重试。 以下是详细的解析: 1. 第一道防线:TLAB(Thread Local Allocation Buffer) 这是 JVM 解决对象分配并发冲突最主要、最高效的手段。 核心思想(空间换时间): 把共享的堆内存“私有化”。JVM 在 Eden 区为每个线程预先分配一小块私有的内存区域,这就是 TLAB。 如何保证安全: 因为每个线程只能在自己的 TLAB 中分配对象,线程之间互不干扰,所以在这个小区域内分配对象时,完全不需要加锁。 分配方式: 采用指针碰撞(Bump the Pointer)。只需要记录 TLAB 的起始地址和当前分配到的指针位置,分配新对象时,把指针往后移动对象大小的距离即可,速度极快。 相关配置: TLAB 默认是...