性能优化一点总结

个人管理方面

1、形成体系化的思想。

当做一件事(开发一个系统、解决一个问题)的时候,可以按照一定的体系去下手,这个体系可以理解为思维意识。少了很多无从下手、从零开始的过程,从而提升效率。这一点事需要个人长久的总结和丰富的经验!

2、开阔自己的视野。

从不同方面去寻找自己解决问题的思路,增加自己的选择空间,会让你权衡更全面,分析更透彻,从而理解更深入,解决问题也更到位。做技术,不能只看技术!一个技术大牛,多少都会对历史,对艺术有一些了解。

技术方面

1、代码

很多技术人员拿到一个性能优化的需求以后,都会向缓存、分库分表、异步、多线程、JVM优化等方向去思考。其实,很多时候应该从代码入手。代码优化的点很多很多,举几个例子:

1、当已经知道list大小的时候,直接指定list大小,可以有效避免list默认大小不够,而进行复制扩容。
2、变量声明的位置能局部不全局,可以有效避免长久占用内存而不能被GC回收。
3、for循环里大量声明变量,以致于消耗内存。
等等吧

所以,要多加注意代码层面的优化,优化的空间很大,很可能代码优化之后就能满足性能要求,而不必增加设备来支持访问量!

2、SQL优化

SQL优化,个人认为可以从五个层面入手。

*SQL语句优化
    关键字的使用like、join、in、exist
*SQL索引优化
    索引的创建、索引的大小设置
*SQL引擎优化
    根据业务需求,选择最适合的引擎
*数据库设计优化
    我个人认知,主要是范式的设计。可以适当冗余数据,以减少数据库操作。
*数据库连接池优化
    连接池监控数、连接池方案的选择(这一块个人没使用过)

3、缓存优化

缓存在一个系统里或多或少都会涉及的。至于什么数据放入缓存,放入一个什么样的缓存,都是值得仔细斟酌的。 使用缓存的情况,个人感觉有两种:

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

选型考虑:

如果数据量小,并且不会频繁地增长又清空(这会导致频繁地垃圾回收),那么可以选择本地缓存。具体的话,如果需要一些策略的支持(比如缓存满的逐出策略),可以考虑Ehcache;如不需要,可以考虑HashMap;如需要考虑多线程并发的场景,可以考虑ConcurentHashMap。
目前从资源的投入度、可运维性、是否能动态扩容以及配套设施来考虑,我们优先考虑Tair。除非目前Tair还不能支持的场合(比如分布式锁、Hash类型的value),我们考虑用Redis。

当然,使用缓存后,会面临很多问题,最大的一个问题就是数据一致性。这些就可以根据业务需要而制定不同的方案。

4、多线程

在一个系统里,在一定情况下使用多线程可以加快响应时间,比如一些异步任务,启动多线程去处理就好了,还有一些离线任务也不需要等待完成再返回等等。但是线上对响应时间要求较高的场合,尽量少用多线程,尤其是服务线程需要等待任务线程的场合(很多重大事故就是和这个息息相关),如果一定要用,可以对服务线程设置一个最大等待时间。

使用多线程又带来另一个问题,就是代码的复杂性。所以,建议如果单机单线程能够满足业务需求的尽量使用单机单线程,如果满足不了,则可以使用单机多线程,如果依然不能满足,再考虑多机多线程。

使用多线程时,可以考虑使用线程池,线程池的优点有两个:

1、提高性能,节省线程创建和销毁的开销,节省资源。
2、可以利用线程池完成一些功能,比如限流。可以保障机器极限压力下的稳定处理能力。

5、JVM调优

JVM是Java WEB项目的基石,可以根据项目特点进行JVM调优。我所了解到的,只是调整一些GC回收机制和回收策略。比如新生代与老生代比值、eden与survivor比值、触发cms回收的old区比率阈值等。比如把大对象放入老年代等等。

当然,调优的路上很远也很长。包括技术的选型,监控的使用,软件的使用甚至硬件的使用。今天简单说这么多!

更多精彩内容,欢迎关注微信公众号:Java小笔记(ijavanote)

时间: 2024-10-20 00:46:40

性能优化一点总结的相关文章

优化php性能的一点总结

图示为100个并发,请求1000次目标地址 进行测试 最重要的两个参数:Requests per second :每秒接受请求数,这里每秒接收101个请求 Time per request:一个请求用多少耗时,这里是9毫秒 第一个参数越大越好,第二个参数越小越好 优化方法之语言级性能优化1 PHP代码执行流程:  PHP代码通过zend引擎逐行扫描,成为zend引擎能理解的语法,转码解析成Opcodes,执行之后输出 如果多使用内置函数的话,在扫描和理解上时间就会快很多,Opcodes也会少一些

对于iOS性能优化的一点看法

在我们通常的开发工作中,每次需求定下来的时候,开发时间都是很紧张的,于是我们就抓紧时间开发,完成需求.在匆忙开发的过程中,或多或少的会有一些性能问题存在,在开发任务完成以后,我们都要进行性能优化.现将我在开发过程中的性能优化问题分享如下. 一.数据压缩 在程序的运行过程中,数据的传输也是影响程序性能的一个方面.在传输速度不变的情况下,数据量大,传输需要的时间就多,数据量小,传输需要的时间自然就少.传入需要的时间少,我们程序的响应速度自然就变快了. 1. 对网络传输的数据进行压缩 这一步需要和服务

iOS开发——项目实战总结&UITableView性能优化与卡顿问题

UITableView性能优化与卡顿问题 1.最常用的就是cell的重用, 注册重用标识符 如果不重用cell时,每当一个cell显示到屏幕上时,就会重新创建一个新的cell 如果有很多数据的时候,就会堆积很多cell.如果重用cell,为cell创建一个ID 每当需要显示cell 的时候,都会先去缓冲池中寻找可循环利用的cell,如果没有再重新创建cell 2.避免cell的重新布局 cell的布局填充等操作 比较耗时,一般创建时就布局好 如可以将cell单独放到一个自定义类,初始化时就布局好

Android应用程序性能优化Tips

主要介绍一些小细节的优化技巧,虽然这些小技巧不能较大幅度的提升应用性能,但是恰当的运用这些小技巧并发生累积效应的时候,对于整个App的性能提升还是有不小作用的.通常来说,选择合适的算法与数据结构会是你首要考虑的因素,在这篇文章中不会涉及这方面的知识点.你应该使用这篇文章中的小技巧作为平时写代码的习惯,这样能够提升代码的效率. 通常来说,高效的代码需要满足下面两个原则: 不要做冗余的工作 尽量避免执行过多的内存分配操作 To ensure your app performs well across

Linq To Nhibernate 性能优化(入门级)

最近都是在用Nhibernate和数据库打交道,说实话的,我觉得Nhibernate比Ado.Net更好用,但是在对于一些复杂的查询Nhibernate还是比不上Ado.Net.废话不多说了,下面讲讲Linq To Nhibernate的性能优化. 第一点:应该要分清楚当前代码是在数据库上执行,还是在内存中执行(或者什么时候应该在数据库上做,什么时候应该在内存做) 我们在在做查询的时候,常见的使用方法 上面是使用了Iqueryable接口的,它会把数据先筛完了之后,再返回给我们 这个在数据库里呢

雅虎35条性能优化建议

雅虎35条性能优化建议分7类,共35条: [内容]尽量减少HTTP请求数 [服务器]使用CDN(Content Delivery Network) [服务器]添上Expires或者Cache-Control HTTP头 [服务器]Gzip组件 [css]把样式表放在顶部 [js]把脚本放在底部 [css]避免使用CSS表达式 [js, css]把JavaScript和CSS放到外面 [内容]减少DNS查找 [js, css]压缩JavaScript和CSS [内容]避免重定向 [js]去除重复脚

MySQL 性能优化的最佳20多条经验分享

今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数据库的性能,这并不只是DBA才需要担心的                    事,而这更是我们程序员需要去关注的事情. 当我们去设计数据库表结构,对操作数据库时(尤其是查表时的SQL语句),我们都需要注意数据操作的性能.这里,我们不会讲过多的SQL语                句的优化,而只是针对MySQL这一Web应用最多的数据库.希望下面的这些优化技巧对你有用. 1. 为查询缓存优化你的查询 大多数的M

MySQL性能优化的最佳20+条经验

http://www.pythonclub.org/mysql/optimize-20-tips 今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我们程序员需要去关注的事情.当我们去设计数据库表结构,对操作数据库时(尤其是查表时的SQL语句),我们都需要注意数据操作的性能.这里,我们不会讲过多的SQL语句的优化,而只是针对MySQL这一Web应用最多的数据库.希望下面的这些优化技巧对你有用. 1. 为查询缓存

Redis各种数据结构性能数据对比和性能优化实践

很对不起大家,又是一篇乱序的文章,但是满满的干货,来源于实践,相信大家会有所收获.里面穿插一些感悟和生活故事,可以忽略不看.不过听大家普遍的反馈说这是其中最喜欢看的部分,好吧,就当学习之后轻松一下. Redis各种数据结构性能数据对比 测试工具:perf4j 性能指标:平均值,最小值,最大值,方差 对比将814条数据按单条插入到哈希MAP和哈希SET: 对比从814条数据的哈希MAP和哈希SET中判断一个元素是否存在(map的hasKey和set的isMember): 大量数据插入哈希MAP,运