zoukankan      html  css  js  c++  java
  • 笔记: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、












  • 相关阅读:
    LeetCode 230. Kth Smallest Element in a BST
    LeetCode 114. Flatten Binary Tree to Linked List
    LeetCode 222. Count Complete Tree Nodes
    LeetCode 129. Sum Root to Leaf Numbers
    LeetCode 113. Path Sum II
    LeetCode 257. Binary Tree Paths
    Java Convert String & Int
    Java Annotations
    LeetCode 236. Lowest Common Ancestor of a Binary Tree
    LeetCode 235. Lowest Common Ancestor of a Binary Search Tree
  • 原文地址:https://www.cnblogs.com/leeeee/p/7276290.html
Copyright © 2011-2022 走看看