[套装书]Java编程思想+算法导论+深入理解Java虚拟机+Effective Java中文版(4册)

作者
(美)Bruce Eckel(美)Thomas H.Cormen Charles E.Leiserson Ronald L.Rivest Clifford Stein周志明[美] 约书亚·布洛克 (Joshua Bloch)
丛书名
计算机科学丛书
出版社
机械工业出版社
ISBN
9787190107143
简要
简介
内容简介书籍计算机书籍 ---------------------------Java编程思想(第4版)--------------------------- 《Java编程思想(第4版)》赢得了全球程序员的广泛赞誉,即使是最晦涩的概念,在Bruce Eckel的文字亲和力和小而直接的编程示例面前也会化解于无形。从Java的基础语法到最高级特性(深入的面向对象概念、多线程、自动项目构建、单元测试和调试等),《Java编程思想(第4版)》都能逐步指导你轻松掌握。 从java编程思想这本书获得的各项大奖以及来自世界各地的读者评论中,不难看出这是一本经典之作。本书的作者拥有多年教学经验,对C、C++以及Java语言都有独到、深入的见解,以通俗易懂及小而直接的示例解释了一个个晦涩抽象的概念。《Java编程思想(第4版)》共22章,包括操作符、控制执行流程、访问权限控制、复用类、多态、接口、通过异常处理错误、字符串、泛型、数组、容器深入研究、Java I/O系统、枚举类型、并发以及图形化用户界面等内容。这些丰富的内容,包含了Java语言基础语法以及高级特性,适合各个层次的Java程序员阅读,同时也是高等院校讲授面向对象程序设计语言以及Java语言的绝佳教材和参考书。 第4版特点: Java编程思想(第4版)这本书特别适合初学者与专业人员的经典的面向对象叙述方式,为更新的Java SE5/6增加了新的示例和章节。  测验框架显示程序输出。  设计模式贯穿于众多示例中:适配器、桥接器、职责链、命令、装饰器、外观、工厂方法、享元、点名、数据传输对象、空对象、代理、单例、状态、策略、模板方法以及访问者。  为数据传输引入了XML,为用户界面引入了SWT和Flash。  重新撰写了有关并发的章节,有助于读者掌握线程的相关知识。  专门为第4版以及Java SE5/6重写了700多个编译文件中的500多个程序。  支持网站包含了所有源代码、带注解的解决方案指南、网络日志以及多媒体学习资料。  覆盖了所有基础知识,同时论述了高级特性。  详细地阐述了面向对象原理。  在线可获得Java讲座CD,其中包含Bruce Eckel的全部多媒体讲座。 在www.MindView.net网站上可以观看现场讲座、咨询和评论。 . 专门为第4版以及Java SE5/6重写了700多个编译文件中的500多个程序。 支持网站包含了所有源代码、带注解的解决方案指南、网络日志以及多媒体学习资料。 覆盖了所有基础知识,同时论述了高级特性。 详细地阐述了面向对象原理。 在线可获得Java讲座CD,其中包含Bruce Eckel的全部多媒体讲座。 在www.MindView.net网站上可以观看现场讲座、咨询和评论。 ---------------------------算法导论(原书第3版)--------------------------- 在有关算法的书中,有一些叙述非常严谨,但不够全面;另一些涉及了大量的题材,但又缺乏严谨性。本书将严谨性和全面性融为一体,深入讨论各类算法,并着力使这些算法的设计和分析能为各个层次的读者接受。全书各章自成体系,可以作为独立的学习单元;算法以英语和伪代码的形式描述,具备初步程序设计经验的人就能看懂;说明和解释力求浅显易懂,不失深度和数学严谨性。 《算法导论(原书第3版)》选材经典、内容丰富、结构合理、逻辑清晰,对本科生的数据结构课程和研究生的算法课程都是非常实用的教材,在IT专业人员的职业生涯中,本书也是一本案头必备的参考书或工程实践手册。 第3版的主要变化: 新增了van Emde Boas树和多线程算法,并且将矩阵基础移至附录。 修订了递归式(现在称为“分治策略”)那一章的内容,更广泛地覆盖分治法。 移除两章很少讲授的内容:二项堆和排序网络。 修订了动态规划和贪心算法相关内容。 流网络相关材料现在基于边上的全部流。 由于关于矩阵基础和Strassen算法的材料移到了其他章,矩阵运算这一章的内容所占篇幅更小。 修改了对Knuth-Morris-Pratt字符串匹配算法的讨论。 新增100道练习和28道思考题,还更新并补充了参考文献。 ---------------------------Effective Java中文版(原书第3版)--------------------------- 本书一共包含90个条目,每个条目讨论Java程序设计中的一条规则。这些规则反映了最有经验的优秀程序员在实践中常用的一些有益的做法。全书以一种比较松散的方式将这些条目组织成11章,每一章都涉及软件设计的一个主要方面。因此,本书并不一定需要按部就班地从头读到尾,因为每个条目都有一定程度的独立性。这些条目相互之间经常交叉引用,因此可以很容易地在书中找到自己需要的内容。 本书的目标是帮助读者更加有效地使用Java编程语言及其基本类库:java.lang、java.util和java.io,以及子包,如java.util.concurrent和java.util.function。本书时不时地也会讨论其他的类库。 ---------------------------深入理解Java虚拟机:JVM高级特性与最佳实践(第2版)--------------------------- 《深入理解Java虚拟机:JVM高级特性与最佳实践(第2版)》第1版两年内印刷近10次,4家网上书店的评论近4?000条,98%以上的评论全部为5星级的好评,是整个Java图书领域公认的经典著作和超级畅销书,繁体版在台湾也十分受欢迎。第2版在第1版的基础上做了很大的改进:根据最新的JDK 1.7对全书内容进行了全面的升级和补充;增加了大量处理各种常见JVM问题的技巧和最佳实践;增加了若干与生产环境相结合的实战案例;对第1版中的错误和不足之处的修正;等等。第2版不仅技术更新、内容更丰富,而且实战性更强。 全书共分为五大部分,围绕内存管理、执行子系统、程序编译与优化、高效并发等核心主题对JVM进行了全面而深入的分析,深刻揭示了JVM的工作原理。第一部分从宏观的角度介绍了整个Java技术体系、Java和JVM的发展历程、模块化,以及JDK的编译,这对理解本书后面内容有重要帮助。第二部分讲解了JVM的自动内存管理,包括虚拟机内存区域的划分原理以及各种内存溢出异常产生的原因;常见的垃圾收集算法以及垃圾收集器的特点和工作原理;常见虚拟机监控与故障处理工具的原理和使用方法。第三部分分析了虚拟机的执行子系统,包括类文件结构、虚拟机类加载机制、虚拟机字节码执行引擎。第四部分讲解了程序的编译与代码的优化,阐述了泛型、自动装箱拆箱、条件编译等语法糖的原理;讲解了虚拟机的热点探测方法、HotSpot的即时编译器、编译触发条件,以及如何从虚拟机外部观察和分析JIT编译的数据和结果;第五部分探讨了Java实现高效并发的原理,包括JVM内存模型的结构和操作;原子性、可见性和有序性在Java内存模型中的体现;先行发生原则的规则和使用;线程在Java语言中的实现原理;虚拟机实现高效并发所做的一系列锁优化措施。
目录



---------------------------Java编程思想(第4版)---------------------------


读者评论
前言
简介
第1章 对象导论
1.1 抽象过程
1.2 每个对象都有一个接口
1.3 每个对象都提供服务
1.4 被隐藏的具体实现
1.5 复用具体实现
1.6 继承
1.6.1 “是一个”(is-a)与“像是一个”(is-like-a)关系
1.7 伴随多态的可互换对象
1.8 单根继承结构
1.9 容器
1.9.1 参数化类型(范型)
1.10 对象的创建和生命期
1.11 异常处理:处理错误
1.12 并发编程
1.13 Java与Internet
1.13.1 Web是什么
1.13.2 客户端编程
1.13.3 服务器端编程
1.22 总结
第2章 一切都是对象
2.1 用引用操纵对象
2.2 必须由你创建所有对象
2.2.1 存储到什么地方
2.2.2 特例:基本类型
2.2.3 Java中的数组
2.3 永远不需要销毁对象
2.3.1 作用域
2.3.2 对象的作用域
2.4 创建新的数据类型:类
2.4.1 域和方法
2.4.2 基本成员默认值
2.5 方法、参数和返回值
2.5.1 参数列表
2.6 构建一个Java程序
2.6.1 名字可见性
2.6.2 运用其他构件
2.6.3 static 关键字
2.7 你的第一个Java程序
编译和运行
2.8 注释和嵌入式文档
2.8.1 注释文档
2.8.2 语法
2.8.3 嵌入式HTML
2.8.4 一些标签示例
2.8.5 文档示例
2.9 编码风格
2.10 总结
2.11 练习
第3章 操作符
3.1 更简单的打印语句
3.2 使用Java操作符
3.3 优先级
3.4 赋值
3.4.1 方法调用中的别名问题
3.5 算术操作符
3.5.1 一元加、减操作符
3.6 自动递增和递减
3.7 关系操作符
3.7.1 测试对象的等价性
3.8 逻辑操作符
3.8.1 短路
3.9 直接常量
3.9.1 指数记数法
3.10 按位操作符
3.11 移位操作符
3.12 三元操作符 if-else
3.13 字符串操作符 + 和 +=
3.14 使用操作符时常犯的错误
3.15 类型转换操作符
3.15.1 截尾和舍入
3.15.2提升
3.16 Java没有“sizeof”
3.17 操作符小结
3.18 总结
第4章 控制执行流程
4.1 true和false
4.2 if-else
4.3 迭代
4.3.1 do-while
4.3.2 for
4.3.3 逗号操作符
4.4 Foreach语法
4.5 return
4.6 break和 continue
4.7 臭名昭著的“goto”
4.8 switch
4.9 总结
第5章 初始化与清理
5.1 用构造器确保初始化
5.2 方法重载
5.2.1 区分重载方法
5.2.2 涉及基本类型的重载
5.2.3 以返回值区分重载方法
5.3 缺省构造器
5.4 this关键字
5.4.1 在构造器中调用构造器
5.4.2 static的含义
5.5 清理:终结处理和垃圾回收
5.5.1 finalize()的用途何在
5.5.2 你必须实施清理
5.5.3 终结条件
5.5.4 垃圾回收器如何工作
5.6 成员初始化
5.6.1 指定初始化
5.7 构造器初始化
5.7.1 初始化顺序
5.7.2. 静态数据的初始化
5.7.3. 显式的静态初始化
5.7.4. 非静态实例初始化
5.8 数组初始化
5.8.1 可变参数列表
5.9 枚举类型
5.10 总结
第6章 访问权限控制
第7章 复用类
第8章 多态
第9章 接口
第10章 内部类
第11章 持有对象
第12章 通过异常处理错误
第13章 字符串
第14章 类型信息
第15章 泛型
第16章 数组
第17章 容器深入研究
第18章 Java I/O系统
第19章 枚举类型
第20章 注解
第21章 并发
第22章 图形化用户界面
附录A 补充材料
可下载的补充材料
Thinking in C:Java的基础
Java编程思想 研讨课
Hands-on Java研讨课CD
Thinking in Objects研讨课
Thinking in Enterprise Java
Thinking in Patterns(with Java)
Thinking in Patterns研讨课
设计咨询与复审
附录B 资源
软件
编辑器与IDE
书籍
分析与设计
Python
我的著作列表
索引




---------------------------算法导论(原书第3版)---------------------------


《算法导论(原书第3版)》
出版者的话
译者序
前言
第一部分 基础知识
第1章 算法在计算中的作用3
1.1 算法3
1.2 作为一种技术的算法6
思考题8
本章注记8
第2章 算法基础9
2.1 插入排序9
2.2 分析算法13
2.3 设计算法16
2.3.1 分治法16
2.3.2 分析分治算法20
思考题22
本章注记24
第3章 函数的增长25
3.1 渐近记号25
3.2 标准记号与常用函数30
思考题35
本章注记36
第4章 分治策略37
4.1 最大子数组问题38
4.2 矩阵乘法的Strassen算法43
4.3 用代入法求解递归式47
4.4 用递归树方法求解递归式50
4.5 用主方法求解递归式53
4.6 证明主定理55
4.6.1 对b的幂证明主定理56
4.6.2 向下取整和向上取整58
思考题60
本章注记62
第5章 概率分析和随机算法65
5.1 雇用问题65
5.2 指示器随机变量67
5.3 随机算法69
5.4 概率分析和指示器随机变量的进一步使用73
5.4.1 生日悖论73
5.4.2 球与箱子75
5.4.3 特征序列76
5.4.4 在线雇用问题78
思考题79
本章注记80
第二部分 排序和顺序统计量
第6章 堆排序84
6.1 堆84
6.2 维护堆的性质85
6.3 建堆87
6.4 堆排序算法89
6.5 优先队列90
思考题93
本章注记94
第7章 快速排序95
7.1 快速排序的描述95
7.2 快速排序的性能97
7.3 快速排序的随机化版本100
7.4 快速排序分析101
7.4.1 最坏情况分析101
7.4.2 期望运行时间101
思考题103
本章注记106
第8章 线性时间排序107
8.1 排序算法的下界107
8.2 计数排序108
8.3 基数排序110
8.4 桶排序112
思考题114
本章注记118
第9章 中位数和顺序统计量119
9.1 最小值和最大值119
9.2 期望为线性时间的选择算法120
9.3 最坏情况为线性时间的选择算法123
思考题125
本章注记126
第三部分 数据结构
第10章 基本数据结构129
10.1 栈和队列129
10.2 链表131
10.3 指针和对象的实现134
10.4 有根树的表示137
思考题139
本章注记141
第11章 散列表142
11.1 直接寻址表142
11.2 散列表143
11.3 散列函数147
11.3.1 除法散列法147
11.3.2 乘法散列法148
11.3.3 全域散列法148
11.4 开放寻址法151
11.5 完全散列156
思考题158
本章注记160
第12章 二叉搜索树161
12.1 什么是二叉搜索树161
12.2 查询二叉搜索树163
12.3 插入和删除165
12.4 随机构建二叉搜索树169
思考题171
本章注记173
第13章 红黑树174
13.1 红黑树的性质174
13.2 旋转176
13.3 插入178
13.4 删除183
思考题187
本章注记191
第14章 数据结构的扩张193
14.1 动态顺序统计193
14.2 如何扩张数据结构196
14.3 区间树198
思考题202
本章注记202
第四部分 高级设计和分析技术
第15章 动态规划204
15.1 钢条切割204
15.2 矩阵链乘法210
15.3 动态规划原理215
15.4 最长公共子序列222
15.5 最优二叉搜索树226
思考题231
本章注记236
第16章 贪心算法237
16.1 活动选择问题237
16.2 贪心算法原理242
16.3 赫夫曼编码245
16.4 拟阵和贪心算法250
16.5 用拟阵求解任务调度问题253
思考题255
本章注记257
第17章 摊还分析258
17.1 聚合分析258
17.2 核算法261
17.3 势能法262
17.4 动态表264
17.4.1 表扩张265
17.4.2 表扩张和收缩267
思考题270
本章注记273
第五部分 高级数据结构
第18章 B树277
18.1 B树的定义279
18.2 B树上的基本操作281
18.3 从B树中删除关键字286
思考题288
本章注记289
第19章 斐波那契堆290
19.1 斐波那契堆结构291
19.2 可合并堆操作292
19.3 关键字减值和删除一个结点298
19.4 最大度数的界300
思考题302
本章注记305
第20章 van Emde Boas树306
20.1 基本方法306
20.2 递归结构308
20.2.1 原型van Emde Boas结构310
20.2.2 原型van Emde Boas结构上的操作311
20.3 van Emde Boas树及其操作314
20.3.1 van Emde Boas树315
20.3.2 van Emde Boas树的操作317
思考题322
本章注记323
第21章 用于不相交集合的数据结构324
21.1 不相交集合的操作324
21.2 不相交集合的链表表示326
21.3 不相交集合森林328
*21.4 带路径压缩的按秩合并的分析331
思考题336
本章注记337
第六部分 图算法
第22章 基本的图算法341
22.1 图的表示341
22.2 广度优先搜索343
22.3 深度优先搜索349
22.4 拓扑排序355
22.5 强连通分量357
思考题360
本章注记361
第23章 最小生成树362
23.1 最小生成树的形成362
23.2 Kruskal算法和Prim算法366
思考题370
本章注记373
第24章 单源最短路径374
24.1 BellmanFord算法379
24.2 有向无环图中的单源最短路径问题381
24.3 Dijkstra算法383
24.4 差分约束和最短路径387
24.5 最短路径性质的证明391
思考题395
本章注记398
第25章 所有结点对的最短路径问题399
25.1 最短路径和矩阵乘法400
25.2 FloydWarshall算法404
25.3 用于稀疏图的Johnson算法409
思考题412
本章注记412
第26章 最大流414
26.1 流网络414
26.2 FordFulkerson方法418
26.3 最大二分匹配428
26.4 推送重贴标签算法431
26.5 前置重贴标签算法438
思考题446
本章注记449
第七部分 算法问题选编
第27章 多线程算法453
27.1 动态多线程基础454
27.2 多线程矩阵乘法465
27.3 多线程归并排序468
思考题472
本章注记476
第28章 矩阵运算478
28.1 求解线性方程组478
28.2 矩阵求逆486
28.3 对称正定矩阵和最小二乘逼近489
思考题493
本章注记494
第29章 线性规划495
29.1 标准型和松弛型499
29.2 将问题表达为线性规划504
29.3 单纯形算法507
29.4 对偶性516
29.5 初始基本可行解520
思考题525
本章注记526
第30章 多项式与快速傅里叶变换527
30.1 多项式的表示528
30.2 DFT与FFT531
30.3 高效FFT实现536
思考题539
本章注记541
第31章 数论算法543
31.1 基础数论概念543
31.2 最大公约数547
31.3 模运算550
31.4 求解模线性方程554
31.5 中国余数定理556
31.6 元素的幂558
31.7 RSA公钥加密系统561
31.8 素数的测试565
31.9 整数的因子分解571
思考题574
本章注记576
第32章 字符串匹配577
32.1 朴素字符串匹配算法578
32.2 RabinKarp算法580
32.3 利用有限自动机进行字符串匹配583
32.4 KnuthMorrisPratt算法588
思考题594
本章注记594
第33章 计算几何学595
33.1 线段的性质595
33.2 确定任意一对线段是否相交599
33.3 寻找凸包604
33.4 寻找最近点对610
思考题613
本章注记615
第34章 NP完全性616
34.1 多项式时间619
34.2 多项式时间的验证623
34.3 NP完全性与可归约性626
34.4 NP完全性的证明633
34.5 NP完全问题638
34.5.1 团问题638
34.5.2 顶点覆盖问题640
34.5.3 哈密顿回路问题641
34.5.4 旅行商问题644
34.5.5 子集和问题645
思考题647
本章注记649
第35章 近似算法651
35.1 顶点覆盖问题652
35.2 旅行商问题654
35.2.1 满足三角不等式的旅行商问题654
35.2.2 一般旅行商问题656
35.3 集合覆盖问题658
35.4 随机化和线性规划661
35.5 子集和问题663
思考题667
本章注记669
第八部分 附录:数学基础知识
附录A 求和672
A.1 求和公式及其性质672
A.2 确定求和时间的界674
思考题678
附录注记678
附录B 集合等离散数学内容679
B.1 集合679
B.2 关系682
B.3 函数683
B.4 图685
B.5 树687
B.5.1 自由树688
B.5.2 有根树和有序树689
B.5.3 二叉树和位置树690
思考题691
附录注记692
附录C 计数与概率693
C.1 计数693
C.2 概率696
C.3 离散随机变量700
C.4 几何分布与二项分布702
*C.5 二项分布的尾部705
思考题708
附录注记708
附录D 矩阵709
D.1 矩阵与矩阵运算709
D.2 矩阵基本性质712
思考题714
附录注记715
参考文献716
索引732


---------------------------Effective Java中文版(原书第3版)---------------------------


推荐序
译者序
前言
致谢
第1章 引言 1
第2章 创建和销毁对象 4
第1条:用静态工厂方法代替构造器 4
第2条:遇到多个构造器参数时要考虑使用构建器 8
第3条:用私有构造器或者枚举类型强化Singleton属性 13
第4条:通过私有构造器强化不可实例化的能力 15
第5条:优先考虑依赖注入来引用资源 16
第6条:避免创建不必要的对象 18
第7条:消除过期的对象引用 20
第8条:避免使用终结方法和清除方法 23
第9条:try-with-resources优先于try-finally 27
第3章 对于所有对象都通用的方法 30
第10条:覆盖equals时请遵守通用约定 30
第11条:覆盖equals时总要覆盖hashCode 40
第12条:始终要覆盖toString 44
第13条:谨慎地覆盖clone 46
第14条:考虑实现Comparable接口 53
第4章 类和接口 59
第15条:使类和成员的可访问性最小化 59
第16条:要在公有类而非公有域中使用访问方法 62
第17条:使可变性最小化 64
第18条:复合优先于继承 70
第19条:要么设计继承并提供文档说明,要么禁止继承 75
第20条:接口优于抽象类 79
第21条:为后代设计接口 83
第22条:接口只用于定义类型 85
第23条:类层次优于标签类 86
第24条:静态成员类优于非静态成员类 88
第25条:限制源文件为单个顶级类 91
第5章 泛型 93
第26条:请不要使用原生态类型 93
第27条:消除非受检的警告 97
第28条:列表优于数组 99
第29条:优先考虑泛型 102
第30条:优先考虑泛型方法 106
第31条:利用有限制通配符来提升API的灵活性 109
第32条:谨慎并用泛型和可变参数 114
第33条:优先考虑类型安全的异构容器 118
第6章 枚举和注解 123
第34条:用enum代替int常量 123
第35条:用实例域代替序数 131
第36条:用EnumSet代替位域 132
第37条:用EnumMap代替序数索引 134
第38条:用接口模拟可扩展的枚举 138
第39条:注解优先于命名模式 140
第40条:坚持使用Override注解 147
第41条:用标记接口定义类型 149
第7章 Lambda和Stream 151
第42条:Lambda优先于匿名类 151
第43条:方法引用优先于Lambda 154
第44条:坚持使用标准的函数接口 156
第45条:谨慎使用Stream 159
第46条:优先选择Stream中无副作用的函数 164
第47条:Stream要优先用Collection作为返回类型 168
第48条:谨慎使用Stream并行 172
第8章 方法 176
第49条:检查参数的有效性 176
第50条:必要时进行保护性拷贝 179
第51条:谨慎设计方法签名 182
第52条:慎用重载 184
第53条:慎用可变参数 189
第54条:返回零长度的数组或者集合,而不是null 190
第55条:谨慎返回optinal 192
第56条:为所有导出的API元素编写文档注释 196
第9章 通用编程 202
第57条:将局部变量的作用域最小化 202
第58条:for-each循环优先于传统的for循环 204
第59条:了解和使用类库 207
第60条:如果需要精确的答案,请避免使用float和double 209
第61条:基本类型优先于装箱基本类型 211
第62条:如果其他类型更适合,则尽量避免使用字符串 213
第63条:了解字符串连接的性能 215
第64条:通过接口引用对象 216
第65条:接口优先于反射机制 218
第66条:谨慎地使用本地方法 220
第67条:谨慎地进行优化 221
第68条:遵守普遍接受的命名惯例 223
第10章 异常 227
第69条:只针对异常的情况才使用异常 227
第70条:对可恢复的情况使用受检异常,对编程错误使用运行时异常 229
第71条:避免不必要地使用受检异常 231
第72条:优先使用标准的异常 232
第73条:抛出与抽象对应的异常 234
第74条:每个方法抛出的所有异常都要建立文档 235
第75条:在细节消息中包含失败-捕获信息 237
第76条:努力使失败保持原子性 238
第77条:不要忽略异常 239
第11章 并发 241
第78条:同步访问共享的可变数据 241
第79条:避免过度同步 245
第80条:executor、task和stream优先于线程 250
第81条:并发工具优先于wait和notify 251
第82条:线程安全性的文档化 256
第83条:慎用延迟初始化 258
第84条:不要依赖于线程调度器 261
第12章 序列化 263
第85条:其他方法优先于Java序列化 263
第86条:谨慎地实现Serializable接口 266
第87条:考虑使用自定义的序列化形式 269
第88条:保护性地编写readObject方法 274
第89条:对于实例控制,枚举类型优先于readResolve 279
第90条:考虑用序列化代理代替序列化实例 282
附录 与第2版中条目的对应关系 286
参考文献 289



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


《深入理解Java虚拟机:JVM高级特性与最佳实践(第2版)》
前言
第一部分 走近Java
第1章 走近Java / 2
1.1 概述 / 2
1.2 Java技术体系 / 3
1.3 Java发展史 / 5
1.4 Java虚拟机发展史 / 9
1.4.1 Sun Classic / Exact VM / 9
1.4.2 Sun HotSpot VM / 11
1.4.3 Sun Mobile-Embedded VM / Meta-Circular VM / 12
1.4.4 BEA JRockit / IBM J9 VM / 13
1.4.5 Azul VM / BEA Liquid VM / 14
1.4.6 Apache Harmony / Google Android Dalvik VM / 14
1.4.7 Microsoft JVM及其他 / 15
1.5 展望Java技术的未来 / 16
1.5.1 模块化 / 17
1.5.2 混合语言 / 17
1.5.3 多核并行 / 19
1.5.4 进一步丰富语法 / 20
1.5.5 64位虚拟机 / 21
1.6 实战:自己编译JDK / 22
1.6.1 获取JDK源码 / 22
1.6.2 系统需求 / 24
1.6.3 构建编译环境 / 25
1.6.4 进行编译 / 26
1.6.5 在IDE工具中进行源码调试 / 31
1.7 本章小结 / 35
第二部分 自动内存管理机制
第2章 Java内存区域与内存溢出异常 / 38
2.1 概述 / 38
2.2 运行时数据区域 / 38
2.2.1 程序计数器 / 39
2.2.2 Java虚拟机栈 / 39
2.2.3 本地方法栈 / 40
2.2.4 Java堆 / 41
2.2.5 方法区 / 41
2.2.6 运行时常量池 / 42
2.2.7 直接内存 / 43
2.3 HotSpot虚拟机对象探秘 / 43
2.3.1 对象的创建 / 44
2.3.2 对象的内存布局 / 47
2.3.3 对象的访问定位 / 48
2.4 实战:OutOfMemoryError异常 / 50
2.4.1 Java堆溢出 / 51
2.4.2 虚拟机栈和本地方法栈溢出 / 53
2.4.3 方法区和运行时常量池溢出 / 56
2.4.4 本机直接内存溢出 / 59
2.5 本章小结 / 60
第3章 垃圾收集器与内存分配策略 / 61
3.1 概述 / 61
3.2 对象已死吗 / 62
3.2.1 引用计数算法 / 62
3.2.2 可达性分析算法 / 64
3.2.3 再谈引用 / 65
3.2.4 生存还是死亡 / 66
3.2.5 回收方法区 / 68
3.3 垃圾收集算法 / 69
3.3.1 标记-清除算法 / 69
3.3.2 复制算法 / 70
3.3.3 标记-整理算法 / 71
3.3.4 分代收集算法 / 72
3.4 HotSpot的算法实现 / 72
3.4.1 枚举根节点 / 72
3.4.2 安全点 / 73
3.4.3 安全区域 / 74
3.5 垃圾收集器 / 75
3.5.1 Serial收集器 / 76
3.5.2 ParNew收集器 / 77
3.5.3 Parallel Scavenge收集器 / 79
3.5.4 Serial Old收集器 / 80
3.5.5 Parallel Old收集器 / 80
3.5.6 CMS收集器 / 81
3.5.7 G1收集器 / 84
3.5.8 理解GC日志 / 89
3.5.9 垃圾收集器参数总结 / 90
3.6 内存分配与回收策略 / 91
3.6.1 对象优先在Eden分配 / 91
3.6.2 大对象直接进入老年代 / 93
3.6.3 长期存活的对象将进入老年代 / 95
3.6.4 动态对象年龄判定 / 97
3.6.5 空间分配担保 / 98
3.7 本章小结 / 100
第4章 虚拟机性能监控与故障处理工具 / 101
4.1 概述 / 101
4.2 JDK的命令行工具 / 101
4.2.1 jps:虚拟机进程状况工具 / 104
4.2.2 jstat:虚拟机统计信息监视工具 / 105
4.2.3 jinfo:Java配置信息工具 / 106
4.2.4 jmap:Java内存映像工具 / 107
4.2.5 jhat:虚拟机堆转储快照分析工具 / 108
4.2.6 jstack:Java堆栈跟踪工具 / 109
4.2.7 HSDIS:JIT生成代码反汇编 / 111
4.3 JDK的可视化工具 / 114
4.3.1 JConsole:Java监视与管理控制台 / 115
4.3.2 VisualVM:多合一故障处理工具 / 122
4.4 本章小结 / 131
第5章 调优案例分析与实战 / 132
5.1 概述 / 132
5.2 案例分析 / 132
5.2.1 高性能硬件上的程序部署策略 / 132
5.2.2 集群间同步导致的内存溢出 / 135
5.2.3 堆外内存导致的溢出错误 / 136
5.2.4 外部命令导致系统缓慢 / 137
5.2.5 服务器JVM进程崩溃 / 138
5.2.6 不恰当数据结构导致内存占用过大 / 139
5.2.7 由Windows虚拟内存导致的长时间停顿 / 141
5.3 实战:Eclipse运行速度调优 / 142
5.3.1 调优前的程序运行状态 / 142
5.3.2 升级JDK 1.6的性能变化及兼容问题 / 145
5.3.3 编译时间和类加载时间的优化 / 150
5.3.4 调整内存设置控制垃圾收集频率 / 153
5.3.5 选择收集器降低延迟 / 157
5.4 本章小结 / 160
第三部分 虚拟机执行子系统
第6章 类文件结构 / 162
6.1 概述 / 162
6.2 无关性的基石 / 162
6.3 Class类文件的结构 / 164
6.3.1 魔数与Class文件的版本 / 166
6.3.2 常量池 / 167
6.3.3 访问标志 / 173
6.3.4 类索引、父类索引与接口索引集合 / 174
6.3.5 字段表集合 / 175
6.3.6 方法表集合 / 178
6.3.7 属性表集合 / 180
6.4 字节码指令简介 / 196
6.4.1 字节码与数据类型 / 197
6.4.2 加载和存储指令 / 199
6.4.3 运算指令 / 200
6.4.4 类型转换指令 / 202
6.4.5 对象创建与访问指令 / 203
6.4.6 操作数栈管理指令 / 203
6.4.7 控制转移指令 / 204
6.4.8 方法调用和返回指令 / 204
6.4.9 异常处理指令 / 205
6.4.10 同步指令 / 205
6.5 公有设计和私有实现 / 206
6.6 Class文件结构的发展 / 207
6.7 本章小结 / 208
第7章 虚拟机类加载机制 / 209
7.1 概述 / 209
7.2 类加载的时机 / 210
7.3 类加载的过程 / 214
7.3.1 加载 / 214
7.3.2 验证 / 216
7.3.3 准备 / 219
7.3.4 解析 / 220
7.3.5 初始化 / 225
7.4 类加载器 / 227
7.4.1 类与类加载器 / 228
7.4.2 双亲委派模型 / 229
7.4.3 破坏双亲委派模型 / 233
7.5 本章小结 / 235
第8章 虚拟机字节码执行引擎 / 236
8.1 概述 / 236
8.2 运行时栈帧结构 / 236
8.2.1 局部变量表 / 238
8.2.2 操作数栈 / 242
8.2.3 动态连接 / 243
8.2.4 方法返回地址 / 243
8.2.5 附加信息 / 244
8.3 方法调用 / 244
8.3.1 解析 / 244
8.3.2 分派 / 246
8.3.3 动态类型语言支持 / 258
8.4 基于栈的字节码解释执行引擎 / 269
8.4.1 解释执行 / 269
8.4.2 基于栈的指令集与基于寄存器的指令集 / 270
8.4.3 基于栈的解释器执行过程 / 272
8.5 本章小结 / 275
第9章 类加载及执行子系统的案例与实战 / 276
9.1 概述 / 276
9.2 案例分析 / 276
9.2.1 Tomcat:正统的类加载器架构 / 276
9.2.2 OSGi:灵活的类加载器架构 / 279
9.2.3 字节码生成技术与动态代理的实现 / 282
9.2.4 Retrotranslator:跨越JDK版本 / 286
9.3 实战:自己动手实现远程执行功能 / 289
9.3.1 目标 / 290
9.3.2 思路 / 290
9.3.3 实现 / 291
9.3.4 验证 / 298
9.4 本章小结 / 299
第四部分 程序编译与代码优化
第10章 早期(编译期)优化 / 302
10.1 概述 / 302
10.2 Javac编译器 / 303
10.2.1 Javac的源码与调试 / 303
10.2.2 解析与填充符号表 / 305
10.2.3 注解处理器 / 307
10.2.4 语义分析与字节码生成 / 307
10.3 Java语法糖的味道 / 311
10.3.1 泛型与类型擦除 / 311
10.3.2 自动装箱、拆箱与遍历循环 / 315
10.3.3 条件编译 / 317
10.4 实战:插入式注解处理器 / 318
10.4.1 实战目标 / 318
10.4.2 代码实现 / 319
10.4.3 运行与测试 / 326
10.4.4 其他应用案例 / 327
10.5 本章小结 / 328
第11章 晚期(运行期)优化 / 329
11.1 概述 / 329
11.2 HotSpot虚拟机内的即时编译器 / 329
11.2.1 解释器与编译器 / 330
11.2.2 编译对象与触发条件 / 332
11.2.3 编译过程 / 337
11.2.4 查看及分析即时编译结果 / 339
11.3 编译优化技术 / 345
11.3.1 优化技术概览 / 346
11.3.2 公共子表达式消除 / 350
11.3.3 数组边界检查消除 / 351
11.3.4 方法内联 / 352
11.3.5 逃逸分析 / 354
11.4 Java与C/C++的编译器对比 / 356
11.5 本章小结 / 358
第五部分 高效并发
第12章 Java内存模型与线程 / 360
12.1 概述 / 360
12.2 硬件的效率与一致性 / 361
12.3 Java内存模型 / 362
12.3.1 主内存与工作内存 / 363
12.3.2 内存间交互操作 / 364
12.3.3 对于volatile型变量的特殊规则 / 366
12.3.4 对于long和double型变量的特殊规则 / 372
12.3.5 原子性、可见性与有序性 / 373
12.3.6 先行发生原则 / 375
12.4 Java与线程 / 378
12.4.1 线程的实现 / 378
12.4.2 Java线程调度 / 381
12.4.3 状态转换 / 383
12.5 本章小结 / 384
第13章 线程安全与锁优化 / 385
13.1 概述 / 385
13.2 线程安全 / 385
13.2.1 Java语言中的线程安全 / 386
13.2.2 线程安全的实现方法 / 390
13.3 锁优化 / 397
13.3.1 自旋锁与自适应自旋 / 398
13.3.2 锁消除 / 398
13.3.3 锁粗化 / 400
13.3.4 轻量级锁 / 400
13.3.5 偏向锁 / 402
13.4 本章小结 / 403
附  录
附录A 编译Windows版的OpenJDK / 406
附录B 虚拟机字节码指令表 / 414
附录C HotSpot虚拟机主要参数表 / 420
附录D 对象查询语言(OQL)简介 / 424
附录E JDK历史版本轨迹 / 430

推荐

车牌查询
桂ICP备20004708号-3