赞
踩
1.1性能概述
1.1.1 一般来说,程序的性能的表现方面:
执行速度
内存分配
启动时间
负载承受能力
1.1.2 性能参考指标:
执行时间
CPU时间
内存分配
磁盘吞吐量
网络吞吐量
响应时间
1.1.3 木桶原理与性能瓶颈
最有可能成为性能瓶颈的环节:
磁盘IO
网络操作
CPU
异常
数据库
锁竞争
内存
1.1.4 Amdahl定律
加速比=优化前系统耗时/优化后系统耗时
Amdahl定律:
加速比speedup<=1/(F+(1-F)/N)
其中N为CPU处理器数量,F为系统内必须串行化的程序比重。由此可见,为了提高系统的运行速度,仅仅增加N,是不能提高运行速度的,从根本上修改程序的串行化行为,提高系统内并行模块的占比,才行。
1.2性能调优层次:
1.2.1设计调优
1.2.2代码调优
1.2.3JVM调优
1.2.4数据库调优:
1.应用层SQL优化;
2.数据库优化;
3.数据库软件优化;
1.2.5操作系统调优:
共享内存段、信号量、共享内存最大值(shmmax)、共享内存最小值(shmmin)、最大文件句柄数、虚拟内存大小、磁盘块大小。
1.3基本调优策略和手段
2.1善用设计模式
2.1.1单例模式
代理模式
享元模式
装饰者模式
观察者模式
value object模式
业务代理模式
2.2常用的优化组件和方法
2.2.1缓冲buffer
缓冲区是一块特定的内存区域;缓冲区不宜过大,浪费系统内存,增加GC负担;
缓存cache,WeakHashMap;EHCache数据缓存解决方案,OSCache,可用于缓存任何对象,JBossCache可用于JBoss集群间数据共享的缓存框架;EHCache的缺点是缓存组件和业务层代码紧密耦合,依赖性太强;基于动态代理的缓存;
对象复用-池:线程池,数据库连接池;适用场景:创建耗时的大对象,节省获取对象实例的成本,减少GC负担;生成实例成本小的对象,使用池的方式,得不偿失;JDK new操作的效率很高,但是new操作所调用的类的构造函数可能很耗时;apache commons-pool对象池组件,对象池接口ObjectPool,PoolableObjectFactory,内置三个对象池,StackObjectPool,GenericObjectPool,SoftReferenceObjectPool;
并行代替串行
负载均衡,Apache+Tomcat集群搭建负载均衡解决方案,Session共享模式,黏性Session模式和复制Session模式;跨JVM分布式缓存框架Terracotta,可以实现Tomcat的Session共享;
时间换空间,看系统的性能瓶颈是什么,空间是瓶颈,则采用时间换空间;
空间换时间
3.1字符串优化处理
3.1.1 String对象及其特点
String对象的优化:
1.不变性
不变性:String对象一旦生成,则不能对它进行改变。
2.针对常量池的优化
3.类的final定义
String对象的内部结构:
char数组
offset偏移量
count长度
3.1.2 subString()方法的内存泄露漏
String提供了2个截取字符子串的方法:
public String substring(int beginIndex)
public String substring(int beginIndex,int endIndex)
3.1.3 字符串的分割和查找
字符串分割方法:
public String[] split(String regex)
1.最原始字符串分割
String str;
StringBuffer sb=new StringBuffer();
for(int i=0;i<10000;i++) {
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。