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 适合于读少写多的场景。

Last updated