游戏化思维自学英语,像玩游戏一样过关斩将,让你对学习上瘾,在无形之中用地道的英语跟老外谈笑风生。详情加微信了解:cool-smiler

Java盗墓笔记:JDK开发团队大师遗失手稿

书城 JackLeon 2个月前 (04-16) 52次浏览 0个评论 扫描二维码

**下载统一解压和阅读密码(creativeview.cn):**
隐藏内容:********, 支付¥6.88下载,或者升级VIP可下载全站内容。

书名:Java 盗墓笔记:JDK 开发团队大师遗失手稿
Doug Lea 是纽约州立大学奥斯威戈分校计算机科学教授和
现任计算机科学系主任,专门研究并发编程和并发数据结构的设计。他是 Java Community Process 的执行委员会成员,主持 JSR 166,它为 Java 编程语言添加了并发实用程序。Doug Lea 大神关于 Java 7 引入的他写的 Fork/Join 框架的论文。反应式编程(Reactive Programming/RP)作为一种范式在整个业界正在逐步受到认可和落地,是对过往系统的业务需求理解梳理之后对系统技术设计/架构模式的提升总结。Java 作为一个成熟平台,对于趋势一向有些稳健的接纳和跟进能力,有着令人惊叹的生命活力:Java 7 提供了 ForkJoinPool,支持了 Java 8 提供的 Stream,另外 Java 8 还提供了 Lambda(有效地表达和使用 RP 需要 FP 的语言构件和理念);有了前面的这些稳健但不失时机的准备,在 Java 9 中提供了面向 RP 的官方 Flow API,实际上是直接把 Reactive Streams 的接口加在 Java 标准库中,即 Reactive Streams 规范转正了。Reactive Streams 是 RP 的基础核心组件,Java 提供了 Flow API 标志着 RP 完成了由 集市式的自由探索阶段 向 教堂式的规范统一阶段 的转变。

Java盗墓笔记:JDK开发团队大师遗失手稿

目录

1. ⽤动态代理进⾏修饰

动态代理是构建 Decorator 和 Adapter 的⽅便⼯具 Proxy 模式

动态代理机制

什么都不做的适配器通⽤适配器类

动态代理作为 Decorator 动态代理作为适配器

性能成本结束语

2. 使⽤通配符简化泛型使⽤理解通配符捕获

通配符基本介绍

我已使⽤了⼀个通配符 — 接下来呢? 通配符捕获

捕获助⼿类 型 推 断 结束语

3. 应⽤ fork-join 框架

学习如何使⽤ Java 7 中的 fork-join 框架实现细粒度并⾏性硬件趋势驱动编程语⾔

实现更细粒度的并⾏性 Divide and conquer Fork-join

fork-join 框架剖析

⼯作窃取结束语

4. 正确使⽤ Volatile 变量


volatile 变量使⽤指南 Volatile 变量

正确使⽤ volatile 变量的条件性能考虑

正确使⽤ volatile 的模式模式 #1:状态标志

模式 #2:⼀次性安全发布(one-time safe publication) 模式 #3:独⽴观察(independent observation)

模式 #4:“volatile bean” 模式volatile 的⾼级模式

模式 #5:开销较低的读-写锁策略结束语

5. 闭包之争

Java 语⾔是否应增加闭包以及如何添加? 闭包:基本概念

匿名类和函数指针 闭包作为⼀种模式模板

泛化算法的闭包闭包⽅案

BGGA ⽅案 CICE ⽅案

结束语

6. JDK 早期版本中使⽤ Java 5 的语⾔特性即使只能⽤ JDK 1.4,也可以使⽤泛型

Java 5 语⾔特性的实现 for-each 循环

枚举和⾃动装箱变⻓参数

注释

其他的库依赖关系访问 Java 5 特性

JSR 14


Retroweaver Retrotranslator

结束语

7. 理解 JTS —— 事务简介

事务是可靠应⽤程序的构建块事务的动机

什么是事务? 事务的剖析

事务⽇志 —— 持久性的关键重新启动时进⾏恢复

两阶段提交

事务作为处理异常的机制结束语

8. JMX 检测应⽤程序

只需添加 bean 就可实现⽴即可视 JMX

传输和安全性检测 Web 服务器

数据类型

检测服务器应⽤程序结束语

9. 处理 InterruptedException

捕捉到它,然后怎么处理它? 阻塞⽅法

线程中断

处 理 InterruptedException 不要⽣吞中断

实现可取消任务

不可中断的阻塞⽅法不可取消的任务

结束语

10. ⾮阻塞算法简介


看吧,没有锁定!

⾮阻塞的计数器

⾮阻塞堆栈性能考虑

⾮阻塞的链表

幕后的⾮阻塞算法结束语

11. 良好的内务处理实践

您的资源是否没有及时释放? 显式地释放资源

只限于⼀个⽅法的资源

并不总像看起来那么容易

⼏乎每⼀样东⻄都可以抛出异常具有任意⽣命周期的资源

资源所有权终结器

结束语

12. typedef 反模式

扩展不是类型定义

合成类似于 typedef 的东⻄伪类型的问题

扩展不是类型定义伪类型会传染

伪类型通常太具体更安全的技巧

结束语

13. ⽤弱引⽤堵住内存泄漏

弱引⽤使得表达对象⽣命周期关系变得容易了全局 Map 造成的内存泄漏

找出内存泄漏 弱引⽤来救援了

⽤ WeakHashMap 堵住泄漏


引⽤队列结束语

14. 再谈 Urban 性能传⾔

分配⽐想像的要快,⽽且会变得更快继续,弄得⼀团糟

分代垃圾收集如何回收? 线程本地分配

堆栈分配escape 分析

Mustang 中的 escape 分析结束语

15. 做个好的(事件)侦听器

事件侦听器编写和⽀持指南线程安全问题

管理侦听器列表 初始化的安全⻛险侦听器线程安全

失效侦听器

其他侦听器问题结束语

16. 动态编译与性能测量

动态编译情况下指标评测的⻛险动态编译简史

即时编译

HotSpot 动态编译持续重新编译

栈上(On-stack)替换

那么,这与评测有什么关系?

Java 代码编写微评测远⽐为 C 代码编写难得多清除死代码

奇怪的结果


表 1. 在客户机和服务器 JVM 中 StupidThreadBenchmark 的性能预热

不要忘记垃圾收集

动态反优化(deoptimization) 奇怪的结果

表 2. StupidMathTest 毫⽆意义且令⼈误解的结果结束语

17. 流⾏的原⼦

新原⼦类是 java.util.concurrent 的隐藏精华问题:线程之间的协调

标准⽅法:锁定

使⽤锁定实现计数器和互斥锁定问题

硬件同步原语

⽐较并交换 (CAS)

使⽤ CAS 实现计数器

⽆锁定且⽆等待算法原⼦变量类

更细粒度意味着更轻量级 java.util.concurrent 中的原⼦变量

使⽤原⼦变量获得更⾼的吞吐量结束语

18. JDK 5.0 中更灵活、更具可伸缩性的锁定机制

新的锁定类提⾼了同步性 —— 但还不能现在就抛弃 synchronized synchronized 快速回顾

对 synchronized 的改进 ReentrantLock 类

⽐较 ReentrantLock 和 synchronized 的可伸缩性条件变量

这 不 公 平 处处都好?

还不要抛弃 synchronized


什么时候选择⽤ ReentrantLock 代替 synchronized 结束语

19. Web 层的状态复制

有多种⽤于群集 Web 应⽤程序的⽅法会话状态

HttpSession API 复制⽅式

基于 JDBC 的复制基于⽂件的复制

基于内存的复制时间考虑

容器⽀持

改进分布式 Web 应⽤程序的性能保持会话最⼩

不要绕过 setAttribute 使⽤细化的会话属性 完成后使之失效

保持会话⼲净结束语

20. 消除 bug

FindBugs 之类的检测⼯具提供了防⽌常⻅编码错误的另⼀层防护需求:更好的代码审核⼯具

设计建议和 bug 模式关于异常的争论

哈希

Finalizer 不是朋友安全构造技术

为内存模型带来好处变化,或不变化

bug 都很重要 21.关于异常的争论

要检查,还是不要检查?


传统的观点

重新考察⾮检查型异常的正统观点对于检查型异常的⼀些批评

检查型异常不适当地暴露实现细节不稳定的⽅法签名

难以理解的代码异常淹没

过多的异常包装替换的⽅法

使⽤⾮检查型异常

⽂档化,⽂档化,⽂档化

22. 什么是内存模型,我为什么需要⼀个内存模型? 原始 JMM 的缺点

JSR 133 的⽬标同步和可⻅性

问题 1:不可变对象不是不可变的

问题 2:重新排序易失性和⾮易失性存储结束语

23. 修复 Java 内存模型

在 JSR 133 中 JMM 会有什么改变? 修复后的可⻅性

对 volatile 的新保证在这之前发⽣了什么?

数据争⽤

这是否修改了双重检查锁定的问题? 初始化安全性

Final 意味着最终结束语

24. 垃圾收集简史

垃圾收集是如何⼯作的? 选项与选择

垃圾收集如何⼯作?


基 本 算 法 引⽤计数

跟踪收集器

标记-清除收集器复制收集器

堆整理

标记-整理收集器选择哪⼀种呢?

25. JVM 1.4.1 中的垃圾收集

分代垃圾收集和并发垃圾收集

⽼对象和年轻对象分代收集

⼩的收集代间引⽤

跟踪代间引⽤卡⽚标记

JDK 1.4.1 默认收集器其他收集选项

增量收集

并⾏收集器和并发收集器选择⼀种算法

微调垃圾收集器结束语

26. 描绘线程安全性

线程安全不是⼀个⾮真即假的命题在忘记之前写下来(要不就离开公司)  定义线程安全性

线程安全性

⽅法之问的状态依赖线程安全程度

不 可 变 线程安全


有条件的线程安全线程兼容

线程对⽴

其他线程安全记录考虑结束语

27. 并发集合类

ConcurrentHashMap 和 CopyOnWriteArrayList 提供线程安全性和已改进的可伸缩性有条件的线程安全性

信任的错觉可伸缩性问题

实例:⼀个简单的 cache 减⼩锁粒度

ConcurrentHashMap 好了多少?

CopyOnWriteArrayList 结束语

28. 构建⼀个更好的 HashMap

ConcurrentHashMap 如何在不损失线程安全的同时提供更⾼的并发性? 针对吞吐量进⾏优化

多个写锁

map 范围的操作 JMM 概述

ConcurrentHashMap 实现不⽤锁定遍历数据结构 使⽤不变性

检索操作删除操作

插⼊和更新操作弱⼀致的迭代器动态调整⼤⼩ 不锁定?

结束语


29. 哈希

有效和正确定义 hashCode()和 equals() 定义对象的相等性

Override equals() 简单实例

为什么 Override equals()和hashCode()? 实施equals()和hashCode()的需求

对象相等性意味着什么?

编写⾃⼰的 equals()和 hashCode()⽅法有待改进?

结束语

30. 变还是不变?

不变对象能极⼤地简化您的⽣活不变性的⻓处

⾃由⾼速缓存 固有的线程安全

在恶意运⾏的代码⾯前是安全的良好的键

何时使⽤不变类 编写不变类的准则偶尔更改的数据 结束语

31. 并发在⼀定程度上使⼀切变得简单util.concurrent 包简介

探究重复发明“⻋轮”之原因表⾯上看起来简单

并发构件的价值所在填补空⽩

调度异步任务 Executor FutureResult

FutureResult 和⾼速缓存结束语


32. 您的⼩数点到哪⾥去了?

使⽤浮点数和⼩数中的技巧和陷阱IEEE 浮点

特殊数字

基本浮点类型和包装类浮点有不同的⽐较⾏为浮点中的危险

舍⼊误差

浮点数⽐较指南

不要⽤浮点值表示精确值

⽤于较⼩数的 BigDecimal

所有的 equals ⽅法都不能真正测试相等使⽤ BigDecimal 作为互换类型

构造 BigDecimal 数结束语

33. 嗨,我的线程到哪⾥去了?

了解如何避免服务器应⽤程序中的线程泄漏示例服务器应⽤程序

线程失败时并不总是显⽽易⻅的 RuntimeException 是导致线程死亡的⾸要原因

使⽤由 ThreadGroup 提供的未捕获的异常处理程序结束语

34. 线程池与⼯作队列

线程池有助于实现最佳资源利⽤率为什么要⽤线程池?

线程池的替代⽅案

⼯作队列

使⽤线程池的⻛险死锁

资源不⾜并发错误线程泄漏请求过载


有效使⽤线程池的准则调整池的⼤⼩

⽆须编写您⾃⼰的池结束语

35. 应该在下⼀个企业应⽤程序中使⽤ JMS 吗?

学习消息排队是如何能够改进企业应⽤程序的灵活性和可伸缩性的

⼤众化的消息排队 MQ 服务器做什么? MQ 的⻓处

经典的 MQ ⽤法模式

⾯向事件的应⽤程序轮询数据库

⼯作流

使⽤ MQ 以从关键路径去除⻛险⼤的操作结束语

36. 平衡测试(第1部分) 典型的单元测试场景

QA 经济添加静态分析

将它提升⼀个级别

示例 bug 检测器

将检测器包装为插件结束语

37. 平衡测试(第2部分)

不要仅编写测试,还要编写 bug 检测器组合测试⽅法

简单的测试⽅⾯

检查对 Swing 单线程规则的违犯在调试对象中切换

结束语


温馨提示:若在升级会员或付费后阅读过程中遇到问题,请加客服微信号(cool-smiler)沟通解决,祝您生活愉快。
转载请注明原文链接:Java盗墓笔记:JDK开发团队大师遗失手稿
喜欢 (0)
[1186664388@qq.com]
分享 (0)
关于作者:
创享视界(creativeview.cn)是一个带动全民颠覆八小时工作制,通过投稿把自己的创意智慧变现的方式创造被动收入,从而实现财务自由的平台。我们相信,创新思维不仅有助于打造更出色的产品,还可以让世界变得更美好,让人人受益。
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
%d 博主赞过: