0 0 0

实战Java虚拟机:JVM故障诊断与性能优化 (第2版).epub

终途
1月前 340
我用夸克网盘分享了「实战Java虚拟机:JVM故障诊断与性能优化 (第2版).epub」,点击链接即可保存。打开「夸克APP」在线查看,支持多种文档格式转换。
实战Java虚拟机:JVM故障诊断与性能优化(第2版) 作者: 葛一鸣 出版社: 电子工业出版社 出品方: 博文视点 出版年: 2019-7 页数: 456 定价: 89 装帧: 平装 ISBN: 9787121367748

内容简介

不管技术如何发展,Java依然是一个充满活力的生态圈,学习Java的人也越来越多,但多数人学习Java虚拟机(JVM)时都会遇到瓶颈。本书将通过200余个示例详细介绍JVM中的各种参数配置、故障排查、性能监控及性能优化,帮助Java人突破瓶颈。 《实战Java虚拟机———JVM故障诊断与性能优化(第2版)》共11章,修订后版本涵盖Java 6~Java 10。第1~3章介绍了Java虚拟机的定义、总体架构、常用配置参数。第4~5章介绍了垃圾回收的算法和各种垃圾回收器。第6章介绍了Java虚拟机的性能监控和故障诊断工具。第7章详细介绍了对Java堆的分析方法和案例。第8章介绍了Java虚拟机对多线程,尤其是对锁的支持。第9~10章介绍了Java虚拟机的核心—Class文件结构,以及Java虚拟机中类的装载系统。第11章介绍了Java虚拟机的执行系统和字节码,并给出了通过ASM框架进行字节码注入的案例。 《实战Java虚拟机———JVM故障诊断与性能优化(第2版)》不仅适合Java程序员阅读,还适合工作于Java虚拟机之上的研发人员、软件设计师、架构师阅读。

作者简介

葛一鸣,51CTO特约讲师,国家认证系统分析师,获得Oracle OCP认证。长期从事Java软件开发工作,对Java程序设计、JVM有深入的研究,对设计模式、人工智能、神经网络、数据挖掘等技术有浓厚兴趣,著有《自己动手写神经网路》电子书,也开设了在线的《深入浅出Java虚拟机——入门篇》培训课程。

网友热评

RongieZeng: 挺不错的jvm入门书,这本书提供了实战的例子,可以加深对理论的理解,如果是刚接触jvm的话,先看完这本,再去看《深入理解java虚拟机》,效果会好一点

图书目录

第1章 初探Java虚拟机 1 1.1知根知底:追溯Java的发展历程 2 1.1.1那些依托Java虚拟机的语言大咖们 2 1.1.2Java发展史上的里程碑 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.4Java语言规范总结 9 1.4一切听我的:Java虚拟机规范 9 1.5数字编码就是计算机世界的水和电 10 1.5.1整数在Java虚拟机中的表示 10 1.5.2浮点数在Java虚拟机中的表示 12 1.6抛砖引玉:编译和调试虚拟机 14 1.7小结 18 第2章 认识Java虚拟机的基本结构 19 2.1谋全局者才能成大器:看穿Java虚拟机的架构 19 2.2小参数能解决大问题:学会设置Java虚拟机的参数 21 2.3对象去哪儿:辨清Java堆 22 2.4函数如何调用:出入Java栈 24 2.4.1局部变量表 26 2.4.2操作数栈 31 2.4.3帧数据区 31 2.4.4栈上分配 32 2.5类去哪儿了:识别方法区 34 2.6小结 36 第3章 常用Java虚拟机参数 37 3.1一切运行都有迹可循:掌握跟踪调试参数 37 3.1.1跟踪垃圾回收—读懂虚拟机日志 38 3.1.2类加载/卸载的跟踪 42 3.1.3查看系统参数 45 3.2让性能飞起来:学习堆的配置参数 45 3.2.1最大堆和初始堆的设置 46 3.2.2新生代的配置 49 3.2.3堆溢出处理 53 3.3别让性能有缺口:了解非堆内存的参数配置 54 3.3.1方法区配置 55 3.3.2栈配置 55 3.3.3直接内存配置 55 3.4Client和Server二选一:虚拟机的工作模式 58 3.5小结 59 第4章 垃圾回收的概念与算法 60 4.1内存管理清洁工:认识垃圾回收 60 4.2清洁工具大PK:讨论常用的垃圾回收算法 61 4.2.1引用计数法(ReferenceCounting) 62 4.2.2标记清除法(Mark-Sweep) 63 4.2.3复制算法(Copying) 64 4.2.4标记压缩法(Mark-Compact) 66 4.2.5分代算法(GenerationalCollecting) 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回收器(JDK8及之前的版本) 90 5.3.1CMS主要工作步骤 90 5.3.2CMS主要的参数 91 5.3.3CMS的日志分析 93 5.3.4有关Class的回收 94 5.4未来我做主:G1回收器(JDK9及之后版本的默认回收器) 95 5.4.1G1的内存划分和主要收集过程 95 5.4.2G1的新生代GC 96 5.4.3G1的并发标记周期 97 5.4.4混合回收 100 5.4.5必要时的FullGC 102 5.4.6G1的日志 102 5.4.7G1相关的参数 106 5.5回眸:有关对象内存分配和回收的一些细节问题 106 5.5.1禁用System.gc() 107 5.5.2System.gc()使用并发回收 107 5.5.3并行GC前额外触发的新生代GC 109 5.5.4对象何时进入老年代 109 5.5.5在TLAB上分配对象 117 5.5.6finalize()函数对垃圾回收的影响 120 5.6温故又知新:常用的GC参数 125 5.7动手才是真英雄:垃圾回收器对Tomcat性能影响的实验 127 5.7.1配置实验环境 127 5.7.2配置性能测试工具JMeter 128 5.7.3配置Web应用服务器Tomcat 131 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—测试JDK1.8的表现 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监控I/O—iostat命令 142 6.1.4多功能诊断器—pidstat工具 143 6.2用我更高效:Windows下的性能监控工具 148 6.2.1任务管理器 148 6.2.2perfmon性能监控工具 150 6.2.3ProcessExplorer进程管理工具 153 6.2.4pslist命令—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.5JDK自带的堆分析工具—jhat命令 165 6.3.6查看线程堆栈—jstack命令 168 6.3.7远程主机信息收集—jstatd命令 171 6.3.8多功能命令行—jcmd命令 173 6.3.9性能统计工具—hprof 175 6.3.10扩展jps命令 178 6.4我是你的眼:图形化虚拟机监控工具JConsole 178 6.4.1JConsole连接Java程序 179 6.4.2Java程序概况 180 6.4.3内存监控 180 6.4.4线程监控 181 6.4.5类加载情况 183 6.4.6虚拟机信息 183 6.5一目了然:可视化性能监控工具VisualVM 184 6.5.1VisualVM连接应用程序 185 6.5.2监控应用程序概况 186 6.5.3ThreadDump和分析 187 6.5.4性能分析 188 6.5.5内存快照分析 190 6.5.6BTrace介绍 191 6.6来自JRockit的礼物:虚拟机诊断工具MissionControl 199 6.6.1MBean服务器 199 6.6.2飞行记录器(FlightRecorder) 201 6.7小结 204 第7章 分析Java堆 205 7.1对症才能下药:找到内存溢出的原因 206 7.1.1堆溢出 206 7.1.2直接内存溢出 206 7.1.3过多线程导致OOM 208 7.1.4永久区溢出 210 7.1.5GC效率低下引起的OOM 211 7.2无处不在的字符串:String在虚拟机中的实现 211 7.2.1String对象的特点 211 7.2.2有关String的内存泄漏 213 7.2.3有关String常量池的位置 216 7.3虚拟机也有内窥镜:使用MAT分析Java堆 218 7.3.1初识MAT 218 7.3.2浅堆和深堆 221 7.3.3MAT堆分析案例解析 222 7.3.4支配树(DominatorTree) 226 7.3.5Tomcat堆溢出分析 227 7.4筛选堆对象:MAT对OQL的支持 231 7.4.1Select子句 231 7.4.2From子句 233 7.4.3Where子句 235 7.4.4内置对象与方法 235 7.5更精彩的查找:VisualVM对OQL的支持 240 7.5.1VisualVM的OQL基本语法 240 7.5.2内置heap对象 241 7.5.3对象函数 243 7.5.4集合/统计函数 247 7.5.5程序化OQL分析Tomcat堆 253 7.6小结 256 第8章 锁与并发 257 8.1安全就是锁存在的理由:锁的基本概念和实现 258 8.1.1理解线程安全 258 8.1.2对象头和锁 260 8.2避免残酷的竞争:锁在Java虚拟机中的实现和优化 261 8.2.1偏向锁 261 8.2.2轻量级锁 263 8.2.3锁膨胀 264 8.2.4自旋锁 265 8.2.5锁消除 265 8.3应对残酷的竞争:锁在应用层的优化思路 267 8.3.1减少锁持有时间 267 8.3.2减小锁粒度 268 8.3.3锁分离 270 8.3.4锁粗化 272 8.4无招胜有招:无锁 274 8.4.1理解CAS 274 8.4.2原子操作 275 8.4.3新宠儿LongAdder 278 8.5将随机变为可控:理解Java内存模型 281 8.5.1原子性 281 8.5.2有序性 283 8.5.3可见性 285 8.5.4Happens-Before原则 287 8.6小结 287 第9章 Class文件结构 288 9.1不仅跨平台,还能跨语言:语言无关性 288 9.2虚拟机的基石:Class文件 290 9.2.1Class文件的标志—魔数 291 9.2.2Class文件的版本 293 9.2.3存放所有常数—常量池 294 9.2.4Class的访问标记(AccessFlag) 301 9.2.5当前类、父类和接口 302 9.2.6Class文件的字段 303 9.2.7Class文件的方法基本结构 305 9.2.8方法的执行主体—Code属性 307 9.2.9记录行号—LineNumberTable属性 308 9.2.10保存局部变量和参数—LocalVariableTable属性 309 9.2.11加快字节码校验—StackMapTable属性 309 9.2.12Code属性总结 314 9.2.13抛出异常—Exceptions属性 315 9.2.14用实例分析Class的方法结构 316 9.2.15我来自哪里—SourceFile属性 319 9.2.16强大的动态调用—BootstrapMethods属性 320 9.2.17内部类—InnerClasses属性 321 9.2.18将要废弃的通知—Deprecated属性 322 9.2.19Class文件总结 323 9.3操作字节码:走进ASM 323 9.3.1ASM体系结构 323 9.3.2ASM之HelloWorld 325 9.4小结 326 第10章 Class装载系统 327 10.1来去都有序:看懂Class文件的装载流程 327 10.1.1类装载的条件 328 10.1.2加载类 331 10.1.3验证类 333 10.1.4准备 334 10.1.5解析类 335 10.1.6初始化 337 10.2一切Class从这里开始:掌握ClassLoader 341 10.2.1认识ClassLoader,看懂类加载 342 10.2.2ClassLoader的分类 342 10.2.3ClassLoader的双亲委托模式 344 10.2.4双亲委托模式的弊端 348 10.2.5双亲委托模式的补充 349 10.2.6突破双亲模式 351 10.2.7热替换的实现 354 10.3小结 358 第11章 字节码执行 359 11.1代码如何执行:字节码执行案例 360 11.2执行的基础:Java虚拟机常用指令介绍 370 11.2.1常量入栈指令 370 11.2.2局部变量压栈指令 370 11.2.3出栈装入局部变量表指令 372 11.2.4通用型操作 373 11.2.5类型转换指令 374 11.2.6运算指令 376 11.2.7对象操作指令 378 11.2.8比较控制指令 380 11.2.9函数调用与返回指令 386 11.2.10同步控制 389 11.2.11再看Class的方法结构 392 11.3更上一层楼:再看ASM 393 11.3.1为类增加安全控制 394 11.3.2统计函数执行时间 397 11.4谁说Java太刻板:JavaAgent运行时修改类 400 11.4.1使用-javaagent参数启动Java虚拟机 400 11.4.2使用JavaAgent为函数增加计时功能 403 11.4.3动态重转换类 404 11.4.4有关JavaAgent的总结 407 11.5与时俱进:动态方法调用 407 11.5.1方法句柄使用实例 408 11.5.2调用点使用实例 411 11.5.3反射和方法句柄 413 11.5.4指令invokedynamic使用实例 414 11.6跑得再快点:静态编译优化 419 11.6.1编译时计算 419 11.6.2变量字符串的连接 421 11.6.3基于常量的条件语句裁剪 422 11.6.4switch语句的优化 424 11.7提高虚拟机的执行效率:JIT及其相关参数 425 11.7.1开启JIT编译 425 11.7.2JIT编译阈值 426 11.7.3多级编译器 427 11.7.4OSR栈上替换 430 11.7.5方法内联 432 11.7.6设置代码缓存大小 433 11.8小结 436

实战Java虚拟机:JVM故障诊断与性能优化

版权说明

1、本站不保存、不存储任何实质资源,以上二维码指向为网盘资源链接,其内容归对应版权方所有
2、如有侵犯版权的情况,请点击下面举报/反馈按钮反馈或发送邮件[email protected]投诉说明情况
3、我们核实后将第一时间删除相关页面内容,谢谢理解和配合

这些人下载过 (12)
  • 锦书
  • 星璀璨
  • 幻影行者
  • 伏象啸天
  • 长歌对月
  • 夏日么么凉
  • 为千秋
  • 妹子我面了没
  • 却已失算
  • 拿贞操换真钞
  • 孤影独行
  • 混元运凯
最新回复 (0)

    暂无评论

请先登录后发表评论!

返回
请先登录后发表评论!