前言
大量招聘岗位显示:如果是面试中高级的 Java 岗,基本上都需要懂性能优化的相关知识。今天,我们就一起来聊聊如何进行性能优化这个话题。开干!
性能优化都有哪些方面?
一、数据聚合优化
据聚合优化主要针对的是对于数据的整合和传输的优化。举个栗子:我们从数据库中查询出的数据,经过程序的聚合处理后再返回给客户端,而不用客户端调用多次接口来分别获取数据 再比如说:我们在项目中使用的Nginx,一般都会开启GZIP压缩,使传输的数据更加紧凑,同时,使传输的数据量更小
二、资源冲突优化
我们平时的工作中,尤其是在高并发的场景下,经常会出现锁冲突的问题,锁冲突是资源冲突的一个典型场景
于锁,我们可以联想到数据库的行锁、表锁等。如果对应到操作系统级别,则会有CPU命令级别的锁,操作系统内部的锁等
三、算法优化
一个大型的互联网项目中,往往涉及到分布式和微服务等技术,其中也会使用到大量的数据结构和算法,对于算法的优化能够显著的提高系统的性能。一个好的实现,相比于一个拙劣的实现来说,在系统性能的提升上存在着巨大的差异 所以,我们需要在平时工作过程中,多多积累数据结构和算法的相关知识
四、复用优化
这个名字看就知道是可以重复利用。相信有很多小伙伴都有这样的经验,在写代码的时候,可以将很多重复的代码抽象出来,做成公共的方法。这样就不用每次都去写重复的逻辑代码了
五、计算优化
-
并行计算: 就是多个计算同时进行。这里又将并行计算分为:多机并行计算、多进程并行计算和多线程并行计算
-
多机并行计算: 将一个大的计算任务,拆分成N个小时的计算任务,分发到不同的机器进行处理。典型的场景就是Hadoop和MapReduce极端
-
多进程计算: 比如,Nginx采用的NIO模型,采用的是进程调度的策略,由Master进程调度Worker进程,Worker进行来处理具体的请求
-
多线程计算: 对于多线程计算来说,也是我们平时接触最多的一种计算方式,我们可以使用多线程技术,将复杂的逻辑计算拆分成一个个小的计算任务,分发到不同的线程中去执行
-
步变异步: 同步和异步的区别就是:同步需要等待返回结果,异步不需要等待返回结果。如果我们在业务程序中,不需要等待返回结果数据,则我们可以将同步调用优化为异步调用,从而提升我们系统的性能
-
加载: 最典型的场景就是Spring中的懒加载,只有第一次获取bean的时候,才会创建bean实例
六、快速实现
于快速实现来说,不仅包含我们需要利用相关的程序框架迅速开发出我们想要的业务,也需要我们在进行技术选型时,尽量使用一些性能优良的组件。比如,在进行网络开发时,尽量选择Netty,结合轻量级的数据传输,就不要使用WebService等技术了
七、JVM 优化
说到 JVM 的优化,如果使用合理的 JVM 参数配置,在大多数情况应该是不需要调优的。
对于 JVM 调优没有什么必要,使用性能更好的垃圾回收器就能解决问题这个说法,个人觉得 JVM 调优在某些场景下还是有必要的,毕竟有句话叫:没有最好的,只有最合适的。
今天的知识就分享到这里,感谢观看!