书籍详情
.NET内存管理宝典
作者:康拉德·科克萨(Konrad Kokosa) 著
出版社:清华大学出版社
出版时间:2021-03-01
ISBN:9787302571339
定价:¥139.00
购买这本书可以去
内容简介
了解.NET内存管理的内部工作原理、陷阱和技术,以便有效地避免软件中出现各种性能和可伸缩性问题。尽管.NET具有自动内存管理功能,但了解 .NET的内存管理工作原理以及如何最好地编写与之高效交互的软件方面仍有许多益处。《.NET内存管理宝典 提高代码质量、性能和可扩展性》是你通过了解和处理 .NET 中的内存管理来编写出更好软件的全面指南。 《.NET内存管理宝典 提高代码质量、性能和可扩展性》经过了 Microsoft 的 .NET 团队全面审查,包含 了25 个有价值的故障排除方案,旨在帮助诊断具有挑战性的内存问题。读者还将受益于多个 .NET 内存管理”规则”,这些规则介绍了编写内存感知代码的方法以及避免常见的破坏性陷阱的方法。 本书内容 ● 了解自动内存管理的理论基础 ● 深入研究.NET内存管理的各个方面,包括对垃圾回收(GC)实现的详细介绍,这些知识如果自行摸索需要多年经验才能获得 ● 获得如何将这些知识应用于实际软件开发中的实用建议 ●使用与 .NET 内存管理相关工具的实用知识来诊断各种与内存相关的问题 ● 探索高级内存管理的各个方面,包括使用Span和Memory类型
作者简介
作 者 简 介 Konrad Kokosa是一位经验丰富的软件设计师和开发人员。他对Microsoft公司的技术特别感兴趣,同时对其他所有技术也充满好奇。Konrad从事编程工作已经有十多年,解决过.NET世界中的许多性能问题和架构难题,设计和提升过.NET应用程序的运行速度。他是一名独立顾问,是meetup和技术会议讲师,喜欢写Twitter。Konrad还分享了他作为.NET领域培训讲师的激情岁月,特别是在应用程序性能、编码优秀实践和诊断方面。他是华沙Web性能小组的创始人。他是Visual Studio和开发工具类别中的Microsoft MVP。他是Dotnetos.org的联合创始人。Dotnetos.org由三位.NET爱好者发起,主要组织.NET性能相关的会议。译 者 简 介 叶伟民 《.NET并发编程实战》的译者。曾在美国旧金山工作,具有16年的.NET开发经验,目前从业于金融科技行业。 涂曙光 前微软技术专家,专注于.NET和JavaScript技术领域。目前在私募基金行业从事低延迟交易系统的开发。
目录
目 录
第1章 基本概念 1
1.1 内存相关术语 2
1.2 手动内存管理 15
1.3 自动内存管理 19
1.4 引用计数 23
1.5 跟踪回收器(Tracking Collector ) 26
1.6 小历史 32
1.7 本章小结 34
规则1 – 自学 34
第2章 底层内存管理 37
2.1 硬件 37
2.2 操作系统 55
2.3 NUMA和CPU组 70
2.4 本章小结 71
规则2 – 避免随机访问,拥抱循序访问 71
规则3 – 提高空间和时间数据局部性 72
规则4 – 不要放弃使用更高级技巧的可能性 72
第3章 内存测量 73
3.1 尽早测量 74
3.2 Windows环境 81
3.3 Linux环境 123
3.4 本章小结 135
规则5 – 尽早测量GC 137
第4章 .NET基础知识 139
4.1 .NET版本 139
4.2 .NET内部原理 141
4.3 程序集和应用程序域 148
4.4 进程内存区域 150
4.5 类型系统 161
4.6 字符串 173
4.7 装箱与拆箱 185
4.8 按引用传递 188
4.9 类型数据局部性 190
4.10 静态数据 193
4.11 本章小结 197
规则6 – 测量你的程序 197
规则7 – 不要假设内存泄漏不存在 198
规则8 – 考虑使用结构 198
规则9 – 考虑使用字符串暂存 198
规则10 – 避免装箱 198
第5章 内存分区 201
5.1 分区策略 201
5.2 按大小分区 202
5.3 按生存期分区 207
5.4 按物理分区 224
5.5 本章小结 241
规则11 – 监视代大小 241
规则12 – 避免不必要的堆引用 241
规则13 – 监视段使用情况 242
第6章 内存分配 243
6.1 内存分配简介 243
6.2 bump pointer分配 244
6.3 空闲列表分配 250
6.4 创建新对象 253
6.5 堆再平衡 260
6.6 OutOfMemoryException异常 262
场景6-1:OutOfMemoryException异常 263
6.7 堆栈分配 265
6.8 避免分配 266
6.9 本章小结 300
规则14 – 在性能攸关的地方,
避免堆分配 300
规则15 – 避免过多的LOH分配 301
规则16 – 如果可行,在堆栈上分配 301
第7章 垃圾回收——简介 303
7.1 高层视图 303
7.2 GC过程的示例 304
7.3 GC过程的步骤 309
场景7-1:分析GC的使用情况 309
7.4 分析GC 313
7.5 垃圾回收性能调优数据 314
7.6 回收触发器 325
7.7 EE挂起 334
场景7-4:分析GC挂起时间 335
7.8 要判决的代 336
场景7-5:被判决的代的分析 338
7.9 本章小结 339
第8章 垃圾回收——标记阶段 341
8.1 对象的遍历与标记 341
8.2 局部变量根 342
8.3 终结根 357
8.4 GC内部根 357
8.5 GC句柄根 358
8.6 处理内存泄漏 363
第9章 垃圾回收——计划阶段 371
9.1 小对象堆 371
9.2 大对象堆 389
9.3 压缩的决策 390
9.4 本章小结 391
第10章 垃圾回收——清除和压缩 393
10.1 清除阶段 393
10.2 压缩阶段 394
10.3 本章小结 404
规则17 – 观察运行时挂起 405
规则18 – 避免“中年危机” 406
规则19 – 避免老的代和LOH碎片化 406
规则20 – 避免显式GC 407
规则21 – 避免内存泄漏 407
规则22 – 避免固定 407
第11章 GC风格 409
11.1 模式概述 409
11.2 模式配置 411
11.3 GC停顿和开销 413
11.4 模式描述 414
11.5 延迟模式 426
11.6 选择GC风格 431
11.7 本章小结 438
规则23 – 有意识地选择GC模式 439
规则24 – 记住延迟模式的相关知识 439
第12章 对象生存期 441
12.1 对象与资源的生命周期 441
12.2 终结 442
12.3 Disposable对象 463
12.4 安全句柄 468
12.5 弱引用 473
12.6 本章小结 486
规则25 – 避免终结器 486
规则26 – 首选显式清理 487
第13章 其他主题 489
13.1 依赖句柄 489
13.2 线程局部存储 494
13.3 托管指针 504
13.4 关于结构的更多知识 526
13.5 对象/结构布局 533
13.6 非托管约束 541
13.7 本章小结 546
第14章 高级技巧 547
14.1 Span和Memory 547 14.2 Unsafe 568
14.3 面向数据设计 573
14.4 未来特性 585
14.5 本章小结 595
第15章 编程API 597
15.1 GC API 597
15.2 CLR Hosting 609
15.3 ClrMD 616
15.4 TraceEvent库 621
15.5 自定义GC 623
15.6 本章小结 626
第1章 基本概念 1
1.1 内存相关术语 2
1.2 手动内存管理 15
1.3 自动内存管理 19
1.4 引用计数 23
1.5 跟踪回收器(Tracking Collector ) 26
1.6 小历史 32
1.7 本章小结 34
规则1 – 自学 34
第2章 底层内存管理 37
2.1 硬件 37
2.2 操作系统 55
2.3 NUMA和CPU组 70
2.4 本章小结 71
规则2 – 避免随机访问,拥抱循序访问 71
规则3 – 提高空间和时间数据局部性 72
规则4 – 不要放弃使用更高级技巧的可能性 72
第3章 内存测量 73
3.1 尽早测量 74
3.2 Windows环境 81
3.3 Linux环境 123
3.4 本章小结 135
规则5 – 尽早测量GC 137
第4章 .NET基础知识 139
4.1 .NET版本 139
4.2 .NET内部原理 141
4.3 程序集和应用程序域 148
4.4 进程内存区域 150
4.5 类型系统 161
4.6 字符串 173
4.7 装箱与拆箱 185
4.8 按引用传递 188
4.9 类型数据局部性 190
4.10 静态数据 193
4.11 本章小结 197
规则6 – 测量你的程序 197
规则7 – 不要假设内存泄漏不存在 198
规则8 – 考虑使用结构 198
规则9 – 考虑使用字符串暂存 198
规则10 – 避免装箱 198
第5章 内存分区 201
5.1 分区策略 201
5.2 按大小分区 202
5.3 按生存期分区 207
5.4 按物理分区 224
5.5 本章小结 241
规则11 – 监视代大小 241
规则12 – 避免不必要的堆引用 241
规则13 – 监视段使用情况 242
第6章 内存分配 243
6.1 内存分配简介 243
6.2 bump pointer分配 244
6.3 空闲列表分配 250
6.4 创建新对象 253
6.5 堆再平衡 260
6.6 OutOfMemoryException异常 262
场景6-1:OutOfMemoryException异常 263
6.7 堆栈分配 265
6.8 避免分配 266
6.9 本章小结 300
规则14 – 在性能攸关的地方,
避免堆分配 300
规则15 – 避免过多的LOH分配 301
规则16 – 如果可行,在堆栈上分配 301
第7章 垃圾回收——简介 303
7.1 高层视图 303
7.2 GC过程的示例 304
7.3 GC过程的步骤 309
场景7-1:分析GC的使用情况 309
7.4 分析GC 313
7.5 垃圾回收性能调优数据 314
7.6 回收触发器 325
7.7 EE挂起 334
场景7-4:分析GC挂起时间 335
7.8 要判决的代 336
场景7-5:被判决的代的分析 338
7.9 本章小结 339
第8章 垃圾回收——标记阶段 341
8.1 对象的遍历与标记 341
8.2 局部变量根 342
8.3 终结根 357
8.4 GC内部根 357
8.5 GC句柄根 358
8.6 处理内存泄漏 363
第9章 垃圾回收——计划阶段 371
9.1 小对象堆 371
9.2 大对象堆 389
9.3 压缩的决策 390
9.4 本章小结 391
第10章 垃圾回收——清除和压缩 393
10.1 清除阶段 393
10.2 压缩阶段 394
10.3 本章小结 404
规则17 – 观察运行时挂起 405
规则18 – 避免“中年危机” 406
规则19 – 避免老的代和LOH碎片化 406
规则20 – 避免显式GC 407
规则21 – 避免内存泄漏 407
规则22 – 避免固定 407
第11章 GC风格 409
11.1 模式概述 409
11.2 模式配置 411
11.3 GC停顿和开销 413
11.4 模式描述 414
11.5 延迟模式 426
11.6 选择GC风格 431
11.7 本章小结 438
规则23 – 有意识地选择GC模式 439
规则24 – 记住延迟模式的相关知识 439
第12章 对象生存期 441
12.1 对象与资源的生命周期 441
12.2 终结 442
12.3 Disposable对象 463
12.4 安全句柄 468
12.5 弱引用 473
12.6 本章小结 486
规则25 – 避免终结器 486
规则26 – 首选显式清理 487
第13章 其他主题 489
13.1 依赖句柄 489
13.2 线程局部存储 494
13.3 托管指针 504
13.4 关于结构的更多知识 526
13.5 对象/结构布局 533
13.6 非托管约束 541
13.7 本章小结 546
第14章 高级技巧 547
14.1 Span和Memory 547 14.2 Unsafe 568
14.3 面向数据设计 573
14.4 未来特性 585
14.5 本章小结 595
第15章 编程API 597
15.1 GC API 597
15.2 CLR Hosting 609
15.3 ClrMD 616
15.4 TraceEvent库 621
15.5 自定义GC 623
15.6 本章小结 626
猜您喜欢