HotSpot实战

副标题:无

作   者:陈涛著

分类号:

ISBN:9787115343635

微信扫一扫,移动浏览光盘

简介

“蚓无爪牙之利,筋骨之强,上食埃土,下饮黄泉,用心一也。蟹六跪而二螯,非蛇蟮之穴无可寄托者,用心躁也”。对于技术人员来说,如果长期忽略自身技术的根基而去一昧地追求高层框架技术,这无疑是舍本求末的做法。 相较于C或C++程序员,我发现Java程序员更容易忽视基础技术。JVM的出现,为程序员屏蔽了操作系统与硬件的细节,使得程序员从诸如内存管理这样的繁琐任务中解放出来。但这不并等同于允许Java程序员放弃对基础的重视。我们是否有过这样的经历,在遇到内存故障、丢包、网络协议设计、资源瓶颈、证书、二进制等问题时,往往会觉得比较棘手,在寻求解决思路时更是显得力不从心。这实质上是自身技术遇到了瓶颈难以突破所致。可怕的是,想去深究的时候却无从下手。 我写这本书的初衷是为了唤起Java程序员对于基础技术的重视。事实上,任何平台的程序员都应当了解平台的基本特性、实现机制以及接口,这是提高自身修养的必经之路。对于Java程序员来说,我们需要了解的平台就是JVM。了解JVM的基本实现机制,不仅对于解决实际应用中诸如GC等虚拟机问题时有直接帮助,还有利于我们更好地理解语言本身。 所幸的是,Oracle官方已经将虚拟机项目的源码开放出来,这对于我们来说简直就是福音。本书将以OpenJDK和HotSpot为素材,深入浅出地讲解我们最为熟悉的一款虚拟机产品的实现。除了Java程序员,从事与Java或JVM相关的开发、测试、运维等技术人员也将在本书中获益。

目录

第1章 初识HotSpot 1
1.1 JDK概述 2
1.1.1 JCP与JSR 3
1.1.2 JDK的发展历程 4
1.1.3 Java7的语法变化 7
1.2 动手编译虚拟机 13
1.2.1 源代码下载 13
1.2.2 HotSpot源代码结构 13
1.2.3 搭建编译环境 15
1.2.4 编译目标 16
1.2.5 编译过程 17
1.2.6 编译常见问题 19
1.3 实战:在HotSpot内调试HelloWorld 20
1.3.1 认识GDB 21
1.3.2 准备调试脚本 22
1.4 小结 26
第2章 启动 28
2.1 HotSpot内核 28
2.1.1 如何阅读源代码 28
2.1.2 HotSpot内核框架 36
2.1.3 Prims 37
2.1.4 Services 39
2.1.5 Runtime 43
2.2 启动 46
2.2.1 Launcher 46
2.2.2 虚拟机生命周期 48
2.2.3 入口:main函数 50
2.2.4 主线程 51
2.2.5 InitializeJVM函数 53
2.2.6 JNI_CreateJavaVM函数 55
2.2.7 调用Java主方法 56
2.2.8 JVM退出路径56
2.3 系统初始化 57
2.3.1 配置OS模块 58
2.3.2 配置系统属性 60
2.3.3 加载系统库 61
2.3.4 启动线程 62
2.3.5 vm_init_globals函数:初始化全局数据结构 65
2.3.6 init_globals函数:初始化全局模块 65
2.4 小结 69
第3章 类与对象 70
3.1 对象表示机制 71
3.1.1 OOP—Klass二分模型 71
3.1.2 Oops模块 71
3.1.3 OOP框架与对象访问机制 73
3.1.4 Klass与instanceKlass 79
3.1.5 实战:用HSDB调试HotSpot 82
3.2 类的状态转换 87
3.2.1 入口:Class文件 87
3.2.2 类的状态 92
3.2.3 加载 96
3.2.4 链接 101
3.2.5 初始化 104
3.2.6 实战:类的“族谱” 107
3.2.7 实战:系统字典 111
3.3 创建对象 113
3.3.1 实例对象的创建流程 114
3.3.2 实战:探测JVM内部对象 116
3.4 小结 119
第4章 运行时数据区 120
4.1 堆 121
4.1.1 Java的自动内存管理 121
4.1.2 堆的管理 122
4.2 线程私有区域 125
4.2.1 PC 125
4.2.2 JVM栈 126
4.3 方法区 126
4.3.1 纽带作用 127
4.3.2 常量池 130
4.3.3 常量池缓存:ConstantPoolCache 133
4.3.4 方法的表示:methodOop 134
4.3.5 方法的解析:将符号引用转换成直接引用 138
4.3.6 代码放在哪里:ConstMethodOop 141
4.3.7 实战:探测运行时常量池 142
4.4 性能监控数据区:PerfData 147
4.4.1 描述这段空间:PerfMemory 147
4.4.2 查看 148
4.4.3 生产 150
4.5 转储 151
4.5.1 用VisualVM进行转储分析 151
4.5.2 JVMCrash 153
4.6 小结 158
第5章 垃圾收集 159
5.1 堆与GC 160
5.1.1 垃圾收集 160
5.1.2 分代收集 162
5.1.3 快速分配 165
5.1.4 栈上分配和逸出分析 167
5.1.5 GC公共模块 167
5.2 垃圾收集器 170
5.2.1 设计演进 170
5.2.2 CMS收集器 175
5.2.3 G1收集器 180
5.3 实战:性能分析方法 184
5.3.1 获取GC日志 184
5.3.2 GC监控信息 187
5.3.3 内存分析工具 189
5.3.4 选择合适的收集器与GC性能评估 190
5.3.5 不要忽略JVMCrash日志 195
5.4 小结 196
第6章 栈 197
6.1 硬件背景:了解真实机器 198
6.1.1 程序是如何运行的 198
6.1.2 x86与栈帧 199
6.1.3 ARM对Java硬件级加速:Jazelle技术 202
6.2 Java栈 203
6.2.1 寄存器式指令集与栈式指令集 203
6.2.2 HotSpot中的栈 204
6.2.3 栈帧 207
6.2.4 充分利用寄存器资源 210
6.2.5 虚拟机如何调用Java函数 212
6.2.6 优化:栈顶缓存 221
6.2.7 实战:操作数栈 223
6.3 小结 228
第7章 解释器和即时编译器 229
7.1 概述 230
7.2 解释器如何工作 231
7.2.1 Interpreter模块 232
7.2.2 Code模块 234
7.2.3 字节码表 235
7.2.4 CodeCache 236
7.2.5 InterpreterCodelet与Stub队列 239
7.2.6 Code生成器 241
7.2.7 模板表与转发表 244
7.2.8 实战:InterpreterCodelet 247
7.3 即时编译器 250
7.3.1 概述 250
7.3.2 编译器模块 251
7.3.3 编译器的基本结构 252
7.3.4 实战:编译原理实践,了解编译中间环节 255
7.4 小结 267
第8章 指令集 268
8.1 再说栈式指令集 268
8.2 数据传送 270
8.2.1 局部变量、常量池和操作数栈之间的数据传送 270
8.2.2 数据传送指令 272
8.2.3 实战:数组的越界检查 277
8.3 类型转换 279
8.4 对象的创建和操作 281
8.5 程序流程控制 282
8.5.1 控制转移指令 282
8.5.2 条件转移 283
8.5.3 无条件转移 284
8.5.4 复合条件转移 285
8.5.5 实战:switch语句如何使用String 287
8.6 运算 290
8.6.1 加法:iadd 290
8.6.2 取负:ineg 291
8.7 函数的调用和返回 292
8.7.1 Java函数分发机制:VTABLE与ITABLE 293
8.7.2 invoke系列指令 297
8.7.3 动态分发:覆盖 299
8.7.4 静态分发:重载 302
8.8 异常 305
8.8.1 异常表 305
8.8.2 创建异常 306
8.8.3 try—catch 309
8.8.4 finally 311
8.9 小结 312
第9章 虚拟机监控工具 313
9.1 Attach机制 314
9.1.1 AttachProvider与VirtualMachine 314
9.1.2 命令的下发:execute() 317
9.1.3 命令的执行:AttachListener守护线程 319
9.2 查看JVM进程 320
9.2.1 用jps查看Java进程 320
9.2.2 实战:定制jps,允许查看库路径 323
9.3 查看和配置JVM 326
9.3.1 用jinfo查看JVM参数配置 326
9.3.2 实战:扩展flags选项,允许查看命令行参数 330
9.4 堆内存转储工具 332
9.4.1 HeapDump 332
9.4.2 原理 333
9.5 堆转储分析 337
9.5.1 HeapDump分析工具:jhat 337
9.5.2 实战:MAT分析过程 340
9.6 线程转储分析 343
9.6.1 jstack 343
9.6.2 实战:如何分析资源等待 344
9.7 小结 347

已确认勘误

次印刷

页码 勘误内容 提交人 修订印次

HotSpot实战
    • 名称
    • 类型
    • 大小

    光盘服务联系方式: 020-38250260    客服QQ:4006604884

    意见反馈

    14:15

    关闭

    云图客服:

    尊敬的用户,您好!您有任何提议或者建议都可以在此提出来,我们会谦虚地接受任何意见。

    或者您是想咨询:

    用户发送的提问,这种方式就需要有位在线客服来回答用户的问题,这种 就属于对话式的,问题是这种提问是否需要用户登录才能提问

    Video Player
    ×
    Audio Player
    ×
    pdf Player
    ×
    Current View

    看过该图书的还喜欢

    some pictures

    解忧杂货店

    东野圭吾 (作者), 李盈春 (译者)

    loading icon