JDK 源码分析(1)- FutureTask

本篇是 JDK 源码分析的第一篇,主要关注 FutureTask 的实现。我们所分析的源码使用的是 Java10,因此也假设了读者了解 VarHandle(Java9 新增的 API),不了解的读者可以看我翻译的JEP 193

阅读全文

翻译 - JEP 193:Variable Handles

定义一个用来操作对象的字段、数组元素的跟 `"java.util.concurrent.atomic"` 和 `"sun.misc.Unsafe"` 等价的标准工具,它提供了一个标准的栅栏操作(fence operation)集用于精细地控制内存排序和一个标准的可达性栅栏操作(reachability-fence operation)来保证一个被引用的对象是强可达的(strongly reachable)。

阅读全文

个人记录帖 - 编译 OpenJDK 10

本篇文章纯粹是记录个人编译 openjdk10 的过程,不会很详细地说明各个步奏。这里就算是给自己立 flag 吧。

阅读全文

Android arch components 源码分析(3)—— LiveData

本篇我们来看看 Android 架构组件中的 LiveData 。跟 ViewModel 相比,LiveData 具有生命周期感知能力,也就是说,他把 ViewModel 和 lifecycle 结合了起来。当应用的数据有更新时,一般我们仅希望应用对用户可见时才更新 UI;更进一步,如果应用不可见,我们甚至可以停止数据的更新。这就是所谓的“感知应用的生命周期”。

阅读全文

Android arch components 源码分析(2)—— Lifecycle

Lifecycle 的实现跟 ViewModel 类似,都是利用 Fragment 来实现它的功能。通过添加一个 fragmentactivity 中,这个 fragment 便能够接收到各个生命周期回调。

阅读全文

Android arch components 源码分析(1)—— ViewModel

本篇主要关注 ViewModel 的实现而非其用法,关于他的用法,可以参考这里

阅读全文

TCP/IP、Socket 和协议设计

本篇我们先简单了解一下 TCP/IP,然后通过实现一个 echo 服务器来学习 Java 的 Socket API。最后我们聊聊偏高级一点点的 socket 长连接和协议设计。

阅读全文

Glide 源码分析(2) - 内存缓存和数组缓存

在上篇我们了解了 Glide 的硬盘缓存,现在,我们继续看他的内存缓存和数组缓存。

阅读全文

Glide 源码分析(1) - DiskCache 详解

作为一个合格的图片加载框架,一般都会有内存缓存和硬盘缓存。在本篇,我们就先来看看 Glide 的硬盘缓存实现。

阅读全文

Android log 机制 - 读取 logd 中的 log 数据

当客户端想要读取 log 数据的时候,可以使用 socket 连接至 /dev/socket/logdr。对应的连接由 LogReader 处理。这里的 reader 是从用户的角度来看的。如果站在 logd 的位置,实际上是把 log 数据写入 socket。为了避免混淆,后文统称“写回数据”。

阅读全文