问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

高并发集合类之CopyOnWrite集合

发布网友 发布时间:2022-12-10 07:01

我来回答

1个回答

热心网友 时间:2024-03-10 17:53

       集合在高并发情况下读写时,是要加锁的,不管对锁多么优化,肯定不如不加锁的效率高,这是毋庸置疑的。

       CopyOnWrite容器即写时复制的容器,常用CopyOnWriteArrayList和CopyOnWriteArraySet,这种容易设计原理是当我们往一个容器添加或修改或删除元素的时候,不直接往当前容器添加,而是先将当前容器进行Copy,复制出一个新的容器,然后新的容器里添加元素,添加完元素之后,再将原容器的引用指向新的容器。CopyOnWrite容器也是一种读写分离的思想,读和写不同的容器。

这种情景下,优点是对该集合的读就可以抛弃锁的*,极大地提高读效率,但它也有明显的缺点,就是

       内存占用问题 。因为CopyOnWrite的写时复制机制,所以在进行写操作的时候,内存里会同时驻扎两个对象的内存,旧的对象和新写入的对象(注意:在复制的时候只是复制容器里的引用,只是在写的时候会创建新对象添加到新容器里,而旧容器的对象还在使用,所以有两份对象内存)。如果这些对象占用的内存比较大,比如说200M左右,那么再写入100M数据进去,内存就会占用300M,那么这个时候很有可能造成频繁的Yong GC和Full GC。之前我们系统中使用了一个服务由于每晚使用CopyOnWrite机制更新大对象,造成了每晚15秒的Full GC,应用响应时间也随之变长。

   两个例子程序,运行时间长+内存占用大(进行了一次垃圾回收)

数据一致性问题 。CopyOnWrite容器只能保证数据的最终一致性,不能保证数据的实时一致性。所以如果你希望写入的的数据,马上能读到,请不要使用CopyOnWrite容器。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
2019哈尔滨煤气费怎么有税? 快手删除的作品如何恢复 体育理念体育理念 有关体育的格言和理念 什么是体育理念 万里挑一算彩礼还是见面礼 绿萝扦插多少天后发芽 绿萝扦插多久发芽 扦插绿萝多久发芽 炖牛排骨的做法和配料 Java中,什么是CopyOnWrite容器? 给环卫工人感谢信 学习次时代用到ZB了,怎么雕都是不很满意,怎样才能进步啊? 如何使初中英语课堂生动有趣 先锋c1手机怎么开不了机 为什么苹果11更新王者荣耀更新到73就不更新了 欢乐颂小美识破王柏川什么真相 谁扮演的 欢乐颂2王柏川扮演者个人资料介绍 ...北风吹雪四更初 嘉瑞天教及岁除 半盏屠苏犹未举 灯前小草写桃符 的... 暗黑三夺魂之镰野蛮人70级后双持天赋怎么加 东京食尸鬼第二季这魔性的主题曲是什么意思?不是一般的诡异.. 求东方神起《I don’t know》韩文版音译歌词 3、 简述在Microsoft Windows XP平台组建的局域网中,访问网络共享资源的... 急!怎么在XP平台上删除另一个管理员? 这次的xp挑战平台有意义么? XP挑战平台为啥只有金山、腾讯 、360参加啊? xp恢复平台使用问题 xp挑战平台的有关报道 xp挑战平台是什么? mⅰlk中文是什么化妆品 java copyonwritearray 线程安全吗 为什么多线程一个socket使用后,socket句柄会发生改变 经常用夹板一次性拉头发会不会掉头发 驮能组什么词语 给百里守约出什么辅助 这三种英雄最配百里 孩子叛逆期是几岁 家长怎样教育叛逆期的孩子 孩子的叛逆期是从几岁开始的呢?面对叛逆期的女孩,父母应该如何教育? 孩子叛逆期怎么管教 孩子叛逆期是多大年龄 丁香的药理作用是什么 德语翻译:汉译德一句 fire on sb 和fire at sb 区别 有fire on-the-go这种用法吗? held fire on 农村学校安全工作总结 onfire能用什么时态 罗技g502无线鼠标怎么看电量 外星人鼠标电量怎么看 四个关于林黛玉的故事回目 求 红楼梦(前八十回) 中 黛玉的主要情节 林黛玉进贾府回目是哪几回?