Java代码优化--赵志华

上传人:ni****g 文档编号:591550567 上传时间:2024-09-18 格式:PPT 页数:28 大小:1.85MB
返回 下载 相关 举报
Java代码优化--赵志华_第1页
第1页 / 共28页
Java代码优化--赵志华_第2页
第2页 / 共28页
Java代码优化--赵志华_第3页
第3页 / 共28页
Java代码优化--赵志华_第4页
第4页 / 共28页
Java代码优化--赵志华_第5页
第5页 / 共28页
点击查看更多>>
资源描述

《Java代码优化--赵志华》由会员分享,可在线阅读,更多相关《Java代码优化--赵志华(28页珍藏版)》请在金锄头文库上搜索。

1、JavaJava代码优化代码优化-赵志华赵志华2008 BOCO Inter-Telecom Co. All rights reserved.代码优化代码优化代码优化原则代码优化原则代码优化步骤代码优化步骤代码优化实践代码优化实践2008 BOCO Inter-Telecom Co. All rights reserved.代码优化原则代码优化原则 代码优化是什么。代码优化是指对程序代码进行等价(指不改变程代码优化是什么。代码优化是指对程序代码进行等价(指不改变程序的运行结果)变换。序的运行结果)变换。程序代码可以是中间代码,也可以是目标代码。程序代码可以是中间代码,也可以是目标代码。等价的含

2、义是使得变换后的代码运行结果与变换前代码运行结果相同。等价的含义是使得变换后的代码运行结果与变换前代码运行结果相同。优化的含义是最终生成的目标代码更加轻松自如(运行时间更短、占用优化的含义是最终生成的目标代码更加轻松自如(运行时间更短、占用空间更小)地工作,时空效率优化。空间更小)地工作,时空效率优化。 明确为什么优化。明确为什么优化。现场问题触发,维护工作量大等等现场问题触发,维护工作量大等等 优化是要朝着好的方向发展而不是过度地优化,过度优化会降低程优化是要朝着好的方向发展而不是过度地优化,过度优化会降低程序可读性,会给后期维护人员增加难度系数。序可读性,会给后期维护人员增加难度系数。满足

3、实际需要即可,不要满足实际需要即可,不要为了优化而优化。为了优化而优化。 要对优化的对象,进行测试或者有一定的深入理解。要对优化的对象,进行测试或者有一定的深入理解。有些有些apiapi人家的单线程效率就非常高,你为了优化,写了一堆多线程,然人家的单线程效率就非常高,你为了优化,写了一堆多线程,然后各种锁,各种问题。后各种锁,各种问题。 预防大于优化。预防大于优化。2008 BOCO Inter-Telecom Co. All rights reserved.代码优化步骤代码优化步骤1 1、明确优化目标、明确优化目标 在优化工作开始的时候,你还尚未明确优化内容和目的,那么你很容易陷入误区。在一

4、开始,你在优化工作开始的时候,你还尚未明确优化内容和目的,那么你很容易陷入误区。在一开始,你就应该清楚地了解你要达到的效果,以及其他优化相关的各种问题。这些目标需要明确指出(至少精通就应该清楚地了解你要达到的效果,以及其他优化相关的各种问题。这些目标需要明确指出(至少精通技术的项目经理可以理解和表达它),接下来,在整个优化过程中,你需要坚持这些目标。技术的项目经理可以理解和表达它),接下来,在整个优化过程中,你需要坚持这些目标。 2 2、选择正确的优化指标、选择正确的优化指标 选择正确的指标,是优化的一个重要组成部分,你需要按照这些指标来测量优化工作的进展情况。选择正确的指标,是优化的一个重要

5、组成部分,你需要按照这些指标来测量优化工作的进展情况。如果指标选择不恰当,或者完全错误,你所做的努力有可能白费了。即使指标正确,也必须有一些辨别。如果指标选择不恰当,或者完全错误,你所做的努力有可能白费了。即使指标正确,也必须有一些辨别。在某些情况下,将最多的努力投入到运行消耗时间最多的那部分代码中,这是实用的策略。但也要记住,在某些情况下,将最多的努力投入到运行消耗时间最多的那部分代码中,这是实用的策略。但也要记住,Unix/LinuxUnix/Linux内核的大部分时间花费在了空循环上。需要注意的是,如果你轻易选择了一个很容易达到的内核的大部分时间花费在了空循环上。需要注意的是,如果你轻易

6、选择了一个很容易达到的指标,这作用不大,因为没有真正解决问题。你有必要选择一个更复杂的、更接近你的目标的指标。指标,这作用不大,因为没有真正解决问题。你有必要选择一个更复杂的、更接近你的目标的指标。3 3、找到优化的关键点、找到优化的关键点 这是有效优化的关键。找到项目中与你的目标(性能、资源或其他)相背的地方,并将你的努力这是有效优化的关键。找到项目中与你的目标(性能、资源或其他)相背的地方,并将你的努力和时间用在那里。举一个典型的例子,一个和时间用在那里。举一个典型的例子,一个WebWeb项目速度比较慢,开发者在优化时将大部分精力放在了项目速度比较慢,开发者在优化时将大部分精力放在了数据库

7、优化上,最终发现真正的问题是网络连接慢。另外,不要分心于容易实现的问题。这些问题尽管数据库优化上,最终发现真正的问题是网络连接慢。另外,不要分心于容易实现的问题。这些问题尽管很容易解决,但可能不是必要的,或与你的目标不相符。容易优化并不意味着值得你花费工夫。很容易解决,但可能不是必要的,或与你的目标不相符。容易优化并不意味着值得你花费工夫。 使用使用javajava工具:工具:jmapjmap,jstackjstack,jprofilerjprofiler等等4 4、优化完后测试功能!、优化完后测试功能!2008 BOCO Inter-Telecom Co. All rights reserv

8、ed.代码优化实践代码优化实践运行更快运行更快1.1.告警统计效率优化(告警统计效率优化( jstack jstack,内存换效率),内存换效率)2.DataWorker2.DataWorker线程抽象线程抽象3.DataWorker3.DataWorker缓存缓存读读写分离写分离内存更小内存更小1.Smatcher1.Smatcher内存问题内存问题2.Java2.Java对象占用内存对象占用内存先预防,再优化先预防,再优化2008 BOCO Inter-Telecom Co. All rights reserved.告警统计效率优化告警统计效率优化for $ne in neListfor

9、$ne in neList id= ne.id id= ne.id cls=ne.object_class cls=ne.object_class alarm= alarmmap.get(id) alarm= alarmmap.get(id) /do some things /do some things 数据:数据:neList 1000wneList 1000w的网元集合,的网元集合,alarmMap10walarmMap10w的告警的告警mapmap问题:根据问题:根据object_classobject_class统计告警数统计告警数, ,执行慢执行慢方法:方法:jstackjstac

10、k,内存换效率,内存换效率1.1.替换耗时的方法。替换耗时的方法。 如:如:javajava的的crc32crc32换成换成 hadoophadoop里的里的crc32crc322.2.换一种思路实现,内存换效率换一种思路实现,内存换效率prepareprepare:neMapneMapfor entry in alarmMap.entrysetfor entry in alarmMap.entryset id= entry.key id= entry.key alarm= entry.value alarm= entry.value ne=neMap.get(id) ne=neMap.get

11、(id) cls=ne.object_classcls=ne.object_class /do some things /do some things 旧方案新方案2008 BOCO Inter-Telecom Co. All rights reserved.告警统计效率优化告警统计效率优化其他方法:使用其他方法:使用JavaVisualVM/JprofilerJavaVisualVM/Jprofiler查看方法耗时查看方法耗时2008 BOCO Inter-Telecom Co. All rights reserved.DW线程优化线程优化问题:问题:DealThreadDealThread

12、,SendDataThreadSendDataThread等都用等都用QueueQueue传递数据传递数据方法:抽象、继承方法:抽象、继承2008 BOCO Inter-Telecom Co. All rights reserved.DW线程优化线程优化修改前修改前修改后修改后2008 BOCO Inter-Telecom Co. All rights reserved.DW线程优化线程优化抽象后可以抽象后可以1.重复代码降低重复代码降低2.统一的异常判断,统一的异常判断,catch3.Package调整,统一的日志记录调整,统一的日志记录4.统一的统一的speed实现实现5.统一的心跳信息处

13、理统一的心跳信息处理2008 BOCO Inter-Telecom Co. All rights reserved.DW缓存优化缓存优化公共方法抽象公共方法抽象CacheCache分类实现分类实现读写分离读写分离2008 BOCO Inter-Telecom Co. All rights reserved.DW缓存优化缓存优化1.11.1个类个类20002000多行代码,好多重复操作,先抽象公共方法多行代码,好多重复操作,先抽象公共方法2008 BOCO Inter-Telecom Co. All rights reserved.Cache分类实现分类实现1.AlarmCache1.Alarm

14、Cache在在1406,ack1406,ack,14091409等各种消息里重复操作等各种消息里重复操作2.ClearCache2.ClearCache在在14061406,手动清除等各种消息重复操作,手动清除等各种消息重复操作2008 BOCO Inter-Telecom Co. All rights reserved.Cache分类实现分类实现1.AlarmCache1.AlarmCache封装了活动告警封装了活动告警/1409/1409/清除告警的插入,活动放清除告警的插入,活动放7 7天,清除天,清除3 3小时小时2.AlarmCFPCache2.AlarmCFPCache增加本地缓存

15、,提升查询效率增加本地缓存,提升查询效率2008 BOCO Inter-Telecom Co. All rights reserved.DW缓存优化缓存优化封装完,代码量依然很大,而且日志不方便,继续拆分:封装完,代码量依然很大,而且日志不方便,继续拆分:1.alarmService1.alarmService负责写操作,负责写操作,cacheServicecacheService负责读操作负责读操作2008 BOCO Inter-Telecom Co. All rights reserved.DW缓存优化缓存优化好处:好处:1.1.写和读分离写和读分离2.2.实时告警处理和告警查询日志分开实

16、时告警处理和告警查询日志分开3.3.写增加线程处理,读增加写增加线程处理,读增加cachecache处理处理2008 BOCO Inter-Telecom Co. All rights reserved.Smatcher内存问题内存问题问题:运行一段时间内存溢出问题:运行一段时间内存溢出方法:方法:jmapjmap2008 BOCO Inter-Telecom Co. All rights reserved.Smatcher内存问题内存问题1.1.zkClient$7就是监听数据变更的通知对象2.2.进一步查找:居然有1w多个监听器3.3.日志:不停的有新客户端注册过来,其实是一样的,新注册就

17、会添加listener。结论:查看代码修改注册机制结论:查看代码修改注册机制2008 BOCO Inter-Telecom Co. All rights reserved.Java对象占用内存了解对象占用内存了解原生类型原生类型(primitive type)(primitive type)的内存占用如下:的内存占用如下:Primitive TypePrimitive TypeMemory Required(bytes)Memory Required(bytes)boolean boolean 1 1byte byte 1 1short short 2 2char char 2 2int in

18、t 4 4float float 4 4long long 8 8double double 8 8referencereference类型在类型在3232位系统上每个占用位系统上每个占用4bytes, 4bytes, 在在6464位系统上每个占用位系统上每个占用8bytes8bytes。2008 BOCO Inter-Telecom Co. All rights reserved.100个个entries,cost8.6k,实际的实际的double=2*100*8=1.6k2008 BOCO Inter-Telecom Co. All rights reserved.Double=16+8,

19、double=8,67%额外开销额外开销2008 BOCO Inter-Telecom Co. All rights reserved.TreeMap包括包括:48bytes+n*40bytes(entry)2008 BOCO Inter-Telecom Co. All rights reserved.double包括包括:16+100*82008 BOCO Inter-Telecom Co. All rights reserved.扩大数据量到扩大数据量到1w2008 BOCO Inter-Telecom Co. All rights reserved.数据量增加额外开销并没有降低数据量增加

20、额外开销并没有降低2008 BOCO Inter-Telecom Co. All rights reserved.如果是如果是double,数据量增加额外开销可以忽略不计数据量增加额外开销可以忽略不计2008 BOCO Inter-Telecom Co. All rights reserved.结论:结论:1.1.集合带来便利的同时,有好多额外的开销集合带来便利的同时,有好多额外的开销2.2.选择适当的集合。选择适当的集合。3.3.setset底层为啥不用数组实现底层为啥不用数组实现?map?map?4.4.100w100w以上数据考虑第三方集合实现以上数据考虑第三方集合实现TroveTrove结束结束

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号