什么是TLAB
从内存模型而不是垃圾收集的角度,对 Eden 区域继续进行划分,JVM 为每个线程分配了一个私有缓存区域,它包含在 Eden 空间内
多线程同时分配内存时,使用 TLAB 可以避免一系列的非线程安全问题,同时还能提升内存分配的吞吐量,因此我们可以将这种内存分配方式称为快速分配策略
为什么需要tlab
在jvm中堆区是共享的区域,一旦在并发环境下从堆中划分内存空间,就可能会遇到分配到同一个内存地址的问题,为了避免多个线程操作同一个地址,就需要使用加锁等机制,但这会影响分配速度,因此使用tlab可以避免在多线程分配内存时的非线程安全问题,同时还能提升内存分配的吞吐量。
尽管不是所有的对象实例都能在tlab中成功分配,但jvm确实是将tlab作为内存分配的首选项,一旦分配失败,jvm就会尝试着通过使用加锁机制确保数据操作的原子性,从而直接在Eden空间中分配内存。
常见问题
1、tlab跟java程序的多线程控制什么关系,java程序在多线程环境下不控制线程安全也可以最终线程安全吗?
答:跟java代码中的多线程安全无关系,这里只是指多线程下在堆空间中对对象的内存分配安全问题。
2、为什么多线程环境下分配内存会出现线程安全问题?
Java 程序会极其频繁的创建对象并为对象分配内存空间,