• 笔记: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、












  • 相关阅读:
    MongoDB 时间截取、字符串截取、拼接(时间戳、字符串等)
    ClickHouse 参数配置
    C++函数调用栈的变化分析
    WPF中为button添加快捷键(ShortCut)的方法
    vscode中一些好用的插件介绍
    剑指Offer 2. 青蛙跳台阶问题
    切片Slice的使用
    剑指Offer 1. 斐波那契数列
    match_parent和wrap_content的区别
    字节流、字符流
  • 原文地址:https://www.cnblogs.com/leeeee/p/7276290.html
Copyright © 2020-2023  润新知