Java性能调优方法小结

常用优化方法:设计模式、缓冲(Buffer)、缓存(Cache)、对象池、并行、SQL和索引、NIO、负载均衡等。

1、设计模式
单例模式:确保系统中一个类只产生一个实例。
(1)可以省略创建对象所花费的时间,这对于那些重量级对象而言,是非常可观的一笔系统开销。
(2)对系统内存的使用频率也会降低,这将减轻GC压力,缩短GC停顿时间。
典型的例子就是读取系统中的配置文件。

享元模式:一个系统中存在多个相同的对象,只需要共享一个对象的拷贝,而不必每次都创建新的对象。
(1)可以节省重复创建对象的开销,相同的对象只会创建一次。
(2)创建的对象减少可以减少内存需求,降低GC压力。

代理模式:用代理对象完成用户请求,屏蔽用户对真实对象的访问。使用代理模式的延迟加载,可以提升系统性能和反应速度。
典型应用Hibernate延迟加载。

2、缓存
对于那些经常要使用而又不大变化的对象或数据,可以把它存储在高速缓存中。这样就可以提高访问的速度。这一点对于从数据库中返回的结果集尤其重要。
包括数据缓存和页面缓存。
适合使用数据缓存的有系统参数、数据字典、菜单、地区、分类等。用的比较多的缓存框架有:EHCache、MemCacheed、OSCache等。

3、对象池
如果一个类被频繁请求使用,将这个类的一些实例保存在一个“池”中,待需要使用的时候直接从池中获取,不必每次都生成一个实例。使用最多的是线程池和数据库连接池。

4、并行代替串行
最大化地发挥CPU的潜能。

5、代码优化
(1)StringBuffer或StringBuilder代替String,StringTokenizer分割字符串。
(2)使用Buffer进行IO操作。
缓冲区是一块特定的内存区域,通过缓解应用程序上下层之间的性能差异。上层组件不需要等待下层组件真实的接收全部数据,即可返回,加快了上层组件的处理速度,从而提高系统性能。
IO缓冲功能。
(3)多使用局部变量,局部变量保存在栈中速度较快。静态变量、实例变量都在堆中创建。
(4)循环体内尽量不要定义变量、或出现try-catch语句。
(5)位移代替乘除运算。

6、SQL和索引

衡量查询开销的三个指标:响应时间、扫描的行数、返回的行数。

优化方向:索引、数据库缓存、网络开销。

(1)条件查询字段、排序字段创建索引。索引的好处:大大减少了服务器需要扫描的数据量;帮助服务器避免排序和临时表;将随机I/O变为顺序I/O。

(2)确保GROUPBY和ORDER BY中的表达式只涉及到一个表中的列,这样才有可能使用索引来优化这个过程。

(3)WHERE子句中避免无效的过滤条件,避免不匹配的比较类型。比如int类型的字段,等于号右边却添加‘’,这样索引可能就不能起作用。

(4)分解复杂关联查询,如三表以上的关联。分解关联查询的好处:缓存的效率更高;减少锁竞争;查询本身效率提示。

(5)使用“?”代替参数,避免拼字符串的SQL。便于SQL缓存。

(6)统一、规范SQL写法:关键字大写,表名、字段名小写。SQL执行计划可以被缓存重用,相同的SQL,下一次查询的时候可能就不需要进行SQL解析了。

(7)只查询需要的列,避免使用“*”,特别是需要排序的query。减少网络开销。


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值