Java程序性能的优化方法

90 阅读4分钟

1、算法逻辑优化

(1) 什么算法优化? 算法优化的思想就是,对于同一个问题,选择更好的办法去解决。

(2) 算法优化的详细解释

  算法优化可以说是性能优化的关键点,一个好的算法和常规算法往往有一个数量级的差别,比如暴力的O(n2)和优化后的O(n*log(n)),在1000的数据量下差大概1000倍,在1000000的数据量下差的是1000000倍,性能的差距是幂次上升的,数据量越大,差距越明显。

  本来1秒能出结果的,现在需要1000000秒约12天才能出结果,可以看到,不做算法优化的话这个服务基本是不可用的

  算法千变万化,对于不同的问题需要采取不一样的方法,一些复杂的逻辑问题往往是需要专门的算法工程师去设计解决方案的,

2、redis缓存优化

(1) redis缓存优化的原理   把用户第一次查询的结果缓存起来,下次再查询的时候就不再跑程序,直接取缓存中的数据

在这里插入图片描述

  在查询数据时往往不止一次查询数据库,而且在封装数据的时候可能需要经过一定的算法处理。所以在在redis缓存中直接取数据会比查询数据库获取数据要快得多

3、异步编排

(1) 什么异步编排?

  一个程序在不改变原本结果的情况下让其以异步的方式运行

在这里插入图片描述

4、MQ削峰填谷

(1) MQ优化原理   MQ(Message Queue)消息队列,把紧急的资源先处理了,不需要立马处理的请求先放到消息队列里面,空闲的时候再处理。   举个例子,淘宝京东等商品秒杀,瞬时间流量太大,如果开单、减库存、更新用户积分数据等等全部流程都跑完,那么用户那边就会感觉很卡顿,那么久还没有反馈信息。MQ优化之后就是,用户提交的信息我收到了,就立马和用户说我收到了,然后把请求的数据存到消息队列中,等服务器流量少的时候再去开单、减库存、更新用户积分数据。

5、预加载

(1) 预加载优化原理   猜测出用户会发出请求,趁用户不注意先把数据查出来,放到缓存中,用户真正去请求数据的时候会感觉非常快!

在这里插入图片描述

6、sql调优

(1) sql调优原理 这个优化有很多方面: sql代码方面: 坚决不使用联表查询 sql存储方面: 建索引,实际上就是底层用空间换时间,b+树把时间复杂度从O(n)优化到了O(log(n)),优化了一个数量级 编程方面: 坚决不循环查表,需要单个单个数据的时候,可以把数据先全部取出,存到map里面,用的时候在map里查,这样可以把时间复杂度从O(n2)优化到了O(n*log(n)),优化了一个数量级,并且优化了数据库的连接时间。

7、jvm调优

(1) jvm调优原理   找出最符合目前情况的jvm运行参数,最主要的就是分配内存。内存配过小,垃圾回收机制(Garbage Collection)会被频繁触发,导致程序性能下降。内存分配过大,资源浪费严重。

(2) jvm简介 jvm(Java Virtual Machine),java虚拟机

Java虚拟机是一个想象中的机器,在实际的计算机上通过软件模拟来实现。Java虚拟机有自己想象中的硬件,如处理器、堆栈、寄存器等,还具有相应的指令系统。

jvm的内存模型:

在这里插入图片描述

堆的垃圾回收分区:

在这里插入图片描述

gc流程:

在这里插入图片描述

8、集群搭建

(1) 集群搭建优化原理   在服务器上启动多个相同的服务,这些服务都可以做相同的事情。用户请求过来的时候可以根据代理算法分配到较为空闲的服务上执行,解决服务器压力问题。