iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >java 9大性能优化经验总结
  • 120
分享到

java 9大性能优化经验总结

Python 官方文档:入门教程 => 点击学习

摘要

性能优化属于Java高级岗的必备技能,而且大厂特别喜欢考察,今天主要给大家介绍9种性能优化的方法 1.Java代码优化 之所以把代码放到第一位,是因为这一点最容易引忽视,比如拿到一个

性能优化属于Java高级岗的必备技能,而且大厂特别喜欢考察,今天主要给大家介绍9种性能优化的方法

1.Java代码优化

之所以把代码放到第一位,是因为这一点最容易引忽视,比如拿到一个性能优化的需求以后,言必称缓存、异步等。

实际上,第一步就应该是分析相关的代码,找出相应的瓶颈,再来考虑具体的优化策略。

有一些性能问题,完全是由于代码写的不合理,通过直接修改一下代码就能解决问题的,比如for循环次数过多、作了很多无谓的条件判断、相同逻辑重复多次等,这样的优化成本是最低的。

2.数据库优化

9大性能优化经验总结,强烈建议收藏!-mikechen的互联网架构

1.sql优化

这里以Mysql为例,最常见的方式是,由自带的慢查询日志或者开源的慢查询系统定位到具体的出问题的SQL,然后使用explain、profile等工具来逐步调优,最后经过测试达到效果后上线。

这里举几个优化的例子:

1.查询优化

对查询进行优化,要尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引

2.避免null判断

应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:

select id from t where num is null

3.避免全表扫描

应尽量避免在 where 子句中使用 != 或 <> 操作符,否则将引擎放弃使用索引而进行全表扫描。

应尽量避免在 where 子句中使用 or 来连接条件,如果一个字段有索引,一个字段没有索引,将导致引擎放弃使用索引而进行全表扫描。

in和 not in 也要慎用,否则会导致全表扫描,如:

select id from t where num in(1,2,3)

对于连续的数值,能用 between就不要用 in 了:

select id from t where num between 1 and 3

4.大数据量查询

对于多张大数据量的表JOIN,要先分页再JOIN,否则逻辑读会很高。

5.合理使用索引

索引并不是越多越好,索引固然可以提高相应的 select 的效率,但同时也降低了 insert 及 update 的效率,因为 insert 或 update 时有可能会重建索引,所以怎样建索引需要慎重考虑,视具体情况而定。

一个表的索引数最好不要超过6个,若太多则应考虑一些不常使用到的列上建的索引是否有 必要。

6.多使用数字型字段

尽量使用数字型字段,若只含数值信息的字段尽量不要设计为字符型,这会降低查询和连接的性能,并会增加存储开销。

这是因为引擎在处理查询和连 接时会逐个比较字符串中每一个字符,而对于数字型而言只需要比较一次就够了。

7.避免大数量

尽量避免向客户端返回大数据量,若数据量过大,应该考虑相应需求是否合理。

8.避免大事务

尽量避免大事务操作,提高系统并发能力。

2.连接池调优

我们的应用为了实现数据库连接的高效获取、对数据库连接的限流等目的,通常会采用连接池类的方案,即每一个应用节点都管理了一个到各个数据库的连接池。

随着业务访问量或者数据量的增长,原有的连接池参数可能不能很好地满足需求,这个时候就需要结合当前使用连接池的原理、具体的连接池监控数据和当前的业务量作一个综合的判断,通过反复的几次调试得到最终的调优参数。

3.架构层面

这一类调优包括读写分离、多从库负载均衡、水平和垂直分库分表等方面,一般需要的改动较大,但是频率没有SQL调优高,而且一般需要DBA来配合参与。

9大性能优化经验总结,强烈建议收藏!-mikechen的互联网架构

3.分布式缓存

缓存可以称的上是性能优化的利器,缓存主要用来存放那些读写比很高、很少变化的数据。

9大性能优化经验总结,强烈建议收藏!-mikechen的互联网架构

什么情况适合用缓存?考虑以下两种场景:

  •  短时间内相同数据重复查询多次且数据更新不频繁,这个时候可以选择先从缓存查询,查询不到再从数据库加载并回设到缓存的方式。此种场景较适合用单机缓存。
  •  高并发查询热点数据,后端数据库不堪重负,可以用缓存来扛。

使用缓存需要注意的问题:

1.避免缓存失效

把频繁修改的数据放入缓存,容易出现数据写入缓存后,应用还来不及读取缓存,数据就已经失效的情形,徒增系统负担。

2.缓存热点数据

缓存使用的内存资源非常宝贵,只能将最新访问的数据缓存起来,而把历史数据清理出缓存,即缓存资源应该留给20%的热点数据。

 3.数据不一致性

一般会对缓存设置失效时间,超过失效时间,就要从数据库重新加载。

因此应用要忍受一定时间的数据不一致,另一种策略是数据更新时立即更新缓存,不过这也会带来更多的系统开销和事务一致性的问题。

 4.缓存可用性

业务发展到一定阶段时,缓存会承担大部分数据访问的压力,数据库已经习惯了有缓存的日子,所以当缓存服务器崩溃时,数据库会因为完全不能承受如此大的压力而宕机,进而导致整个网站不可用,这种情况被称作缓存雪崩,发生这种故障,甚至不能简单地重启缓存服务器和数据库服务器来恢复网站访问。

解决方式:

1)缓存热备(当某台服务器宕机时,将缓存访问切换到热备服务器上;

2)缓存服务器集群

5. 缓存预热

缓存中存放的是热点数据,热点数据是缓存系统用LRU对不断访问的数据筛选出来的,这个过程需要较长的时间。

新启动的缓存系统没有任何数据,此时系统的性能和数据库负载都不太好。因此可以选择在启动缓存是就把热点数据预加载好。

 6.缓存穿透

因为不恰当的业务或恶意攻击,持续高并发地访问某一个不存在的数据,如果缓存不保存该数据,就会有大量的请求压力落在数据库上。

简单的解决方式是把请求的不存在的数据也放进缓存,其value是null。

4.异步化

针对某些客户端的请求,在服务端可能需要针对这些请求做一些附属的事情,这些事情其实用户并不关心或者用户不需要立即拿到这些事情的处理结果,这种情况就比较适合用异步的方式处理这些事情。

异步化的作用:

  •  缩短接口响应时间,使用户的请求快速返回,用户体验更好。
  •  避免线程长时间处于运行状态,这样会引起服务线程池的可用线程长时间不够用,进而引起线程池任务队列长度增大,从而阻塞更多请求任务,使得更多请求得不到技术处理。
  •  线程长时间处于运行状态,可能还会引起系统Load、CPU使用率、机器整体性能下降等一系列问题,甚至引发雪崩。异步的思路可以在不增加机器数和CPU数的情况下,有效解决这个问题。

比如:使用消息队列MQ中间件服务,MQ天生就是异步的。

9大性能优化经验总结,强烈建议收藏!-mikechen的互联网架构

一些额外的任务,可能不需要我这个系统来处理,但是需要其他系统来处理,这个时候可以先把它封装成一个消息,扔到消息队列里面,通过消息中间件的可靠性保证把消息投递到关心它的系统,然后让这个系统来做相应的处理。

再比如C端在完成一个提单动作以后,可能需要其它端做一系列的事情,但是这些事情的结果不会立刻对C端用户产生影响,那么就可以先把C端下单的请求响应先返回给用户,返回之前往MQ中发一个消息即可,而且这些事情理应不是C端的负责范围,所以这个时候用MQ的方式,来解决这个问题最合适。

5.WEB前段

web前端指网站业务逻辑之前的部分,包括:

  • 浏览器加载
  • 网站视图模型
  • 图片服务
  • CDN服务等

9大性能优化经验总结,强烈建议收藏!-mikechen的互联网架构

主要优化手段有优化浏览器访问,使用反向代理,CDN等。

1.浏览器访问优化

(1)减少Http请求

HTTP协议是无状态的应用层协议,意味着每次HTTP请求都需要简历通信链路,进行数据传输,而在服务器端,每个HTTP都需要启动独立的线程去处理,这些通信和服务的开销都很昂贵,减少HTTP请求的数目可有效提高访问性能。

减少HTTP请求的主要手段是:

  •  合并CSS,以及压缩CSS大小
  •  合并javascript,以及压缩js大小
  •  合并图片

将浏览器一次访问需要的JavaScript,CSS合并成一个文件,这样浏览器就只需要一次请求。多张图片合并成一张,如果每张图片都有不同的超链接,可通过CSS偏移响应鼠标点击操作,构造不同的URL。

(2)使用浏览器缓存

对一个网站而言,CSS,JavaScript,LoGo,图标等这些静态资源文件更新的频率都比较低,而这些文件又几乎是每次HTTP请求都需要的,如果将这些文件缓存在浏览器中,可以极好地改善性能。通过设置HTTP头中Cache-Control和Expires属性,可设定浏览器缓存,缓存时间可以是数天甚至是几个月。有时候,静态资源文件变化需要及时应用到客户端浏览器,这种情况可以通过改变文件名实现,比如一般会在JavaScript后面加上一个版本号,使浏览器刷新修改的文件。

(3)启用压缩

在服务器端对文件进行压缩,在浏览器端对文件解压缩,可有效较少通信传输的数据量。文本文件的压缩效率科大80%以上。

(4)CSS放在页面最上面,JavaScript放在页面最下面

浏览器会在下载完全部CSS之后对整个页面进行渲染,因此最好的做法是将CSS放在页面最上面,让浏览器尽快下载CSS。JS则想法,浏览器在加载JS后立即执行,有可能会阻塞整个页面,造成页面显示缓慢,因此JS最好放在页面最下面。

(5)减少Cookie传输

一方面,Cookie包含在每次请求和响应中,太大的Cookie会严重影响数据传输,因此哪些数据需要写入Cookie需要慎重考虑,尽量减少Cookie中传输的数据量。另一方面,对于某些静态资源的访问,如CSS,JS等,发送Cookie没有意义,可以考虑静态资源使用独立域名访问,避免请求静态资源时发送Cookie,减少Cookie传输的次数。

2.CDN加速

CDN(Content Distribute Network,内存分发网络)的本质上仍然是一个缓存,而且将数据缓存在离用户最近的地方,是用户以最快速度获取数据,即所谓网络访问第一跳。

CDN一般缓存的是静态资源,如图片,文件,CSS,Script脚本,静态网页等,但是这些文件访问频率很高,将其缓存在CDN可极大改善网页的打开速度。

3.反向代理

传统代理服务器位于浏览器一侧,代理浏览器将HTTP请求发送到互联网上,而反向代理服务器位于网站机房一侧,代理网站Web服务器接收HTTP请求。

和传统代理服务器可以保护浏览器安全一样,反向代理服务器也具有保护网站安全的作用,来自互联网的访问请求必须经过代理服务器,相当于在Web服务器和可能的网络攻击之间建立了一个屏障。

除了安全功能,代理服务器也可以通过配置缓存功能加速Web请求,当用户第一次访问静态内容的时候,静态内容就被缓存在反向代理服务器上,这样当其他用户访问该静态内容的时候,就可以直接从反向代理服务器返回,加速Web请求响应速度,减轻服务器负载要。

6.服务化

做服务化最基础的是按业务做服务拆分,避免跨业务间的互相影响,数据和服务同时拆分。同一个业务内部我们还按计算密集型/io密集型的服务拆分、C端/B端服务拆分、核心/非核心服务拆分、高频服务单独部署等原则做拆分。

7.硬件升级

硬件问题对性能的影响不容忽视。

举一个例子:一个DB集群经常有慢SQL报警,业务排查下来发现SQL都很简单,该做的索引优化也都做了,后来DBA同学帮忙定位到问题是硬件过旧导致,将机械硬盘升级成固态硬盘之后报警立马消失了,效果立竿见影!

8.搜索引擎

复杂查询以及一些聚合计算不适合在数据库中做,可以利用搜索引擎来实现,另外搜索引擎还可以帮我们很好的解决跨库、跨数据源检索的场景。

9.产品逻辑优化

业务逻辑优化经常会容易被忽略,但效果却往往比数据库性能优化、JVM调优之类的来的更明显。

举一个例子,12306春运抢火车票的场景,由于访问的人多,用户点击“查票”之后系统会非常卡,进度条非常慢,作为用户,我们会习惯性的再去点“查票”,可能会连续点个好几次。

假设平均一个用户点5次,则后端系统负载就增加了5倍!而其中80%的请求是重复请求。

这个时候我们可以通过产品逻辑的方式来优化,比如,在用户点击查询之后将“按钮置灰”,或者通过JS控制xx秒只能只能提交一次请求等,有效的拦截了80%的无效流量

以上就是java 9大性能优化经验总结的详细内容,更多关于java性能优化经验总结的资料请关注编程网其它相关文章!

--结束END--

本文标题: java 9大性能优化经验总结

本文链接: https://www.lsjlt.com/news/196735.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • java 9大性能优化经验总结
    性能优化属于Java高级岗的必备技能,而且大厂特别喜欢考察,今天主要给大家介绍9种性能优化的方法 1.Java代码优化 之所以把代码放到第一位,是因为这一点最容易引忽视,比如拿到一个...
    99+
    2023-02-18
    java 性能 java性能优化经验总结 Java代码优化 数据库优化 分布式缓存 异步化 Web前段 搜索引擎优化
  • MySQL性能优化与索引设计的项目经验总结
    MySQL是一种常用的关系型数据库管理系统,广泛应用于各种Web应用和企业级系统中。在开发和维护MySQL数据库时,性能优化和索引设计是非常关键的环节。本文将基于作者在项目中的经验总结MySQL性能优化和索引设计的一些实践方法和技巧。一、了...
    99+
    2023-11-02
    MySQL性能优化 (Performance Optimization) 索引设计 (Index Design) 项目经
  • Java实验报告经验总结
    每一段是每一次实验报告写的经验总结,一共是一学期的内容 文章目录 一二三四五六 一       ~~~~~       分析:这次做...
    99+
    2023-10-26
    java jvm 开发语言
  • web前端性能优化总结
    本篇内容介绍了“web前端性能优化总结”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1.原则多使用内存,缓...
    99+
    2024-04-02
  • React 性能优化方法总结
    目录前言为什么页面会出现卡顿的现象?React 到底是在哪里出现了卡顿?React 有哪些场景会需要性能优化?一:父组件刷新,而不波及子组件。第一种:使用 PureComponent...
    99+
    2024-04-02
  • MySQL在大数据环境下的应用与优化项目经验总结
    MySQL在大数据环境下的应用与优化项目经验总结随着大数据时代的到来,越来越多的企业和组织开始面临海量数据的存储、处理和分析的挑战。MySQL作为一种开源的关系型数据库管理系统,其在大数据环境下的应用和优化成为了许多项目的重要一环。本文将总...
    99+
    2023-11-03
    大数据 MySQL 优化
  • 数据库压力测试最佳实践:从业界经验中总结的宝贵经验,优化数据库性能
    数据库压力测试是通过模拟真实世界的负载来评估数据库系统的性能和可靠性。通过压力测试,可以发现系统中存在的性能瓶颈和潜在问题,并及时采取措施进行优化。 1. 明确压力测试目标 在进行压力测试之前,需要明确测试的目标。是评估系统在高负载下的...
    99+
    2024-02-22
    数据库压力测试 最佳实践 性能优化 稳定性
  • 精简高效的C#网站优化经验技巧总结
    对大型网站,技术涉及面非常广,对硬件,软件,编程语言,Web Service,防火墙等等有很高要求。 面对大量用户,高并发请求,可以使用高性能服务器,高性能编程语言,高性能数据库,加...
    99+
    2024-04-02
  • Java 异步编程的经验总结,你不能错过!
    Java 是一种广泛使用的编程语言,而异步编程则是 Java 编程中的一个重要部分。异步编程是一种编程方式,它可以让程序在等待某些操作完成时继续执行其他操作,从而提高程序的性能和响应速度。在本文中,我们将总结一些 Java 异步编程的经验...
    99+
    2023-10-01
    异步编程 javascript linux
  • windows server 2008下一些设置技巧及优化经验总结
      今天把以前的Windows server 2003给覆盖了,在C盘地下安装了windows server 2008。安装好windows server 2008后,系统很多地方都需要设置。我就说下我遇到的一些问题吧,...
    99+
    2023-05-29
    server 设置 优化 技巧 经验总结
  • java中优化大量if...else...方法总结
    目录策略模式(Strategy Pattern)工厂模式(Factory Pattern)映射表(Map)数据驱动设计(Data-Driven Design) 总结策略模式...
    99+
    2023-03-19
    java优化大量if else java减少if else语句 多个ifelse优化
  • Hbase万亿级存储性能优化总结
    hbase主集群在生产环境已稳定运行有1年半时间,最大的单表region数已达7200多个,每天新增入库量就有百亿条,对hbase的认识经历了懵懂到熟的过程。为了应对业务数据的压力,hbase入库也由最初的...
    99+
    2024-04-02
  • C++ 递归实战经验分享:代码优化与技巧总结
    递归优化技巧:尾递归优化:编译器在函数自身调用前进行所有计算,提升效率。记忆:存储先前计算过的输出,避免重复计算。迭代:用迭代算法代替递归,提高可读性和避免栈溢出。 C++ 递归实战经...
    99+
    2024-05-03
    c++ 递归
  • C#开发经验分享:性能测试与调优经验
    C#开发经验分享:性能测试与调优经验随着互联网技术的快速发展,软件开发行业也在不断壮大。在这个充满竞争的行业中,开发人员需要不断提升自己的技术水平,才能在激烈的竞争中脱颖而出。本文将分享一些关于C#开发中的性能测试与调优经验,希望能够对正在...
    99+
    2023-11-22
    性能测试 C#开发 调优经验
  • MySQL索引优化的性能分析和总结
    本篇内容主要讲解“MySQL索引优化的性能分析和总结”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MySQL索引优化的性能分析和总结”吧!案例分析我们先简单了解...
    99+
    2024-04-02
  • 总结高并发下Nginx性能如何优化
    目录特点优势安装和命令配置文件代理模式和配置反向代理正向代理(forward proxy) :反向代理(reverse proxy)︰透明代理∶动静分离日志管理日志格式日志切割高并发...
    99+
    2024-04-02
  • MySQL性能优化的21条经验分别是什么
    这篇文章给大家介绍MySQL性能优化的21条经验分别是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。 今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显...
    99+
    2024-04-02
  • Golang开发经验分享:如何进行性能优化
    Golang开发经验分享:如何进行性能优化摘要:随着互联网的快速发展,对于应用程序的性能要求越来越高。作为一门高效且易于编程的语言,Golang 在开发高性能应用方面表现出色。本文将从多个方面介绍如何进行 Golang 的性能优化,包括并发...
    99+
    2023-11-22
    性能 优化 Golang
  • Java数组操作经典例题大总结
    目录数组中元素的求和使用二维数组打印一个10行的杨辉三角求数值型数组中元素的最大值、最小值、平均数、总和等*使用简单数组线性查找二分法查找冒泡排序求一个3*3矩阵对角线元素之和总结&...
    99+
    2024-04-02
  • Vue首屏性能优化组件知识点总结
    Vue首屏性能优化组件 简单实现一个Vue首屏性能优化组件,现代化浏览器提供了很多新接口,在不考虑IE兼容性的情况下,这些接口可以很大程度上减少编写代码的工作量以及做一些性能优化方...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作