技术笔记
工程实践、系统设计、编程语言和技术原理的长期笔记。
-
图解 Paxos 一致性协议
技术笔记前言 Paxos 一致性协议可以说是一致性协议研究的起点,也以难以理解闻名。其实协议本身并没有多难理解,它的难理解性主要体现在:为何如此设计协议以及如何证明其正确性。本文尝试通过流程图来说明协议的内容以及基本应用过程,不涉及如何证明其正确性。 基本概念 Paxos 可以分为两种: Single De...
-
Zookeeper ZAB 协议分析
技术笔记前言 ZAB 协议是为分布式协调服务 ZooKeeper 专门设计的一种支持崩溃恢复的原子广播协议。在 ZooKeeper 中,主要依赖 ZAB 协议来实现分布式数据一致性,基于该协议,ZooKeeper 实现了一种主备模式的系统架构来保持集群中各个副本之间的数据一致性。 Atomic broadc...
-
ZooKeeper Watcher 和 AsyncCallback 的区别与实现
技术笔记前言 初学 Zookeeper 会发现客户端有两种回调方式: Watcher 和 AsyncCallback,而 Zookeeper 的使用是离不开这两种方式的,搞清楚它们之间的区别与实现显得尤为重要。本文将围绕下面几个方面展开 Watcher 和 AsyncCallback 的区别 Watcher...
-
ThreadLocal 内存泄露的实例分析
技术笔记前言 之前写了一篇[深入分析 ThreadLocal 内存泄漏问题][1]是从理论上分析ThreadLocal的内存泄漏问题,这一篇文章我们来分析一下实际的内存泄漏案例。分析问题的过程比结果更重要,理论结合实际才能彻底分析出内存泄漏的原因。 案例与分析 问题背景 在 Tomcat 中,下面的代码都在...
-
深入分析 ThreadLocal 内存泄漏问题
技术笔记前言 ThreadLocal 的作用是提供线程内的局部变量,这种变量在线程的生命周期内起作用,减少同一个线程内多个函数或者组件之间一些公共变量的传递的复杂度。但是如果滥用 ThreadLocal,就可能会导致内存泄漏。下面,我们将围绕三个方面来分析 ThreadLocal 内存泄漏的问题 Threa...
-
【Getty】Java NIO框架设计与实现
技术笔记前言 [Getty][1]是我为了学习 Java NIO 所写的一个 NIO 框架,实现过程中参考了 Netty 的设计,同时使用 Groovy 来实现。虽然只是玩具,但是麻雀虽小,五脏俱全,在实现过程中,不仅熟悉了 NIO 的使用,还借鉴了很多 Netty 的设计思想,提升了自己的编码和设计能力。...
-
Java 线程池框架核心代码分析
技术笔记前言 多线程编程中,为每个任务分配一个线程是不现实的,线程创建的开销和资源消耗都是很高的。线程池应运而生,成为我们管理线程的利器。Java 通过Executor接口,提供了一种标准的方法将任务的提交过程和执行过程解耦开来,并用Runnable表示任务。 下面,我们来分析一下 Java 线程池框架的实...
-
RedisHttpSession 的设计与实现
技术笔记前言 [RedisHttpSession][1] 是我的一个 Java 开源项目,通过将 Session 存储在 Redis 中实现多服务器间共享 Session,同时这一过程是完全透明的。主要用于支持 RESTfuls API。下面我将对其核心类进行分析,阐述它的设计以及实现细节。 RedisHt...
-
三言两语:JVM 字节码执行实例分析
技术笔记前言 最近在看《Java 虚拟机规范》和《深入理解JVM虚拟机》,对于字节码的执行有了进一步的了解。字节码就像是汇编语言,是 JVM 的指令集。下面我们先对 JVM 执行引擎做一下简单介绍,然后根据实例分析 JVM 字节码的执行过程。包括: 1. for 循环字节码分析 2. try catch f...
-
【译】JVM 进行线程同步背后的原理
技术笔记本文翻译自[How the Java virtual machine performs thread synchronization][1],内容略有删改 前言 所有的 Java 程序都会被翻译为包含字节码的 class 文件,字节码是 JVM 的机器语言。这篇文章将阐述 JVM 是如何处理线程同步...