Notes
Search…
⌃K

Copy-on-Write

不可变对象的写操作一般用 Copy-on-Write(写时复制)技术解决,比如 String
之前介绍的 CopyOnWriteArraySetCopyOnWriteArrayList 的设计思想也是写时复制。
除了 Java,在其它领域也广泛应用了写时复制。比如:
  • Unix 下创建进程的 API fork()
  • 文件系统 Btrfs(B-Tree File System)、aufs(advanced multi-layered unification system)等。
  • Docker 容器镜像。
  • 分布式源码管理系统 Git。
  • 函数式编程领域。
函数式编程的基础是不可变性,所以函数式编程的修改操作都需要 Copy-on-Write。
Copy-on-Write 适用于读多写少的场景,这也是为什么 Java 没有 CopyOnWriteLinkedList 实现,因为 LinkedList 适合于读少写多的场景。