Java性能优化实践(JVM调优策略/工具与技巧) PDF 高质量版

  • 更新时间:
  • 1904人关注
  • 点击下载

Java性能优化实践(JVM调优策略/工具与技巧)》是一本关于Java优化相关的电子书资源,介绍了关于Java性能优化、JVM调优策略、JVM工具与技巧方面的内容,本书是由人民邮电出版社出版,格式为PDF,资源大小69 MB,本杰明·J. 埃文斯编写,目前豆瓣、亚马逊、当当、京东等综合评分为:9.1分,我们还提供了样章在线阅读,一起来看下具体内容。

资源详情相关推荐
《Java性能优化实践(JVM调优策略/工具与技巧)》封面
  • 在线阅读
  • 出版社:人民邮电出版社
  • 作者:本杰明·J.、埃文斯
  • 大小:69 MB
  • 类别:Java优化
  • 热度:538
  • Java性能调优指南
  • Java性能权威指南
  • 大话JAVA性能优化
  • 揭秘Java虚拟机:JVM设计原理与实现
  • 多线程、JVM复习面试强化训练100题
  • 编辑推荐

    在当前的互联网开发模式下,系统访问量日增、代码臃肿,各种性能问题纷涌而至。性能优化作为一个常谈常新的话题,受到越来越多开发者的关注。而Java是一门使用广泛的语言,社区生态中积攒了大量宝贵的性能优化经验。

    1.作为一本性能调优方面的实用指南,本书从实验科学的角度将JVM调优的技术原理与方法论相结合,并在此基础上提供了可选择的工具。

    2.通过对各方面的深入研究,本书能让使用复杂技术栈的中高级Java技术专家以量化和可验证的方法优化Java应用程序性能。

    了解Java的原则和技术如何充分利用现代硬件和操作系统

    探究一些性能测试以及困扰团队的常见反模式

    理解测量Java性能数据的陷阱以及微基准测试的缺点

    深入研究JVM垃圾收集日志、监控、调优和工具

    探究JIT编译和Java语言性能技术

    学习Java集合类API与性能有关的方面,从整体上理解Java并发

    内容简介

    本书从实验科学的角度探讨了Java性能优化的方方面面,重点阐述了*的实用JVM性能调优策略、工具和技巧。通过本书,我们不仅可以了解Java原理和技术如何充分利用现代硬件和操作系统、衡量Java性能的陷阱以及微基准测试的弊端有哪些,还能深入研究可能使团队烦恼的几种性能测试和常见反模式、JVM垃圾收集、JIT编译和Java语言性能技术等。本书为读者打开了深入理解Java性能的大门,并以路标助力其优化之旅。

    目录

    • 中文版推荐序一 xv
    • 中文版推荐序二 xvi
    • 序 xvii
    • 前言 xix
    • 第 1 章 明确优化与性能 1
    • 1.1 关于Java性能的误解 1
    • 1.2 Java性能概览 2
    • 1.3 作为实验科学的性能 3
    • 1.4 性能分类方法 4
    • 1.4.1 吞吐量 4
    • 1.4.2 延迟 5
    • 1.4.3 容量 5
    • 1.4.4 利用率 5
    • 1.4.5 效率 5
    • 1.4.6 可扩展性 5
    • 1.4.7 降级 6
    • 1.4.8 各种性能观测之间的关联 6
    • 1.5 阅读性能图 7
    • 1.6 小结 11
    • 第 2 章 JVM概览 12
    • 2.1 解释和类加载 12
    • 2.2 执行字节码 13
    • 2.3 HotSpot简介 17
    • 2.4 JVM内存管理 19
    • 2.5 线程和Java内存模型 20
    • 2.6 认识不同的JVM 20
    • 2.7 JVM的监控和工具 22
    • 2.8 小结 25
    • 第 3 章 硬件与操作系统 26
    • 3.1 现代硬件简介 27
    • 3.2 内存 27
    • 3.3 现代处理器特性 33
    • 3.3.1 翻译后备缓冲器 33
    • 3.3.2 分支预测和推测执行 33
    • 3.3.3 硬件存储器模型 33
    • 3.4 操作系统 34
    • 3.4.1 调度器 35
    • 3.4.2 时间问题 36
    • 3.4.3 上下文切换 37
    • 3.5 一个简单的系统模型 38
    • 3.6 基本探测策略 39
    • 3.6.1 利用CPU 40
    • 3.6.2 垃圾收集 41
    • 3.6.3 I/O 42
    • 3.6.4 机械共鸣 43
    • 3.7 虚拟化 44
    • 3.8 JVM和操作系统 45
    • 3.9 小结 46
    • 第 4 章 性能测试模式与反模式 47
    • 4.1 性能测试的类型 47
    • 4.1.1 延迟测试 48
    • 4.1.2 吞吐量测试 48
    • 4.1.3 负载测试 49
    • 4.1.4 压力测试 49
    • 4.1.5 耐久性测试 49
    • 4.1.6 容量规划测试 49
    • 4.1.7 退化测试 50
    • 4.2 最佳实践入门 50
    • 4.2.1 自上而下的性能测试 50
    • 4.2.2 创建一个测试环境 51
    • 4.2.3 确定性能要求 52
    • 4.2.4 Java特有的问题 52
    • 4.2.5 将性能测试当作软件开发生命周期的一部分 52
    • 4.3 性能反模式 53
    • 4.3.1 厌倦 53
    • 4.3.2 填充简历 54
    • 4.3.3 同侪压力 54
    • 4.3.4 缺乏理解 54
    • 4.3.5 被错误理解的问题/不存在的问题 54
    • 4.4 性能反模式目录 55
    • 4.4.1 被热门技术分心 55
    • 4.4.2 被简单分心 55
    • 4.4.3 性能调优天才 56
    • 4.4.4 按照坊间传说调优 57
    • 4.4.5 把责任归咎给驴 58
    • 4.4.6 忽略大局 59
    • 4.4.7 用户验收测试环境就是我的计算机 60
    • 4.4.8 类似生产环境的数据很难表示 61
    • 4.5 认知偏差与性能测试 62
    • 4.5.1 还原论思维 62
    • 4.5.2 确认偏差 63
    • 4.5.3 战争的迷雾(行动偏差) 63
    • 4.5.4 风险偏差 64
    • 4.5.5 埃尔斯伯格悖论 64
    • 4.6 小结 65
    • 第 5 章 微基准测试与统计 66
    • 5.1 Java性能测量 66
    • 5.2 JMH 70
    • 5.2.1 不是万不得已,不要做微基准测试(一个真实的故事) 70
    • 5.2.2 关于何时使用微基准测试的启发 70
    • 5.2.3 JMH框架 72
    • 5.2.4 执行基准测试 73
    • 5.3 JVM性能统计 77
    • 5.3.1 误差类型 78
    • 5.3.2 非正态统计 82
    • 5.4 统计的解释 85
    • 5.5 小结 88
    • 第 6 章 理解垃圾收集 89
    • 6.1 标记和清除 90
    • 6.2 HotSpot运行时 92
    • 6.2.1 对象的运行时表示 92
    • 6.2.2 GC根和Arena 95
    • 6.3 分配与生命周期 96
    • 6.4 HotSpot中的垃圾收集 98
    • 6.4.1 线程本地分配 98
    • 6.4.2 半空间收集 99
    • 6.5 并行收集器 100
    • 6.5.1 新生代并行收集 101
    • 6.5.2 老年代并行收集 102
    • 6.5.3 并行收集器的局限性 103
    • 6.6 分配的作用 104
    • 6.7 小结 108
    • 第 7 章 垃圾收集高级话题 109
    • 7.1 权衡与可插拔的收集器 109
    • 7.2 并发垃圾收集理论 111
    • 7.2.1 JVM安全点 111
    • 7.2.2 三色标记 112
    • 7.3 CMS 114
    • 7.3.1 CMS是如何工作的 115
    • 7.3.2 用于CMS的基本JVM标志 117
    • 7.4 G1 118
    • 7.4.1 G1堆布局和区域 118
    • 7.4.2 G1算法设计 119
    • 7.4.3 G1的各阶段 120
    • 7.4.4 用于G1的基本JVM标志 121
    • 7.5 Shenandoah 121
    • 7.5.1 并发压缩 123
    • 7.5.2 获取Shenandoah 123
    • 7.6 C4(Azul Zing) 124
    • 7.7 IBM J9中的均衡收集器 127
    • 7.7.1 J9对象头 128
    • 7.7.2 Balanced收集器的大数组 129
    • 7.7.3 NUMA和Balanced收集器 129
    • 7.8 遗留的HotSpot收集器 130
    • 7.8.1 Serial和SerialOld 130
    • 7.8.2 增量式CMS 131
    • 7.8.3 已被废弃和删除的垃圾收集组合 131
    • 7.8.4 Epsilon 131
    • 7.9 小结 132
    • 第 8 章 垃圾收集日志、监控、调优及工具 133
    • 8.1 认识垃圾收集日志 133
    • 8.1.1 开启垃圾收集日志记录 133
    • 8.1.2 垃圾收集日志与JMX的对比 134
    • 8.1.3 JMX的缺点 135
    • 8.1.4 垃圾收集日志数据带来的好处 136
    • 8.2 日志解析工具 136
    • 8.2.1 Censum 137
    • 8.2.2 GCViewer 139
    • 8.2.3 对于同一数据的不同可视化效果 140
    • 8.3 基本垃圾收集调优 141
    • 8.3.1 理解分配行为 142
    • 8.3.2 理解暂停时间 144
    • 8.3.3 收集器线程和GC根 145
    • 8.4 调优Parallel GC 147
    • 8.5 调优CMS 148
    • 8.6 调优G1 150
    • 8.7 jHiccup 152
    • 8.8 小结 154
    • 第 9 章 JVM上的代码执行 155
    • 9.1 字节码解释概览 155
    • 9.1.1 JVM字节码 158
    • 9.1.2 简单解释器 163
    • 9.1.3 HotSpot特定细节 165
    • 9.2 AOT编译和JIT编译 166
    • 9.2.1 AOT编译 166
    • 9.2.2 JIT编译 167
    • 9.2.3 比较AOT和JIT 168
    • 9.3 HotSpot JIT基础 168
    • 9.3.1 Klass字、虚函数表和指针变换 168
    • 9.3.2 JIT编译日志 169
    • 9.3.3 HotSpot中的编译器 171
    • 9.3.4 HotSpot中的分层编译 171
    • 9.4 代码缓存 172
    • 9.5 简单JIT调优 173
    • 9.6 小结 174
    • 第 10 章 理解即时编译 175
    • 10.1 认识JITWatch 175
    • 10.1.1 基本的JITWatch视图 176
    • 10.1.2 调试JVM和hsdi 180
    • 10.2 介绍JIT编译 180
    • 10.3 内联 181
    • 10.3.1 内联的限制 182
    • 10.3.2 调优内联子系统 183
    • 10.4 循环展开 184
    • 10.5 逃逸分析 186
    • 10.5.1 消除堆分配 187
    • 10.5.2 锁与逃逸分析 188
    • 10.5.3 逃逸分析的限制 189
    • 10.6 单态分派 192
    • 10.7 内部函数 195
    • 10.8 栈上替换 197
    • 10.9 再谈安全点 199
    • 10.10 核心库方法 199
    • 10.10.1 内联方法的大小上限 199
    • 10.10.2 编译方法的大小上限 203
    • 10.11 小结 204
    • 第 11 章 Java语言性能技术 205
    • 11.1 优化集合 206
    • 11.2 针对列表的优化考虑 207
    • 11.2.1 ArrayList 207
    • 11.2.2 LinkedList 208
    • 11.2.3 ArrayList与LinkedList的对比 209
    • 11.3 针对映射的优化考虑 210
    • 11.3.1 HashMap 210
    • 11.3.2 TreeMap 212
    • 11.3.3 缺少MultiMap 213
    • 11.4 针对集的优化考虑 213
    • 11.5 领域对象 213
    • 11.6 避免终结化 216
    • 11.6.1 血泪史:忘记清理 217
    • 11.6.2 为什么不使用终结化来解决这个问题 217
    • 11.6.3 try-with-resources 219
    • 11.7 方法句柄 223
    • 11.8 小结 226
    • 第 12 章 并发性能技术 227
    • 12.1 并行介绍 228
    • 12.2 理解JMM 232
    • 12.3 构建并发库 236
    • 12.3.1 Unsafe 237
    • 12.3.2 原子与CAS 238
    • 12.3.3 锁和自旋锁 239
    • 12.4 并发库总结 240
    • 12.4.1 java.util.concurrent中的Lock 240
    • 12.4.2 读/ 写锁 241
    • 12.4.3 信号量 242
    • 12.4.4 并发集合 242
    • 12.4.5 锁存器和屏障 243
    • 12.5 执行器和任务抽象 245
    • 12.5.1 认识异步执行 245
    • 12.5.2 选择一个ExecutorService 246
    • 12.5.3 Fork/Join 246
    • 12.6 现代Java并发 248
    • 12.6.1 流和并行流 248
    • 12.6.2 无锁技术 249
    • 12.6.3 基于Actor的技术 250
    • 12.7 小结 251
    • 第 13 章 剖析 252
    • 13.1 认识剖析 252
    • 13.2 采样与安全点偏差 253
    • 13.3 面向开发人员的执行剖析工具 255
    • 13.3.1 VisualVM剖析器 255
    • 13.3.2 JProfiler 256
    • 13.3.3 YourKit 261
    • 13.3.4 Java Flight Recorder和Java Mission Control 262
    • 13.3.5 运维工具 266
    • 13.4 现代剖析器 269
    • 13.5 分配剖析器 272
    • 13.6 堆转储分析 278
    • 13.7 小结 280
    • 第 14 章 高性能日志和消息系统 281
    • 14.1 日志 282
    • 14.2 设计一个影响较低的日志记录器 284
    • 14.3 使用Real Logic库实现低延迟 286
    • 14.3.1 Agrona 287
    • 14.3.2 Simple Binary Encoding 291
    • 14.3.3 Aeron 294
    • 14.3.4 Aeron的设计 296
    • 14.4 小结 299
    • 第 15 章 Java 9以及Java的未来方向 300
    • 15.1 Java 9中小的性能增强 301
    • 15.1.1 分段式代码缓存 301
    • 15.1.2 紧凑的字符串 301
    • 15.1.3 新的字符串连接 302
    • 15.1.4 C2编译器的改进 303
    • 15.1.5 新版G1收集器 304
    • 15.2 Java 10和未来版本 305
    • 15.2.1 新的发布流程 305
    • 15.2.2 Java 10 305
    • 15.3 Java 9及更高版本中的Unsafe 307
    • 15.4 Valhalla项目和值类型 308
    • 15.5 Graal和Truffle 312
    • 15.6 字节码的未来方向 313
    • 15.7 并发的未来方向 315
    • 15.8 总结 316
    • 作者介绍 318
    • 封面介绍 318
    展开阅读
    精选笔记1:java中jvm虚拟机栈的作用总结

    6小时37分钟前回答

    jvm虚拟机栈的作用

    jvm虚拟机栈栈帧的组成

    jvm虚拟机栈,也叫java栈,它由一个个的栈帧组成,而栈帖由以下几个部分组成

    • 局部变量表-存储方法参数,内部使用的变量
    • 操作数栈-在变量进行存储时,需要进行入栈和出栈
    • 动态连接-引用类型的指针
    • 方法出口-方法的返回
    • 一段原程序代码
    package com.lind.basic;
    
    public class Demo1 {
     static int hello() {
     int a = 1;
     int b = 2;
     int c = a + b;
     return c;
     }
    
     public static void main(String[] args) {
     System.out.println(hello());
     }
    }

    一 生成字节码文件

    javac demo1.java

    生成之后,扩展名是.class,这个文件对于我们来说是没有可读性的。

    二 对class文件反汇编

    javap demo1.class > demo1.txt

    我们可以通过文件编译工具来查看demo1.txt的内容

    Compiled from "Demo1.java"
    public class com.lind.basic.Demo1 {
     public com.lind.basic.Demo1();
     Code:
      0: aload_0
      1: invokespecial #1     // Method java/lang/Object."<init>":()V
      4: return
    
     static int hello();
     Code:
      0: iconst_1 // 把第一个整型变量推到操作数栈
      1: istore_0 // 让它出栈,并存储到局部变量表
      2: iconst_2
      3: istore_1
      4: iload_0 // 加载第一个数据入操作数栈
      5: iload_1 // 加载第二个数据入操作数栈
      6: iadd // 将两个数相加,结束入操作数栈
      7: istore_2 // 将结果出栈,存到局部变量表
      8: iload_2 // 加载它入操作数栈
      9: ireturn // 返回
    
     public static void main(java.lang.String[]);
     Code:
      0: getstatic  #2     // Field java/lang/System.out:Ljava/io/PrintStream;
      3: invokestatic #3     // Method hello:()I
      6: invokevirtual #4     // Method java/io/PrintStream.println:(I)V
      9: return
    }

    对于上面的汇编文件,我们是可以看的懂的,而且我们需要,汇编语言可以直接在计算机上运行,我想jvm应该也是把class文件生成对应操作系统的汇编文件,然后交给操作系统去执行吧!

    总结

    以上所述是小编给大家介绍的java中jvm虚拟机栈的作用,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对码农之家网站的支持!
    如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

    展开阅读

    Java优化相关资源

    • JRockit权威指南:深入理解JVM

      JRockit权威指南:深入理解JVM

      深入JVM内部 剖析Java虚拟机原理 阐明Java性能提升关键 莫枢(RednaxelaFx) 阿里中间件团队推荐JVM参考书

      大小:223.7 MBJRockit

      立即下载
    • 深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)

      深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)

      (1)这本书值得全部Java技术人员读3遍,值得Java技术人员读3遍,值得读3遍! (2)依据JDK12和JDK13EA版本全方位升级,增加內容近50%,并对第二版中模棱两可、缺陷和不正确內容开展了调整 。 (3)计算机图书行业的永远的丰碑,前两版总计包装印刷36次,销售量超出三十万册,俩家网店评价总数超出90000条,內容近乎零恶意差评。 (4)从Java技术性管理体系、全自动代码优化、vm虚拟机实行分系统、程序流程编译器与代码设计、高效率高并发五个层面全

      大小:38 MBJava虚拟机

      立即下载
    • JVM从入门到入魔

      JVM从入门到入魔

      JVM是可运行Java代码的假想计算机 ,包括一套字节码指令集、一组寄存器、一个栈、一个垃圾回收,堆 和 一个存储方法域。JVM是运行在操作系统之上的,它与硬件没有直接的交互 JVM一直是java知识里面进阶阶段的重要部分,如果希望在java领域研究的更深入,则JVM则是如论如何也避开不了的话题,本系列试图通过简洁易读的方式,讲解JVM必要的知识点

      大小:3.47 MBJVM

      立即下载
    • 深入理解Java虚拟机:JVM高级特性与最佳实践(第2版)

      深入理解Java虚拟机:JVM高级特性与最佳实践(第2版)

      大小:253 MBJava虚拟机

      立即下载
    • 深入理解JVM&G1 GC

      深入理解JVM&G1 GC

      本书着重介绍了G1GC,主要为学习Java语言的学生、初级程序员提供GC的使用参考建议及经验,针对Java虚拟机和GC调优进行讲解,以及掌握G1GC性能调优的许多主题及相关的综合性知识

      大小:203.5 MBJVM

      立即下载

    学习笔记

    22小时55分钟前回答

    jvm--Java中init和clinit的区别点整理

    init和clinit区别 ①init和clinit方法执行时机不同 init是对象构造器方法,也就是说在程序执行 new 一个对象调用该对象类的 constructor 方法时才会执行init方法,而clinit是类构造器方法,也就是在jvm进行类加载验证-解析初始化,中的初始化阶段jvm会调用clinit方法。 ②init和clinit方法执行目的不同 init is the (or one of the) constructor(s) for the instance, and non-static field initialization. clinit are the static initialization blocks for the class, and static field initialization. 上面这两句是Stack Overflow上的解析,很清楚init是instance实例构造器,对非静态变量解析初始化,而clinit是class类构造器对静态变量,静态代码块进行初始化。看看下面的这段程序……

    23小时30分钟前回答

    Java VisualVM监控远程JVM(详解)

    我们经常需要对我们的开发的软件做各种测试, 软件对系统资源的使用情况更是不可少, 目前有多个监控工具, 相比JProfiler对系统资源尤其是内存的消耗是非常庞大,JDK1.6开始自带的VisualVM就是不错的监控工具. 这个工具就在JAVA_HOME\bin\目录下的jvisualvm.exe, 双击这个文件就能看到一个比较直观的界面 从左边Applications树中可以知道,不光可以监控本地JVM运行情况, 还可以监控远程机器上的JVM运行情况. 本地监控:只要打开某个JAVA程序就会自动的加入到本地监控中. 因为本地监控无需配置, 所以这里主要介绍监控远程JVM 要进行远程监控, 本机的VisualVM就必须和远程的JVM要进行通信, Visualvm目前支持两种remote connec……