Netty学习05- Netty对锁的使用优化和对内存的使用优化

学习第18-20节

同步问题的核心三要素:原子性、可见性、有序性
锁的分类:
乐观锁(java.util.concurrent 包中的原子类)与悲观锁(Synchronized)
公平锁 new ReentrantLock (true)与非公平锁 new ReentrantLock ()
共享锁与独享锁:ReadWriteLock ,其读锁是共享锁,其写锁是独享锁

Netty从以下几个方面优化锁的使用:

Netty减少锁的对象和范围,减少锁的粒度(比如把Synchronized加到代码块而不是方法上)。
Netty减少锁对象本身的大小,减少空间占用(比如自住实现volatile的long而不是AtomicLong)。
Netty提供锁的速度,提高并行性。(比如根据jdk版本区分使用的类)。
Netty根据不同场景选择不同的并发包,因需而变。
Netty很好的衡量好锁的价值,能不用则不用锁(局部串行 + 整体并行 > 一个队列 + 多个线程模式),这样的好处是:
(1)降低用户开发难度、逻辑简单、提升处理性能
(2)避免锁带来的上下文切换和并发保护等额外开销
Netty避免用锁:用 ThreadLocal 来避免资源争用,例如 Netty 轻量级的线程池实现io.netty.util.Recycler#threadLocal
Netty学习05- Netty对锁的使用优化和对内存的使用优化

Netty从以下几个方面优化对内存的使用:

1、减少对像本身大小:尽量定义类变量而非实例变量,
2、对分配内存进行预估:预知固定size避免HashMap扩容
3、Zero-Copy:使用逻辑组合、包装以及JDK的zero-copy接口,代替实际复制
4、使用堆外内存(堆heap,非堆non heap,堆外off heap)
5、使用内存池(引入对象池,开源实现Apache Commons Pool,Netty自实现轻量级内存池)

Netty中切换堆内外内存的方法
Netty学习05- Netty对锁的使用优化和对内存的使用优化
Netty中切换内存池的方法
Netty学习05- Netty对锁的使用优化和对内存的使用优化
注:内容参考极客时间相关课程