设为首页 加入收藏

TOP

Java 程序优化 (读书笔记)(二)
2017-10-13 10:40:36 】 浏览:6181
Tags:Java 程序 优化 读书 笔记
sp;   4.1 并行程序设计模式

        Future 模式 : 提高响应速度

        Master_worker 模式 : 子任务分配,提高响应速度 

        Guarded Suspension 模式 : 队列缓冲,非立即处理,避免因为请求太多而崩溃

        不变模式 : 类似String/Double...不需要同步,线程安全

        生产者消费者模式 : 缓解两者间的性能差

    4.2 JDK多任务执行框架

        无限制线程的缺陷

        简单的线程池

        Exector 框架

        自定义线程池 : ThreadPoolExecutor

        优化线程池大小 : n = Ncpu * Ucpu *(1 +W/C)

        扩展 ThreadPoolExector

    4.3 JDK并发数据结构

        并发 list : CopyOnWriteArrayList

        并发 Set : CopyOnWriteArraySet

        并发 Map : ConcurrentHashMap

        并发 Queue : ConcurrentLinkedQueue (使用CAS无锁) / LinkedBlockingQueue

        并发 Deque : LinkedBlockingDeque (读写都加锁)

    4.4 并发控制方法 

        Java内存模型与 volatile

        同步关键字 synchronized

        ReentrantLock 重入锁

        ReentrantReadWriteLock 读写锁 (并读串写)

        Condition 对象

        Semaphore 信号量 (限制最大访问线程数)

        ThreadLocal 线程局部变量

    4.5 锁的性能和优化

        线程的开销

        避免死锁

        减小锁持有时间

        减小锁粒度

        读写分离锁来替换独占锁

        锁分离 (LinkedBlockingQueue)

        重入锁 (ReentrantLock) 和内部锁(Synchronized)

        锁粗化 Lock Coarsening (多次重复请求消耗资源)

        自旋锁 Spinning Lock (执行空循环来减少被挂起的次数)

        锁消除 Lock Elimination (消除不必要的锁)

        锁偏向 Biased Lock (高并发效率低)

    4.6 无锁的并行计算

        非阻塞的同步/无锁 (基于CAS)

        原子操作 (java.util.concurrent.atomic)

        Amino 框架 : 提供现成安全的,基于无锁的数据结构,内置了多线程调度模式。 

        Amino 集合 : LockFreeList(linked)/LockFreeVector(ArrayList); LockFreeSet

        Amino 树 : LockFreeBSTree(二叉搜索树)

        Amino 图 : UndirectedGraph<E> / DirectedGraph<E>

        Amino 简单调度模式 : Master_worker (静态/动态)

    4.7 协程

        协程的概念 : 进程的分割式线程,线程的分割是协程 

        Kilim 框架 : 当需要大量线程时,使用协程能提高性能,降低线程维护切换的性能

 

5. JVM调优

    5.1 Java 虚拟机内存模型

        程序计数器 : 线程私有的内存空间,互不影响; 当执行java方法,程序计数器为Java字节码地址,当执行native方法程序计数器为空

        Java虚拟机栈 : 线程私有的内存空间, 用于管理Java函数调用, -Xss1M

        本地方法栈 : 管理本地方法调用

        Java堆 : 分为新生代和老年代两部分

        方法区 : 和Java堆一样被所有线程共享;包括类的类型信息,常量池,域信息,方法信息,也叫永久区

    5.2 JVM 内存分配参数

        -Xmx : 设置最大堆内存

        -Xms : 设置初始堆内存

        -Xss : 设置线程栈 (使用系统内存,堆空间分配越大,线程总数越少) JDK5.0以后每个线程堆栈大小为1M,以前每个线程堆栈大小为256K

        -Xmn : 设置新生代 (一般为堆空间的1/4~1/3 )

        -XX:NewSize : 设置初始新生代空间

        -XX:MaxNewSize : 设置最大新生代空间   &

首页 上一页 1 2 3 4 5 6 7 下一页 尾页 2/7/7
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇PHP设计模式(八)桥接模式(Brid.. 下一篇RabbitMq应用一

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目