Java程序性能优化:让你的Java程序更快、更稳定.pdf

Java程序性能优化:让你的Java程序更快、更稳定.pdf
 

书籍描述

编辑推荐
《Java程序性能优化:让你的Java程序更快、更稳定》适合所有Java程序员、软件设计师、架构师以及软件开发爱好者,对于有一定经验的Java工程师,《Java程序性能优化:让你的Java程序更快、更稳定》更能帮助突破技术瓶颈,深入Java内核开发!一个优秀的程序员,不仅要会编写程序,更要会编写高质量的程序感受Java开发中的大智慧,让你的Java程序更优美。专注于Java应用程序的优化方法、技巧和思想,深入剖析软件设计层面、代码层面、JVM虚拟机层面的优化方法。

作者简介
葛一鸣,毕业于浙江工业大学,获得了计算机软件与理论专业硕士学位。取得了国家认证系统分析师职称,通过了Oracle数据库认证专家(OCP)考试。现就职于UT斯达康通讯有限公司,从事Java软件开发。有多年的软件开发经验,参与开发过多个软件项目。熟悉Java、PHP、MySQL、Oracle等开发语言和数据库,对Java软件开发、性能优化、分布式软件有着浓厚的兴趣和深入的研究。在校期间曾经发表过多篇技术论文。

目录
第1章Java性能调优概述
1.1性能概述
1.1.1看懂程序的性能
1.1.2性能的参考指标
1.1.3木桶原理与性能瓶颈
1.1.4Amdahl定律
1.2性能调优的层次
1.2.1设计调优
1.2.2代码调优
1.2.3JVM调优
1.2.4数据库调优
1.2.5操作系统调优
1.3基本调优策略和手段
1.3.1优化的一般步骤
1.3.2系统优化注意事项
1.4小结
第2章设计优化
2.1善用设计模式
2.1.1单例模式
2.1.2代理模式
2.1.3享元模式
2.1.4装饰者模式
2.1.5观察者模式
2.1.6Value Object模式
2.1.7业务代理模式
2.2常用优化组件和方法
2.2.1缓冲(Buffer)
2.2.2缓存(Cache)
2.2.3对象复用——“池”
2.2.4并行替代串行
2.2.5负载均衡
2.2.6时间换空间
2.2.7空间换时间
2.3小结
第3章Java程序优化
3.1字符串优化处理
3.1.1String对象及其特点
3.1.2subString()方法的内存泄漏
3.1.3字符串分割和查找
3.1.4StringBuffer和StringBuilder
3.2核心数据结构
3.2.1List接口
3.2.2Map接口
3.2.3Set接口
3.2.4优化集合访问代码
3.2.5RandomAccess接口
3.3使用NIO提升性能
3.3.1NIO的Buffer类族和Channel
3.3.2Buffer的基本原理
3.3.3Buffer的相关操作
3.3.4MappedByteBuffer性能评估
3.3.5直接内存访问
3.4引用类型
3.4.1强引用
3.4.2软引用
3.4.3弱引用
3.4.4虚引用
3.4.5WeakHashMap类及其实现
3.5有助于改善性能的技巧
3.5.1慎用异常
3.5.2使用局部变量
3.5.3位运算代替乘除法
3.5.4替换switch
3.5.5一维数组代替二维数组
3.5.6提取表达式
3.5.7展开循环
3.5.8布尔运算代替位运算
3.5.9使用arrayCopy()
3.5.10使用Buffer进行I∕O操作
3.5.11使用clone()代替new
3.5.12静态方法替代实例方法
3.6小结
第4章并行程序开发及优化
4.1并行程序设计模式
4.1.1Future模式
4.1.2Master—Worker模式
4.1.3Guarded Suspension模式
4.1.4不变模式
4.1.5生产者—消费者模式
4.2JDK多任务执行框架
4.2.1无限制线程的缺陷
4.2.2简单的线程池实现
4.2.3Executor框架
4.2.4自定义线程池
4.2.5优化线程池大小
4.2.6扩展ThreadPoolExecutor
4.3JDK并发数据结构
4.3.1并发List
4.3.2并发Set
4.3.3并发Map
4.3.4并发Queue
4.3.5并发Deque
4.4并发控制方法
4.4.1Java内存模型与volatile
4.4.2同步关键字synchronized
4.4.3ReentrantLock重入锁
4.4.4ReadWriteLock读写锁
4.4.5Condition对象
4.4.6Semaphore信号量
4.4.7ThreadLocal线程局部变量
4.5“锁”的性能和优化
4.5.1线程的开销
4.5.2避免死锁
4.5.3减小锁持有时间
4.5.4减小锁粒度
4.5.5读写分离锁来替换独占锁
4.5.6锁分离
4.5.7重入锁(ReentrantLock)和内部锁(synchronized)
4.5.8锁粗化(LockCoarsening)
4.5.9自旋锁(Spinning Lock)
4.5.10锁消除(Lock Elimination)
4.5.11锁偏向(BiasedLock)
4.6无锁的并行计算
4.6.1非阻塞的同步∕无锁
4.6.2原子操作
4.6.3Amino框架介绍
4.6.4Amino集合
4.6.5Amino树
4.6.6Amino图
4.6.7Amino简单调度模式
4.7协程
4.7.1协程的概念
4.7.2Kilim框架简介
4.7.3Task及其状态
4.7.4Fiber及其状态
4.7.5Kilim开发环境配置
4.7.6Kilim之Hello World
4.7.7多任务通信
4.7.8Kilim实例及性能评估
4.8小结
第5章JVM调优
5.1 Java虚拟机内存模型
5.1.1程序计数器
5.1.2Java虚拟机栈
5.1.3本地方法栈
5.1.4Java堆
5.1.5方法区
5.2JVM内存分配参数
5.2.1设置最大堆内存
5.2.2设置最小堆内存
5.2.3设置新生代
5.2.4设置持久代
5.2.5设置线程栈
5.2.6堆的比例分配
5.2.7堆分配参数总结
5.3垃圾收集基础
5.3.1垃圾收集的作用
5.3.2垃圾回收算法与思想
5.3.3垃圾收集器的类型
5.3.4评价GC策略的指标
5.3.5新生代串行收集器
5.3.6老年代串行收集器
5.3.7并行收集器
5.3.8新生代并行回收(Parallel Scavenge)收集器
5.3.9老年代并行回收收集器
5.3.10CMS收集器
5.3.11G1收集器(Garbage First)
5.3.12Stop the World案例
5.3.13收集器对系统性能的影响
5.3.14GC相关参数总结
5.4常用调优案例和方法
5.4.1将新对象预留在新生代
5.4.2大对象进入老年代
5.4.3设置对象进入老年代的年龄
5.4.4稳定与震荡的堆大小
5.4.5吞吐量优先案例
5.4.6使用大页案例
5.4.7降低停顿案例
5.5实用JVM参数
5.5.1JIT编译参数
5.5.2堆快照(堆Dump)
5.5.3错误处理
5.5.4取得GC信息
5.5.5类和对象跟踪
5.5.6控制GC
5.5.7选择类校验器
5.5.8Solaris下线程控制
5.5.9使用大页
5.5.10压缩指针
5.6实战JVM调优
5.6.1Tomcat简介与启动加速
5.6.2Web应用程序介绍
5.6.3JMeter介绍与使用
5.6.4调优前Web应用运行状况
5.6.5调优过程
5.7总结
……
第6章Java性能调优工具

文摘
版权页:

Java程序性能优化:让你的Java程序更快、更稳定

插图:

Java程序性能优化:让你的Java程序更快、更稳定

当使用有界的任务队列时,若有新的任务需要执行,如果线程池的实际线程数小于corePoolSize,则会优先创建新的线程,若大于corePoolSize,则会将新任务加入等待队列。若等待队列已满,无法加入,则在总线程数不大于maximumPoolSize的前提下,创建新的进程执行任务。若大于maximumPoolSize,则执行拒绝策略。可见,有界队列仅当任务队列装满时,才可能将线程数提升到corePoolSize以上,换言之,除非系统非常繁忙,否则确保核心线程数维持在corePoolSize。
口无界的任务队列:无界任务队列可以通过LinkedBlockingQueue类实现。与有界队列相比,除非系统资源耗尽,否则无界的任务队列不存在任务入队失败的情况。当有新的任务到来,系统的线程数小于corePoolSize时,线程池会生成新的线程执行任务,但当系统的线程数达到corePoolSize后,就不会继续增加。若后续仍有新的任务加入,而又没有空闲的线程资源,则任务直接进入队列等待。若任务创建和处理的速度差异很大,无界队列会保持快速增长,直到耗尽系统内存。
优先任务队列:优先任务队列是带有执行优先级的队列,它通过PriorityBlocking—Queue实现。可以控制任务的执行先后顺序,是一个特殊的无界队列。无论是有界队列ArrayBlockingQueue,还是未指定大小的无界队列LinkedBlockingQueue都是按照先进先出算法处理任务的。而PriorityBlockingQueue则可以根据任务自身的优先级顺序先后执行,在确保系统性能的同时,也能有很好的质量保证(总是确保高优先级的任务先执行)。
回顾newFixedThreadPool()方法的实现,它返回了一个corePoolSize和maximum—PoolSize大小一样的、并且使用了LinkedBlockingQueue任务队列的线程池。因为对于固定大小的线程池而言,不存在线程数量的动态变化,因此corePoolSize和maximumPoolSize可以相等。同时,它使用无界队列存放无法立即执行的任务。当任务提交非常频繁的时候,该队列可能迅速膨胀,从而耗尽系统资源。
newSingleThreadExecutor()返回的单线程线程池,是newFixedThreadPool()方法的一种退化,只是简单地将线程池线程数量设置为1。

内容简介
《Java程序性能优化:让你的Java程序更快、更稳定》以Java性能调优为主线,系统地阐述了与Java性能优化相关的知识与技巧。《Java程序性能优化:让你的Java程序更快、更稳定》共6章,先后从软件设计、软件编码、JVM调优以及程序故障排除等方面介绍针对Java程序的优化方法。第1章介绍性能的基本概念、定律、系统调优的过程和注意事项;第2章从设计层面介绍与性能相关的设计模式、组件。第3章从代码层面介绍如何编写高性能的Java程序;第4章介绍并行开发和如何通过多线程提高系统性能;第5章立足于JVM虚拟机层面,介绍如何通过设置合理的JVM参数提升Java程序的性能;第6章为工具篇,介绍获取和监控程序或系统性能指标的各种工具,包括相关的故障排查工具。

购买书籍

当当网购书 京东购书 卓越购书

PDF电子书下载地址

相关书籍

搜索更多