1、设计模式算法
一、单例模式:数据库
对于频繁使用的对象,能够省略建立对象所花费的时间,减小内存使用频率,减轻GC压力。设计模式
单例模式相比静态类的优点:能够继承、被继承、实现接口,面向对象风格;静态类不行,是面向过程风格的。数组
二、代理模式:缓存
由于安全缘由,屏蔽客户端直接访问真实对象;远程调用,隐藏远程调用的细节;提高性能,实现延迟加载 (如 Hibernate )。安全
实现方式:JDK动态代理、CGLIB等网络
三、享元模式:数据结构
节省重复建立对象的开销;对系统内存要求少,GC压力小。并发
四、装饰者模式:负载均衡
既继承又委托。动态添加对象功能。如加缓冲优化IO:FileOutputStream -> BufferedOutputStream
五、观察者模式:
UI上的Onclick 事件,JMS 的onMessage 事件等。
2、优化组件和方法
一、缓冲 Buffer:
如IO中的BufferWriter,BufferReader 等
二、缓存 Cache:
EHCache、OSCache等
三、对象复用池:
数据库链接池 C3P0 、DBCP 等
四、负载均衡:
Apache + Tomcat 集群,Session 能够复制 (可是容易形成网络繁忙)。
Terracotta + Tomcat 集群,实现Session共享,效率高。
五、事件换空间:
不引入多余变量,实现数字 a、b 交互
a = a+b; (此时1为和sum)
b= a-b; (sum- 旧b =旧a)
a= a-b; (sum- 新B = sum - 旧A = 旧B =新A )
六、空间换时间
好比缓存。
3、字符串优化
一、字符串分割
StringTockenizer 比直接的split() 方法好
二、StringBuffer 、StringBuilder
StringBuffer 同步 、StringBuilder 非同步。
在初始化时候指定容量,如 new StringBuilder (20);
4、核心数据结构优化
一、List
ArrayList 基于数组、LinkedList 基于链表
二、Map
HashMap:基于hash算法
LinkedHashMap:有序的HashMap,按照插入顺序排序
TreeMap:继承自SortedMap,基于红黑树(一种平衡二叉树),能够自定义排序规则 (元素继承Coparable)
三、Set: Set 是Map 的一种封装,其内部实现跟Map相同
HashSet:基于hash算法
LinkedHashSet: 有序的HashSet,按照插入顺序排序
TreeSet: 继承自SortedSet,基于红黑树(一种平衡二叉树),能够自定义排序规则 (元素继承Coparable)
四、NIO
DirectBuffer 能够直接访问系统物理内存,不须要在JVM的堆上分配空间,铜过设置 -XX:MaxDirectMemorySize=100M 设置
五、引用类型
强引用:
软引用:
弱引用:例子,WeakHashMap,能够做为缓存
虚引用:
六、其余编码技巧
慎用异常
成员变量转化为局部变量
位移运算代替乘除法
使用arrayCopy
5、并行程序设计模式
一、Future 模式
Future 用于实现Callable 接口的class中
FutureTask 既实现 Callable 又实现 Runnable
二、 Master-Worker 模式
三、Guarded Suspension 模式
四、不变模式
五、生产者-消费者模式
6、JDK多任务框架
一、简单线程池实现
二、Executor 框架
三、自定义线程池、扩展ThreadPoolExecutor
7、JDK 并发集合
一、CopyOnWriteArrayList、CopyOnWriteArraySet
二、ConcurrentHashMap
三、ConcurrentLinkedQueue
四、LinkedBlockingQueu 用于生产者-消费者模式
五、LinkedBlockingDeque
8、并发控制方法
一、volatile
二、synchronized
三、Lock、ReadWriteLock
四、Condition
五、Semaphore
六、ThreadLocal
9、锁的优化
一、避免死锁
二、减少锁持有时间
三、减少锁粒度
四、读写锁分离来替换独占锁
五、锁分离
10、JVM 调优
一、
二、
三、