CopyOnWriteArrayList

CopyOnWrite容器即写时复制的容器,当我们往⼀个容器中添加元素的时候,不直接往容器中添加,⽽是将当前容器进⾏copy,复制出来⼀个新的容器,然后向新容器中添加我们需要的元素,最后将原容器的引⽤指向新容器,这个过程中是使用ReentrantLock加锁了的。这样做的好处在于,我们可以在并发的场景下对容器进⾏"读操作"⽽不需要"加锁",从⽽达到读写分离的⽬的。

优点: CopyOnWriteArrayList经常被⽤于“读多写少”的并发场景,是因为CopyOnWriteArrayList⽆需任何同步措施,⼤⼤增强了读的性能。在Java中遍历线程⾮安全的List(如:ArrayList和 LinkedList)的时候,若中途有别的线程对List容器进⾏修改,那么会抛出ConcurrentModificationException异常。CopyOnWriteArrayList由于其"读写分离",遍历和修改操作分别作⽤在不同的List容器,所以在使⽤迭代器遍历的时候,则不会抛出异常。
缺点: 第⼀个缺点是CopyOnWriteArrayList每次执⾏写操作都会将原容器进⾏拷⻉了⼀份,数据量⼤的时候,内存会存在较⼤的压⼒,可能会引起频繁FullGC(ZGC因为没有使⽤Full GC)。⽐如这些对象占⽤的内存⽐较⼤200M左右,那么再写⼊100M数据进去,内存就会多占⽤300M。第⼆个缺点是CopyOnWriteArrayList由于实现的原因,写和读分别作⽤在不同新⽼容器上,在写操作执⾏过程中,读不会阻塞,但读取到的却是⽼容器的数据。

posted @   云哲  阅读(9)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· winform 绘制太阳,地球,月球 运作规律
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示