编写高效优雅安全Java程序的常见原则
面向对象
-
构造器参数太多的情况下选择合适的数据类型代替
-
不需要实例化的类应该构造器私有化
-
不要创建不必要的对象
-
避免使用终结方法
-
使类和成员的可访问性最小化
-
使可变性最小化
-
优先使用复合
-
接口优于抽象类
方法
-
可变参数要谨慎使用
-
返回零长度的数组或集合, 不要返回null
-
优先使用标准的异常
通用程序设计
-
用枚举代替int常量
-
将局部变量的作用域最小化
-
精确计算,避免使用float和double
-
当心字符串连接的性能
-
控制方法的大小
深入了解性能优化
影响一个系统性能的方方面面
常用的性能评价、测试指标
-
响应时间
提交请求和返回该请求的响应之间使用的时间,一般比较关注平均响应时间。
如:数据库查询话费的时间,将字符回显到终端上话费的时间,访问Web页面话费的时间;
-
并发数
指同一时刻:对服务器有实际交互的请求数。和网站在线用户数的关联。
-
吞吐量
对单位时间内完成的工作量(请求)的量度.
如:每分钟的数据库事务,每秒传送的文件千字节数,每分钟的Web服务器命中数。
-
关系
通常,平均响应时间越短,系统吞吐量越大;平均响应时间越长,系统吞吐量越小。但是,系统吞吐量越大,未必平均响应时间越短。
常用的性能优化手段
总原则:避免过早优化,进行系统性能测试,寻找系统瓶颈,分而治之,逐步优化。
前端优化
-
浏览器:减少请求数,使用客户端缓存,启用压缩,资源文件加载顺序,减少Cookie传输。
-
CDN加速
-
反向代理缓存
-
Web组件分离
应用服务性能优化
缓存
网站性能优化第一定律:优先考虑使用缓存优化性能
集群
异步
Servlet异步,多线程,消息队列
程序
代码级别
-
选择合适的数据结构
-
选择更优的算法
-
编写更少的代码
-
参见《编写高效优雅Java代码》
并发编程
-
充分利用CPU多核,尽量使用线程池,合理设置线程数量,尽量使用JDK提供的各种并发框架和工具
-
实现线程安全的类,避免线程安全问题
-
同步下减少锁的竞争(缩小锁的范围,减少锁的粒度。替换独占锁,读写锁,CAS代替锁,ThreadLocal等等。)
资源复用
-
减少开销很大的系统资源的创建和销毁(单例模式,池化技术)
JVM
-
与JIT编译器相关的优化
-
GC调优
存储性能优化
-
尽量使用SSD
-
定时清理数据或者按数据的性质分开存放
-
结果集处理
标题:性能优化的方方面面
地址:http://blog.ivan.group/article/22
文章转载自:Ivan | 晏飞个人博客 [http://blog.ivan.group]