对象的创建在虚拟机中是一个非常频繁的行为,哪怕只是修改一个指针所指向的 位置,在并发情况下也
是不安全的,可能出现正在给对象 A 分配内存,指针还 没来得及修改,对象 B 又同时使用了原来的指针来分配内存的情况。解决这个 问题有两种方案:对分配内存空间的动作进行同步处理(采用 CAS + 失败重试来保障更新操作的 原子性);把内存分配的动作按照线程划分在不同的空间之中进行,即每个线程在 Java 堆 中预先分配一小块内存,称为本地线程分配缓冲(Thread Local Allocation Buffer, TLAB)。哪个线程要分配内存,就在哪个线程的 TLAB 上分配。只有 TLAB 用完并 分配新的 TLAB 时,才需要同步锁。通过-XX:+/-UserTLAB参数来设定虚拟机是否使 用TLAB。
处理并发安全问题
最新推荐文章于 2024-01-17 15:43:32 发布