- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
项目优化手段分享
2014年12月
性能优化(Optimize):简而言之,就是在不影响系统运行正确性的前提下,使之运行地更快,完成特定功能所需的时间更短。
性能问题永远是永恒的主题之一,而优化则更需要技巧。
性能优化 VS 性能设计
性能优化的几个层次
几个性能分析工具
如何分析性能瓶颈
性能优化的一些手段
讯汇通优化案例分析
是否需要优化?
关于性能设计
Q A
大纲
一、性能优化vs性能设计
性能优化,通常是在现有系统和代码基础上所做的改进,属于产品生命周期的后续几个阶段(假设产品有多个生命周期)。性能优化不是重新设计,性能优化是以现有的产品和代码为基础的,而不是推倒重来。
性能设计是从正向考虑问题:如何设计出高效,高性能的系统。
性能优化是从反向考虑问题:在出现性能问题时,如何定位和优化性能。
性能设计考验的是开发者正向建设的能力,而性能优化考验的是开发者反向修复的能力。两者可以互补。
二、性能优化的几个层次
系统层次:关注系统的控制流程和数据流程,优化主要考虑如何减少消息传递的个数;如何使系统的负载更加均衡;如何充分利用硬件的性能和设施;如何减少系统额外开销;如何降低耦合度 …系统层次的优化比较粗,但每一次的改进所带来的效果,也许比算法、代码层次花很高代价带来的效果都要高。系统层次的前提是对系统现有业务和未来的把握。
算法层次:用更高效的算法替换现有算法,而不改变其接口。
代码层次:代码层次的优化是最直接,也是最简单的,但前提是要对代码很熟悉,对系统很熟悉。
二、系统优化的几个层次
本期主要侧重于算法层次和代码层次的优化
三、几个性能分析工具
强大的CPU和内存的剖析工具 - yourkit
三、几个性能分析工具
多线程监控分析工具 - VisualVM
三、几个性能分析工具
热点监控工具 - JProfiler
二、业务模式
四、如何分析性能瓶颈
分析有哪些函数单次执行时间长
分析有哪些函数调用次数过多
分析有哪些函数总执行时间长
五、性能优化的一些手段
使用高效编码方式从语法上提高程序性能
比如,逻辑运算使用短路或、短路与;
比如, String vs StringBuffer
用String:如果确定这个String不会再变的话,这将会减少运行开销提高性能;
用StringBuffer:如果确定这个String肯定会变的话,这将会减少运行开销提高性能。
比如,对于无状态对象无须使用带有安全机制的措施;
五、性能优化的一些手段
采用合理的数据结构和算法提高程序性能
这往往是决定程序性能的关键,本文后面会有相关案例介绍
五、性能优化的一些手段
采用多线程、缓存数据、延迟加载、提前加载、异步调用等手段,解决严重的性能瓶颈
本文后面也有相关案例介绍
五、性能优化的一些手段
合理配置虚拟机堆内存使用上限和使用率,减少垃圾回收频率
五、性能优化的一些手段
合理使用native代码
java毕竟是解释型语言,先天性的“不足”,在某些场景下其性能没法和C相比,比如加解密、图形处理、视频解析
五、性能优化的一些手段
合理配置数据库缓存类型和优化SQL语句加快读取速度,适当时候考虑索引优化
SQL优化、索引优化本文后面也有相关案例介绍
五、性能优化的一些手段
使用工具分析性能问题,找出性能瓶颈
六、优化案例一
六、优化案例一
优化分析
pays有10000条记录,内循环的for里bankNoList有13万条记录,也就是说这里我们需要对比1302190000(13亿!)次。这个算法太贵。
优化方案
使用哈希寻址对比。把13万记录放在哈希容器里,对比的时候是哈希寻址对比,而不是链表循环对比。这里我们直接使用了jdk原生态的哈希map,key-value只用了key,如果有时间的话可以自己去写一个类似的哈希容器。
六、优化案例一
优化后的代码参考
六、优化案例二
ListLinkBankNo bankNoList = linkBankDao.queryLinkBankNoAll(1);
优化分析
这个基本上把link_bank_no表全搬过来了(大约有13万条数据)。这个建议和上边一样:想办法尽量避免这种sql。
优化方案
像这种内容不怎么变动、而又使用频率比较高的记录,没必要每一笔付款请求都重新查询一次,可以考虑使用内存缓存预加载策略;
而且也没必要全表复制,因为我们只关心其中的一两个字段。
六、优化案例三
六、优化案例三
优化分析
For循环里边反复操作数据库,一万条数据的话,也就操作了10000次。给数据库带来压力,造成速度缓慢。
优化方案
PayAntharDao的updateTranState方法改为批量更新,一条sql语句搞定。
六、优化案例三
优化后的代码参考
六、优
文档评论(0)