《Java程序性能优化 让你的Java程序更快、更稳定》PDF下载

  • 购买积分:13 如何计算积分?
  • 作  者:葛一鸣等编著
  • 出 版 社:北京:清华大学出版社
  • 出版年份:2012
  • ISBN:9787302296256
  • 页数:400 页
图书介绍:本书介绍基于Java应用程序的性能调优技巧和策略。共分6章。第1章主要对Java性能调优进行系统性的概述。第2章从设计角度阐述有助于改善系统性能的组件、设计技巧和设计模式。第3章从代码层面总结如何使用Java编写高效应用软件。第4章从并行计算的角度出发介绍基于Java的并行程序设计方法和并行程序调优手段。第5章从JVM系统层介绍如何优化Java应用软件。第6章介绍在Java应用程序调优过程中用到的工具。

第1章Java性能调优概述 1

1.1性能概述 1

1.1.1看懂程序的性能 1

1.1.2性能的参考指标 2

1.1.3木桶原理与性能瓶颈 2

1.1.4 Amdahl定律 3

1.2性能调优的层次 5

1.2.1设计调优 5

1.2.2代码调优 5

1.2.3 JVM调优 6

1.2.4数据库调优 6

1.2.5操作系统调优 6

1.3基本调优策略和手段 7

1.3.1优化的一般步骤 7

1.3.2系统优化注意事项 8

1.4小结 8

第2章 设计优化 10

2.1善用设计模式 10

2.1.1单例模式 10

2.1.2代理模式 15

2.1.3享元模式 24

2.1.4装饰者模式 27

2.1.5观察者模式 33

2.1.6 Value Object模式 37

2.1.7业务代理模式 40

2.2常用优化组件和方法 43

2.2.1缓冲(Buffer) 43

2.2.2缓存(Cache) 46

2.2.3对象复用——“池” 50

2.2.4并行替代串行 56

2.2.5负载均衡 56

2.2.6时间换空间 62

2.2.7空间换时间 63

2.3小结 65

第3章Java程序优化 66

3.1字符串优化处理 66

3.1.1 String对象及其特点 66

3.1.2 subString()方法的内存泄漏 68

3.1.3字符串分割和查找 71

3.1.4 StringBuffer和StringBuilder 74

3.2核心数据结构 79

3.2.1 List接口 79

3.2.2 Map接口 86

3.2.3 Set接口 97

3.2.4优化集合访问代码 99

3.2.5 RandomAccess接口 101

3.3使用NIO提升性能 102

3.3.1 NIO的Buffer类族和Channel 103

3.3.2 Buffer的基本原理 104

3.3.3 Buffer的相关操作 107

3.3.4 MappedByteBuffer性能评估 114

3.3.5直接内存访问 116

3.4引用类型 118

3.4.1强引用 119

3.4.2软引用 120

3.4.3弱引用 121

3.4.4虚引用 122

3.4.5 WeakHashMap类及其实现 125

3.5有助于改善性能的技巧 127

3.5.1慎用异常 127

3.5.2使用局部变量 128

3.5.3位运算代替乘除法 128

3.5.4替换switch 129

3.5.5一维数组代替二维数组 130

3.5.6提取表达式 131

3.5.7展开循环 132

3.5.8布尔运算代替位运算 133

3.5.9使用arrayCopy() 134

3.5.10使用Buffer进行I/O操作 135

3.5.11使用clone()代替new 137

3.5.12静态方法替代实例方法 139

3.6小结 140

第4章 并行程序开发及优化 141

4.1并行程序设计模式 141

4.1.1 Future模式 141

4.1.2 Master-Worker模式 148

4.1.3 Guarded Suspension模式 153

4.1.4不变模式 160

4.1.5生产者-消费者模式 162

4.2 JDK多任务执行框架 166

4.2.1无限制线程的缺陷 166

4.2.2简单的线程池实现 167

4.2.3 Executor框架 171

4.2.4自定义线程池 173

4.2.5优化线程池大小 177

4.2.6扩展ThreadPoolExecutor 178

4.3 JDK并发数据结构 179

4.3.1并发List 179

4.3.2并发Set 182

4.3.3并发Map 182

4.3.4并发Queue 183

4.3.5并发Deque 186

4.4并发控制方法 187

4.4.1 Java内存模型与volatile 187

4.4.2同步关键字synchronized 190

4.4.3 ReentrantLock重入锁 192

4.4.4 ReadWriteLock读写锁 195

4.4.5 Condition对象 196

4.4.6 Semaphore信号量 198

4.4.7 ThreadLocal线程局部变量 200

4.5“锁”的性能和优化 201

4.5.1线程的开销 201

4.5.2避免死锁 202

4.5.3减小锁持有时间 206

4.5.4减小锁粒度 207

4.5.5读写分离锁来替换独占锁 208

4.5.6锁分离 209

4.5.7重入锁和内部锁 210

4.5.8锁粗化 211

4.5.9自旋锁 212

4.5.10锁消除 212

4.5.11锁偏向 214

4.6无锁的并行计算 214

4.6.1非阻塞的同步/无锁 214

4.6.2原子操作 215

4.6.3 Amino框架介绍 217

4.6.4 Amino集合 218

4.6.5 Amino树 222

4.6.6 Amino图 222

4.6.7 Amino简单调度模式 223

4.7协程 226

4.7.1协程的概念 226

4.7.2 Kilim框架简介 226

4.7.3 Task及其状态 227

4.7.4 Fiber及其状态 228

4.7.5 Kilim开发环境配置 228

4.7.6 Kilim之Hello World 230

4.7.7多任务通信 232

4.7.8 Kilim实例及性能评估 233

4.8小结 236

第5章JVM调优 237

5.1 Java虚拟机内存模型 237

5.1.1程序计数器 237

5.1.2 Java虚拟机栈 238

5.1.3本地方法栈 243

5.1.4 Java堆 244

5.1.5方法区 245

5.2 JVM内存分配参数 249

5.2.1设置最大堆内存 249

5.2.2设置最小堆内存 250

5.2.3设置新生代 251

5.2.4设置持久代 252

5.2.5设置线程栈 253

5.2.6堆的比例分配 254

5.2.7堆分配参数总结 256

5.3垃圾收集基础 257

5.3.1垃圾收集的作用 257

5.3.2垃圾回收算法与思想 258

5.3.3垃圾收集器的类型 262

5.3.4评价GC策略的指标 263

5.3.5新生代串行收集器 264

5.3.6老年代串行收集器 265

5.3.7并行收集器 265

5.3.8新生代并行回收(Parallel Scavenge)收集器 266

5.3.9老年代并行回收收集器 267

5.3.10 CMS收集器 267

5.3.11 G1收集器(Garbage First) 270

5.3.12 Stop the World案例 270

5.3.13收集器对系统性能的影响 272

5.3.14 GC相关参数总结 273

5.4常用调优案例和方法 275

5.4.1将新对象预留在新生代 275

5.4.2大对象进入老年代 278

5.4.3设置对象进入老年代的年龄 279

5.4.4稳定与震荡的堆大小 280

5.4.5吞吐量优先案例 281

5.4.6使用大页案例 282

5.4.7降低停顿案例 282

5.5实用JVM参数 283

5.5.1 JIT编译参数 283

5.5.2堆快照(堆Dump) 284

5.5.3错误处理 285

5.5.4取得GC信息 285

5.5.5类和对象跟踪 287

5.5.6控制GC 288

5.5.7选择类校验器 289

5.5.8 Solaris下线程控制 289

5.5.9使用大页 289

5.5.10压缩指针 289

5.6实战JVM调优 290

5.6.1 Tomcat简介与启动加速 290

5.6.2 Web应用程序介绍 292

5.6.3 JMeter介绍与使用 293

5.6.4调优前Web应用运行状况 296

5.6.5调优过程 297

5.7总结 298

第6章Java性能调优工具 299

6.1 Linux命令行工具 299

6.1.1 top命令 299

6.1.2 sar命令 301

6.1.3 vmstat命令 302

6.1.4 iostat命令 304

6.1.5 pidstat工具 305

6.2 Windows工具 309

6.2.1任务管理器 309

6.2.2 perfmon性能监控工具 311

6.2.3 Process Explorer 313

6.2.4 pslist命令行 315

6.3 JDK命令行工具 317

6.3.1 jps命令 317

6.3.2 jstat命令 318

6.3.3 jinfo命令 322

6.3.4 j map命令 323

6.3.5 jhat命令 324

6.3.6 jstack命令 326

6.3.7 jstatd命令 329

6.3.8 hprof工具 330

6.4 JConsole工具 332

6.4.1 JConsole连接Java程序 332

6.4.2 Java程序概况 333

6.4.3内存监控 333

6.4.4线程监控 335

6.4.5类加载情况 335

6.4.6虚拟机信息 336

6.4.7 MBean管理 337

6.4.8使用插件 338

6.5 Visual VM多合一工具 339

6.5.1 Visual VM连接应用程序 339

6.5.2监控应用程序概况 342

6.5.3 Thread Dump和分析 343

6.5.4性能分析 344

6.5.5快照 346

6.5.6内存快照分析 347

6.5.7 MBean管理 349

6.5.8 TDA使用 349

6.5.9 BTrace介绍 350

6.6 Visual VM对OQL的支持 356

6.6.1 Visual VM的OQL基本语法 356

6.6.2内置heap对象 357

6.6.3对象函数 359

6.6.4集合/统计函数 362

6.6.5程序化OQL 366

6.7 MAT内存分析工具 368

6.7.1初识MAT 368

6.7.2浅堆和深堆 371

6.7.3支配树(Dominator Tree) 374

6.7.4垃圾回收根 375

6.7.5内存泄露检测 376

6.7.6最大对象报告 378

6.7.7查找支配者 378

6.7.8线程分析 379

6.7.9集合使用情况分析 380

6.7.10扩展MAT 381

6.8 MAT对OQL的支持 385

6.8.1 Select子句 385

6.8.2 From子句 387

6.8.3 Where子句 389

6.8.4内置对象与方法 389

6.9 JProfile简介 393

6.9.1 JProfile使用配置 393

6.9.2内存视图 394

6.9.3堆快照 394

6.9.4 CPU视图 395

6.9.5线程视图 397

6.9.6 JVM统计信息 397

6.9.7触发器 398

6.10小结 400