java copy-on-write_Copy on write 机制

Copy on write 思想:

1) redis RDB机制的优化

redis 提供了类似于 snapshot+commitlog的方式,对应叫做RDB 和aof

RDB在做快照的时候,需要考虑到性能和内存使用。

比如在时间t,redis 有1G的数据,redis 会新开一个 fork 子进程

主进程对外提供服务,由子进程拷贝数据到文件。

子进程使用了linux 的 copy on write 机制。

让主进程和子进程 共享1G的内存数据。如果没有写操作,不需要额外的空间。

如果有写操作,read-only的这段内存就会发生page-fault, 子进程处理这个异常,只拷贝对应的数据

做到一个按需拷贝的机制,大大节省内存。

2) 在java中也有一个 copy-on-write 的 集合 CopyOnWriteArrayList

这是一种多线程优化技术,读的时候不加锁。

写的时候,加锁拷贝一份数据集,修改内容;但是同时开放读操作。对于一些读多写少的数据,这种做法的确很不错。

缺点是,拷贝期间读取老数据,拷贝的是整个数据集,如果数据集比较大,会占用额外内存,可能触发GC。

相比而言,linux底层实现的copy on write 机制则是优秀的多,因为只需要拷贝 page-fault的那一页。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值