垃圾回收会导致上下文切换
很多 JVM 垃圾回收器(serial 收集器、ParNew 收集器)在回收旧对象时,会产生内存碎片,从而需要进行内存整理,在这个过程中就需要移动存活的对象。而移动内存对象就意味着这些对象所在的内存地址会发生变化,因此在移动对象前需要暂停线程,在移动完成后需要再次唤醒该线程。因此减少 JVM 垃圾回收的频率可以有效地减少上下文切换。
Executors.newCachedThreadPool,只适合处理大量且耗时短的非阻塞任务。
竞争锁优化
1.减少锁的持有时间
同步的代码要尽量少。
2.降低锁的粒度
锁分离(读写锁);锁分段。
3.非阻塞乐观锁替代竞争锁
cas 代替 sync。