JVM故障诊断与功能优化ITeye - 亚美娱乐

JVM故障诊断与功能优化ITeye

2019-01-10 21:41:07 | 作者: 紫真 | 标签: 虚拟机,收回,优化 | 浏览: 2820

实战Java虚拟机:JVM毛病确诊与功用优化.葛一鸣(带具体书签) PDF 下载 跟着越来越多的第三方言语(Groovy、Scala、JRuby等)在Java虚拟机上运转,Java也俨然成为一个充满活力的生态圈。本书将经过200余示例具体介绍Java虚拟机中的各种参数装备、毛病排查、功用监控以及功用优化。 本书共11章。第1~3章介绍了Java虚拟机的界说、全体架构、常用装备参数。第4~5章介绍了废物收回的算法和各种废物收回器。第6章介绍了虚拟机的功用监控和毛病确诊东西。第7章具体介绍了对Java堆的剖析办法和事例。第8章介绍了Java虚拟机对多线程,尤其是锁的支撑。第9~10章介绍了虚拟机的中心——Class文件结构,以及虚拟机中类的装载体系。第11章介绍了虚拟机的履行体系和字节码,并给出了经过ASM结构进行字节码注入的事例。 第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.2 老时代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的新生代GC 96 5.4.3 G1的并发符号周期 97 5.4.4 混合收回 100 5.4.5 必要时的Full GC 102 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前额定触发的新生代GC 109 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 装备进行功用测验的东西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——测验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 功用核算东西——hprof 175 6.3.10 扩展jps指令 177 6.4 我是你的眼:图形化虚拟机监控东西JConsole 178 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 VM 183 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 Control 198 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 过多线程导致OOM 207 7.1.4 永久区溢出 209 7.1.5 GC功率低下引起的OOM 210 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 初识MAT 217 7.3.2 浅堆和深堆 220 7.3.4 例解MAT堆剖析 221 7.3.5 分配树(Dominator Tree) 225 7.3.6 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 了解CAS 273 8.4.2 原子操作 274 8.4.3 新宠儿LongAddr 277 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 操作字节码:走进ASM 322 9.3.1 ASM体系结构 322 9.3.2 ASM之Hello World 324 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从这儿开端:把握ClassLoader 340 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 更上一层楼:再看ASM 393 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

版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表亚美娱乐立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章

阅读排行

  • 1

    netty 之Hello WordITeye

    处理,一个,接纳
  • 2

    java有值类型吗ITeye

    类型,引证,指向
  • 3

    内置jetty(转)ITeye

    一个,处理,运用
  • 4
  • 5

    spring aopITeye

    署理,结构,调用
  • 6
  • 7

    Shell 练习题(append)ITeye

    实例,文件,上述
  • 8

    获取checkbox复选框的值ITeye

    依据,获取,拿到
  • 9

    Redis的耐久化机制ITeye

    耐久,方法,内存
  • 10