图书介绍

实战Java虚拟机 JVM故障诊断与性能优化PDF|Epub|txt|kindle电子书版本网盘下载

实战Java虚拟机 JVM故障诊断与性能优化
  • 葛一鸣著 著
  • 出版社: 北京:电子工业出版社
  • ISBN:9787121256127
  • 出版时间:2015
  • 标注页数:436页
  • 文件大小:42MB
  • 文件页数:454页
  • 主题词:JAVA语言-程序设计

PDF下载


点此进入-本书在线PDF格式电子书下载【推荐-云解压-方便快捷】直接下载PDF格式图书。移动端-PC端通用
种子下载[BT下载速度快]温馨提示:(请使用BT下载软件FDM进行下载)软件下载地址页直链下载[便捷但速度慢]  [在线试读本书]   [在线获取解压码]

下载说明

实战Java虚拟机 JVM故障诊断与性能优化PDF格式电子书版下载

下载的文件为RAR压缩包。需要使用解压软件进行解压得到PDF格式图书。

建议使用BT下载工具Free Download Manager进行下载,简称FDM(免费,没有广告,支持多平台)。本站资源全部打包为BT种子。所以需要使用专业的BT下载软件进行下载。如BitComet qBittorrent uTorrent等BT下载工具。迅雷目前由于本站不是热门资源。不推荐使用!后期资源热门了。安装了迅雷也可以迅雷进行下载!

(文件页数 要大于 标注页数,上中下等多册电子书除外)

注意:本站所有压缩包均有解压码: 点击下载压缩包解压工具

图书目录

第1章 初探Java虚拟机1

1.1 知根知底:追溯Java的发展历程2

1.1.1 那些依托Java虚拟机的语言大咖们2

1.1.2 Java发展史上的里程碑2

1.2 跨平台的真相:Java虚拟机来做中介4

1.2.1 理解Java虚拟机的原理4

1.2.2 看清Java虚拟机的种类5

1.3 一切看我的:Java语言规范6

1.3.1 词法的定义6

1.3.2 语法的定义7

1.3.3 数据类型的定义8

1.3.4 Java语言规范总结9

1.4 一切听我的:Java虚拟机规范9

1.5 数字编码就是计算机世界的水和电10

1.5.1 整数在Java虚拟机中的表示10

1.5.2 浮点数在Java虚拟机中的表示12

1.6 抛砖引玉:编译和调试虚拟机14

1.7 小结19

第2章 认识Java虚拟机的基本结构20

2.1 谋全局者才能成大器:看穿Java虚拟机的架构20

2.2 小参数能解决大问题:学会设置Java虚拟机的参数22

2.3 对象去哪儿:辨清Java堆23

2.4 函数如何调用:出入Java栈25

2.4.1 局部变量表27

2.4.2 操作数栈32

2.4.3 帧数据区32

2.4.4 栈上分配33

2.5 类去哪儿了:识别方法区35

2.6 小结37

第3章 常用Java虚拟机参数38

3.1 一切运行都有迹可循:掌握跟踪调试参数38

3.1.1 跟踪垃圾回收——读懂虚拟机日志39

3.1.2 类加载/卸载的跟踪42

3.1.3 系统参数查看44

3.2 让性能飞起来:学习堆的配置参数45

3.2.1 最大堆和初始堆的设置45

3.2.2 新生代的配置49

3.2.3 堆溢出处理52

3.3 别让性能有缺口:了解非堆内存的参数配置54

3.3.1 方法区配置55

3.3.2 栈配置55

3.3.3 直接内存配置55

3.4 Client和Server二选一:虚拟机的工作模式58

3.5 小结59

第4章 垃圾回收概念与算法60

4.1 内存管理清洁工:认识垃圾回收60

4.2 清洁工具大PK:讨论常用的垃圾回收算法61

4.2.1 引用计数法(Reference Counting)62

4.2.2 标记清除法(Mark-Sweep)63

4.2.3 复制算法(Copying)64

4.2.4 标记压缩法(Mark-Compact)66

4.2.5 分代算法(Generational Collecting)67

4.2.6 分区算法(Region)68

4.3 谁才是真正的垃圾:判断可触及性69

4.3.1 对象的复活69

4.3.2 引用和可触及性的强度71

4.3.3 软引用——可被回收的引用72

4.3.4 弱引用——发现即回收76

4.3.5 虚引用——对象回收跟踪77

4.4 垃圾回收时的停顿现象:Stop-The-World案例实战79

4.5 小结83

第5章 垃圾收集器和内存分配84

5.1 一心一意一件事:串行回收器85

5.1.1 新生代串行回收器85

5.1.2 老年代串行回收器86

5.2 人多力量大:并行回收器86

5.2.1 新生代ParNew回收器87

5.2.2 新生代ParallelGC回收器88

5.2.3 老年代ParallelOldGC回收器89

5.3 一心多用都不落下:CMS回收器90

5.3.1 CMS主要工作步骤90

5.3.2 CMS主要的设置参数91

5.3.3 CMS的日志分析92

5.3.4 有关Class的回收94

5.4 未来我做主:G1回收器95

5.4.1 G1的内存划分和主要收集过程95

5.4.2 G1的新生代GC96

5.4.3 G1的并发标记周期97

5.4.4 混合回收100

5.4.5 必要时的Full GC102

5.4.6 G1日志102

5.4.7 G1相关的参数106

5.5 回眸:有关对象内存分配和回收的一些细节问题107

5.5.1 禁用System.gc()107

5.5.2 System.gc()使用并发回收107

5.5.3 并行GC前额外触发的新生代GC109

5.5.4 对象何时进入老年代110

5.5.5 在TLAB上分配对象117

5.5.6 方法finalize()对垃圾回收的影响120

5.6 温故又知新:常用的GC参数125

5.7 动手才是真英雄:垃圾回收器对Tomcat性能影响的实验127

5.7.1 配置实验环境127

5.7.2 配置进行性能测试的工具JMeter128

5.7.3 配置Web应用服务器Tomcat131

5.7.4 实战案例1——初试串行回收器133

5.7.5 实战案例2——扩大堆以提升系统性能133

5.7.6 实战案例3——调整初始堆大小134

5.7.7 实战案例4——使用ParrellOldGC回收器135

5.7.8 实战案例5——使用较小堆提高GC压力135

5.7.9 实战案例6——测试ParallelOldGC的表现135

5.7.10 实战案例7——测试ParNew回收器的表现136

5.7.11 实战案例8——测试JDK 1.6 的表现136

5.7.12 实战案例9——使用高版本虚拟机提升性能137

5.8 小结137

第6章 性能监控工具138

6.1 有我更高效:Linux下的性能监控工具139

6.1.1 显示系统整体资源使用情况——top命令139

6.1.2 监控内存和CPU——vmstat命令140

6.1.3 监控IO使用——iostat命令142

6.1.4 多功能诊断器——pidstat工具143

6.2 用我更高效:Windows下的性能监控工具148

6.2.1 任务管理器148

6.2.2 perfmon性能监控工具150

6.2.3 Process Explorer进程管理工具153

6.2.4 pslist命令——Windows下也有命令行工具155

6.3 外科手术刀:JDK性能监控工具157

6.3.1 查看Java进程——jps命令158

6.3.2 查看虚拟机运行时信息——jstat命令159

6.3.3 查看虚拟机参数——jinfo命令162

6.3.4 导出堆到文件——jmap命令163

6.3.5 JDK自带的堆分析工具——jhat命令165

6.3.6 查看线程堆栈——jstack命令167

6.3.7 远程主机信息收集——jstatd命令170

6.3.8 多功能命令行——jcmd命令172

6.3.9 性能统计工具——hprof175

6.3.1 0扩展jps命令177

6.4 我是你的眼:图形化虚拟机监控工具JConsole178

6.4.1 JConsole连接Java程序178

6.4.2 Java程序概况179

6.4.3 内存监控180

6.4.4 线程监控180

6.4.5 类加载情况182

6.4.6 虚拟机信息182

6.5 一目了然:可视化性能监控工具Visual VM183

6.5.1 Visual VM连接应用程序184

6.5.2 监控应用程序概况185

6.5.3 Thread Dump和分析186

6.5.4 性能分析187

6.5.5 内存快照分析189

6.5.6 BTrace介绍190

6.6 来自JRockit的礼物:虚拟机诊断工具Mission Control198

6.6.1 MBean服务器198

6.6.2 飞机记录器(Flight Recorder)200

6.7 小结203

第7章 分析Java堆204

7.1 对症才能下药:找到内存溢出的原因205

7.1.1 堆溢出205

7.1.2 直接内存溢出205

7.1.3 过多线程导致OOM207

7.1.4 永久区溢出209

7.1.5 GC效率低下引起的OOM210

7.2 无处不在的字符串:String在虚拟机中的实现210

7.2.1 String对象的特点210

7.2.2 有关String的内存泄漏212

7.2.3 有关String常量池的位置215

7.3 虚拟机也有内窥镜:使用MAT分析Java堆217

7.3.1 初识MAT217

7.3.2 浅堆和深堆220

7.3.3 例解MAT堆分析221

7.3.4 支配树(Dominator Tree)225

7.3.5 Tomcat堆溢出分析226

7.4 筛选堆对象:MAT对OQL的支持230

7.4.1 Select子句230

7.4.2 From子句232

7.4.3 Where子句234

7.4.4 内置对象与方法234

7.5 更精彩的查找:Visual VM对OQL的支持239

7.5.1 Visual VM的OQL基本语法239

7.5.2 内置heap对象240

7.5.3 对象函数242

7.5.4 集合/统计函数247

7.5.5 程序化OQL分析Tomcat堆252

7.6 小结255

第8章 锁与并发256

8.1 安全就是锁存在的理由:锁的基本概念和实现257

8.1.1 理解线程安全257

8.1.2 对象头和锁259

8.2 避免残酷的竞争:锁在Java虚拟机中的实现和优化260

8.2.1 偏向锁260

8.2.2 轻量级锁262

8.2.3 锁膨胀263

8.2.4 自旋锁264

8.2.5 锁消除264

8.3 应对残酷的竞争:锁在应用层的优化思路266

8.3.1 减少锁持有时间266

8.3.2 减小锁粒度267

8.3.3 锁分离269

8.3.4 锁粗化271

8.4 无招胜有招:无锁273

8.4.1 理解CAS273

8.4.2 原子操作274

8.4.3 新宠儿LongAddr277

8.5 将随机变为可控:理解Java内存模型280

8.5.1 原子性280

8.5.2 有序性282

8.5.3 可见性284

8.5.4 Happens-Before原则286

8.6 小结286

第9章 Class文件结构287

9.1 不仅跨平台,还能跨语言:语言无关性287

9.2 虚拟机的基石:Class文件289

9.2.1 Class文件的标志——魔数290

9.2.2 Class文件的版本292

9.2.3 存放所有常数——常量池293

9.2.4 Class的访问标记(Access Flag)300

9.2.5 当前类、父类和接口301

9.2.6 Class文件的字段302

9.2.7 Class文件的方法基本结构304

9.2.8 方法的执行主体——Code属性306

9.2.9 记录行号——LineNumberTable属性307

9.2.10 保存局部变量和参数——LocalVariableTable属性308

9.2.11 加快字节码校验——StackMapTable属性308

9.2.12 Code属性总结313

9.2.13 抛出异常——Exceptions属性314

9.2.14 用实例分析Class的方法结构315

9.2.15 我来自哪里——SourceFile属性318

9.2.16 强大的动态调用——BootstrapMethods属性319

9.2.17 内部类——InnerClasses属性320

9.2.18 将要废弃的通知——Deprecated属性321

9.2.19 Class文件总结322

9.3 操作字节码:走进ASM322

9.3.1 ASM体系结构322

9.3.2 ASM之Hello World324

9.4 小结325

第10章 Class装载系统326

10.1 来去都有序:看懂Class文件的装载流程326

10.1.1 类装载的条件327

10.1.2 加载类330

10.1.3 验证类332

10.1.4 准备333

10.1.5 解析类334

10.1.6 初始化336

10.2 一切Class从这里开始:掌握ClassLoader340

10.2.1 认识ClassLoader,看懂类加载341

10.2.2 ClassLoader的分类341

10.2.3 ClassLoader的双亲委托模式343

10.2.4 双亲委托模式的弊端347

10.2.5 双亲委托模式的补充348

10.2.6 突破双亲模式350

10.2.7 热替换的实现353

10.3 小结357

第11章 字节码执行358

11.1 代码如何执行:字节码执行案例359

11.2 执行的基础:Java虚拟机常用指令介绍369

11.2.1 常量入栈指令369

11.2.2 局部变量压栈指令370

11.2.3 出栈装入局部变量表指令371

11.2.4 通用型操作372

11.2.5 类型转换指令373

11.2.6 运算指令375

11.2.7 对象/数组操作指令377

11.2.8 比较控制指令379

11.2.9 函数调用与返回指令386

11.2.10 同步控制389

11.2.11 再看Class的方法结构391

11.3 更上一层楼:再看ASM393

11.3.1 为类增加安全控制393

11.3.2 统计函数执行时间396

11.4 谁说Java太刻板:Java Agent运行时修改类399

11.4.1 使用-javaagent参数启动Java虚拟机400

11.4.2 使用Java Agent为函数增加计时功能402

11.4.3 动态重转换类404

11.4.4 有关Java Agent的总结407

11.5 与时俱进:动态函数调用407

11.5.1 方法句柄使用实例407

11.5.2 调用点使用实例411

11.5.3 反射和方法句柄412

11.5.4 指令invokedynamic使用实例414

11.6 跑得再快点:静态编译优化418

11.6.1 编译时计算419

11.6.2 变量字符串的连接421

11.6.3 基于常量的条件语句裁剪422

11.6.4 switch语句的优化423

11.7 提高虚拟机的执行效率:JIT及其相关参数424

11.7.1 开启JIT编译425

11.7.2 JIT编译阈值426

11.7.3 多级编译器427

11.7.4 OSR栈上替换430

11.7.5 方法内联431

11.7.6 设置代码缓存大小432

11.8 小结436

热门推荐