티스토리 뷰

SW개발/Java

Copy-On-Write Collection

개소왕 2018. 12. 18. 20:56

컬렉션의 데이터를 변경하는 작업시 내부적으로 복사본을 하나 더 만들어 작업하는 방식


iterate 중에 add/remove 수행하면 


- 비동기화 컬렉션의 경우 ConcurrentModificationException 을 발생시키고


- 동기화 컬렉션의 경우 락을 걸어 쓰레드가 동시접근 할 수 없도록 구현한다.


- 반면 Copy-on-write 방식은

iterate 진행중에 add 를 수행하면

동일한 데이터 복사본을 만들어 여기에 작업한다.

iterate 는 add 되기 전 데이터 원본 대상으로 진행되며, 작업이 끝나면 사라진다.

최종적으로 add 된 데이터 복사본만 남게된다.


두 명령 실행시점의 데이터를 별도로 가지고 있으니

락을 걸필요도 없고, 동시 접근에 의한 오류도 발생하지 않는다.

하지만 복사본을 생성하므로 성능에 문제가 된다.

따라서 크기가 작고, 반복읽기가 많은 데이터에 적합하며, 추가 삭제가 많다면 성능이 떨어짐.


* 자바에서 java.util.concurrent 패키지에

CopyOnWriteArraySet

CopyOnWriteArrayList

를 제공한다.


* 참고

http://enjoyjava.tistory.com/entry/Java-Collection-Framework-Overview

https://talkingaboutme.tistory.com/451

https://aroundck.tistory.com/867

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함