您的位置:首页 > 编程语言 > Java开发

笔记:Java程序性能优化

2014-12-24 14:38 453 查看
一、设计模式

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、
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: