10、网络通信优化之通信协议:如何优化RPC网络通信

你好,我是刘超。今天我将带你了解下服务间的网络通信优化。 上一讲中,我提到了微服务框架,其中SpringCloud和Dubbo的使用最为广泛,行业内也一直存在着对两者的比较,很多技术人会为这两个框架哪个更好而争辩。 我记得我们部门在搭建微服务框架时,...

Java性能调优实战

11、答疑课堂:深入了解NIO的优化实现原理

你好,我是刘超。专栏上线已经有20多天的时间了,首先要感谢各位同学的积极留言,交流的过程使我也收获良好。 综合查看完近期的留言以后,我的第一篇答疑课堂就顺势诞生了。我将继续讲解I/O优化,对大家在08讲中提到的内容做重点补充,并延伸一些有关...

Java性能调优实战

12、多线程之锁优化(上):深入了解Synchronized同步锁的优化方法

你好,我是刘超。从这讲开始,我们就正式进入到第三模块——多线程性能调优。 **在并发编程中,多个线程访问同一个共享资源时,我们必须考虑如何维护数据的原子性。**在JDK1.5之前,Java是依靠Synchronized关键字实现锁功能来做到这点的。S...

Java性能调优实战

13、多线程之锁优化(中):深入了解Lock同步锁的优化方法

你好,我是刘超。 今天这讲我们继续来聊聊锁优化。上一讲我重点介绍了在JVM层实现的Synchronized同步锁的优化方法,除此之外,在JDK1.5之后,Java还提供了Lock同步锁。那么它有什么优势呢? 相对于需要JVM隐式获取和释放锁的Sync...

Java性能调优实战

14、多线程之锁优化(下):使用乐观锁优化并行操作

你好,我是刘超。 前两讲我们讨论了Synchronized和Lock实现的同步锁机制,这两种同步锁都属于悲观锁,是保护线程安全最直观的方式。 我们知道悲观锁在高并发的场景下,激烈的锁竞争会造成线程阻塞,大量阻塞线程会导致系统的上下文切换,增加系统的性...

Java性能调优实战

15、多线程调优(上):哪些操作导致了上下文切换

你好,我是刘超。 我们常说“实践是检验真理的唯一标准”,这句话不光在社会发展中可行,在技术学习中也同样适用。 记得我刚入职上家公司的时候,恰好赶上了一次抢购活动。这是系统重构上线后经历的第一次高并发考验,如期出现了大量超时报警,不过比我预料的要好一点...

Java性能调优实战

16、多线程调优(下):如何优化多线程上下文切换

你好,我是刘超。 通过上一讲的讲解,相信你对上下文切换已经有了一定的了解了。如果是单个线程,在 CPU 调用之后,那么它基本上是不会被调度出去的。如果可运行的线程数远大于 CPU 数量,那么操作系统最终会将某个正在运行的线程调度出来,从而使其它线程能...

Java性能调优实战

17、并发容器的使用:识别不同场景下最优容器

你好,我是刘超。 在并发编程中,我们经常会用到容器。今天我要和你分享的话题就是:在不同场景下我们该如何选择最优容器。 并发场景下的Map容器假设我们现在要给一个电商系统设计一个简单的统计商品销量TOP 10的功能。常规情况下,我们是用一个哈希表来存储...

Java性能调优实战

18、如何设置线程池大小

你好,我是刘超。 还记得我在16讲中说过“线程池的线程数量设置过多会导致线程竞争激烈”吗?今天再补一句,如果线程数量设置过少的话,还会导致系统无法充分利用计算机资源。那么如何设置才不会影响系统性能呢? 其实线程池的设置是有方法的,不是凭借简单的估算来...

Java性能调优实战

19、如何用协程来优化多线程业务

你好,我是刘超。 近一两年,国内很多互联网公司开始使用或转型Go语言,其中一个很重要的原因就是Go语言优越的性能表现,而这个优势与Go实现的轻量级线程Goroutines(协程Coroutine)不无关系。那么Go协程的实现与Java线程的实现有什么...

Java性能调优实战