说到性能调优,给人的感觉往往都是修炼有成的专家干得事了,对于我们这些菜鸟还是想也不要想了,做好分内事,不出现纰漏就OK了。对于这种观点我表示严肃的否决!那想学习性能调优的童鞋应该从哪里下手呢?接下来就让我们来谈谈关于性能调优你所忽视的一些常识。
一、代码;
前文讲过“华为Java编程军规,每季度代码验收标准”这个标准是衡量代码本身的缺陷,也是衡量一个研发人员本身的价值。代码是性能调优中的一粒分子,分子虽小但经过上亿次的分裂也会变成黑洞,所以代码本身的缺陷也是我们性能调优的主因之一。
军规一:【避免在程序中使用魔鬼数字,必须用有意义的常量来标识。】 军规二:【明确方法的功能,一个方法仅完成一个功能。】 军规三:【方法参数不能超过5个】 军规四:【方法调用尽量不要返回null,取而代之以抛出异常,或是返回特例对象(SPECIAL CASE object,SPECIAL CASE PATTERN);对于以集合或数组类型作为返回值的方法,取而代之以空集合或0长度数组。】 军规五:【在进行数据库操作或IO操作时,必须确保资源在使用完毕后得到释放,并且必须确保释放操作在finally中进行。】 军规六:【异常捕获不要直接catch (Exception ex) ,应该把异常细分处理。】 军规七:【对于if ? else if ?(后续可能有多个else if …)这种类型的条件判断,最后必须包含一个else分支,避免出现分支遗漏造成错误;每个switch-case语句都必须保证有default,避免出现分支遗漏,造成错误。】 军规八:【覆写对象的equals()方法时必须同时覆写hashCode()方法。】 军规九:【禁止循环中创建新线程,尽量使用线程池。】 军规十:【在进行精确计算时(例如:货币计算)避免使用float和double,浮点数计算都是不精确的,必须使用BigDecimal或将浮点数运算转换为整型运算。】
注:“华为Java编程军规,每季度代码验收标准”详见:http://www.cnblogs.com/Javame/p/3513670.html
二、基准;
基准环境,基准负载和基准指标,这是前提也是标准更是依据。没有人能保证每次执行的指标就是真实有效的,今天提交个版本明天升级个环境这是我们不能容忍的。怎么才能基准?什么又叫基准?正式的标准的稳定版本就是基准。也只有基准了,我们才能发现问题。
三、硬件;
硬件环境的调整:主要是对系统运行的硬件环境进行调整,包括改变系统运行的服务器、主机设备环境(改用具有更高性能的机器,或是调整某些服务器的物理内存总量,CPU数量等),调整网络环境(更换快速的网络设备,或是采用更高带宽的组网技术)等。
注:“工作经验总结:百万数据引发的性能瓶颈问题”http://www.cnblogs.com/Javame/p/3510641.html
四、系统;
系统设置的调整:主要是对系统运行的基础平台设置进行调整,例如,根据应用需要调整UNIX系统的核心参数,调整数据库的内存池大小,调整应用服务器使用的内存大小,或是采用更高版本的JVM环境等;
注:推荐常有性能测试工具
性能测试工具:LR、kylinPET
系统监控工具:nmon 或Linux(top sar)等自带命令
强烈推荐:Spotlight.On.Oracle 非常不错的工具,谁用谁知道! ^^
五、软件;
应用框架的调整:主要是对应用实现本身进行调整,包括选用新的架构、采用新的数据访问或是修改业务逻辑的实现方式等。
注:说到架构我现在正在研究阿里巴巴的Dubbo,有兴趣的朋友可以一起探讨探讨。
“通过dubbo暴露接口调用方法,及基于zookeeper的dubbo涉及配置文件”http://www.cnblogs.com/Javame/p/3645481.html “基于ZooKeeper的Dubbo注册中心”http://www.cnblogs.com/Javame/p/3632708.html “最近项目用到Dubbo框架,临时抱佛脚分享一下共探讨”http://www.cnblogs.com/Javame/p/3632473.html
简述以上五点,你可以循序渐进依步调优,也可以着重调优,但有一点你却要牢记,那就是软件工程的概论,有一才有二,有因才有果,到头来千万不要拣了芝麻丢了西瓜。
吐槽:南京工资低房价高,像我们这些高技术想要有活路,还是要创业。
/**
* @author wonter
* <b>描述:</b> 敏捷测试团队,不再仅仅是在coding之后。而是和研发人员贯穿在需求分析、规格说明、自动化单元测试、自动化验收测试、静态代码分析、技术债等环节中。所以敏捷项目必定在将来效率的趋势 * 下成为主流。<br>
* <b>博客:</b> http://www.cnblogs.com/javame <br>
* <b>邮件:</b> yiyu1@163.com <br>
原文:http://www.cnblogs.com/Javame/p/3663805.html