笔记:Java程序性能优化

一、设计模式

1、单例模式

对于频繁使用的对象,可以省略创建对象所花费的时间,减少内存使用频率,减轻GC压力。

单例模式相比静态类的优势:可以继承、被继承、实现接口,面向对象风格;静态类不行,是面向过程风格的。


2、代理模式

因为安全原因,屏蔽客户端直接访问真实对象;远程调用,隐藏远程调用的细节;提升性能,实现延迟加载 (如 Hibernate )

实现方式:JDK动态代理、CGLIB等


3、享元模式

节省重复创建对象的开销;对系统内存要求少,GC压力小。


4、装饰者模式

既继承又委托。动态添加对象功能。如加缓冲优化IO:FileOutputStream -> BufferedOutputStream


5、观察者模式

UI上的Onclick 事件,JMS 的onMessage 事件等。


二、优化组件和方法

1、缓冲 Buffer

如IO中的BufferWriter,BufferReader 等


2、缓存 Cache

EHCache、OSCache等


3、对象复用池

数据库连接池 C3P0 、DBCP 等


4、负载均衡

Apache + Tomcat 集群,Session 可以复制 (但是容易造成网络繁忙)。

Terracotta + Tomcat 集群,实现Session共享,效率高。


5、事件换空间:

不引入多余变量,实现数字 a、b 交互

a = a+b; (此时1为和sum)

b= a-b;   (sum- 旧b =旧a)

a= a-b;     (sum- 新B =  sum - 旧A = 旧B =新A )


6、空间换时间

比如缓存。


三、字符串优化

1、字符串分割

StringTockenizer 比直接的split() 方法好


2、StringBuffer 、StringBuilder

StringBuffer 同步 、StringBuilder 非同步。

在初始化时候指定容量,如  new StringBuilder (20);



四、核心数据结构优化

1、List

ArrayList 基于数组、LinkedList 基于链表


2、Map

HashMap:基于hash算法

LinkedHashMap:有序的HashMap,按照插入顺序排序

TreeMap:继承自SortedMap,基于红黑树(一种平衡二叉树),可以自定义排序规则 (元素继承Coparable)


3、Set:  Set 是Map 的一种封装,其内部实现跟Map相同

HashSet:基于hash算法

LinkedHashSet: 有序的HashSet,按照插入顺序排序

TreeSet: 继承自SortedSet,基于红黑树(一种平衡二叉树),可以自定义排序规则 (元素继承Coparable)


4、NIO

DirectBuffer 可以直接访问系统物理内存,不需要在JVM的堆上分配空间,铜过设置 -XX:MaxDirectMemorySize=100M 设置


5、引用类型

强引用:

软引用:

弱引用:例子,WeakHashMap,可以作为缓存

虚引用:


6、其他编码技巧

慎用异常

成员变量转化为局部变量

位移运算代替乘除法

使用arrayCopy


五、并行程序设计模式


1、Future 模式

Future 用于实现Callable 接口的class中

FutureTask 既实现 Callable 又实现 Runnable


2、  Master-Worker 模式


3、Guarded Suspension 模式


4、不变模式


5、生产者-消费者模式


六、JDK多任务框架


1、简单线程池实现


2、Executor 框架


3、自定义线程池、扩展ThreadPoolExecutor


七、JDK 并发集合


1、CopyOnWriteArrayList、CopyOnWriteArraySet


2、ConcurrentHashMap


3、ConcurrentLinkedQueue


4、LinkedBlockingQueu  用于生产者-消费者模式


5、LinkedBlockingDeque


八、并发控制方法


1、volatile


2、synchronized


3、Lock、ReadWriteLock


4、Condition


5、Semaphore


6、ThreadLocal


九、锁的优化

1、避免死锁


2、减小锁持有时间


3、减小锁粒度


4、读写锁分离来替换独占锁


5、锁分离




十、JVM 调优


1、

2、

3、












 

posted @ 2014-12-24 14:38  lihui1625  阅读(127)  评论(0编辑  收藏  举报