摘要: 介绍 队列同步器 AbstractQueuedSynchronizer,简称为 AQS,是用来构建锁及其他同步组件(比如 ReentrantLock、CountDownLatch)的基础框架。它使用了一个 int 成员变量表示同步状态,通过内置的 FIFO 队列来完成获取资源线程的排队工作。AQS 阅读全文
posted @ 2022-06-08 18:22 Tailife 阅读(74) 评论(0) 推荐(0) 编辑
摘要: volatile 的特性 关键字 volatile 可以说是 Java 虚拟机提供的最轻量级的同步机制。 当一个变量被定义为 volatile 之后,它将具备两种特性,可见性和禁止指令重排。 可见性 这里的“可见性”是指当一个线程修改了 volatile 变量,其他线程是可以立即得知的。而普通变量不 阅读全文
posted @ 2022-06-08 18:16 Tailife 阅读(57) 评论(0) 推荐(0) 编辑
摘要: final 域的重排序规则 对于 final 域,编译器和处理器要遵守两个重排序规则: 在构造函数内对一个final 域的写入,与随后把这个构造对象的引用赋值给一个引用变量,这两个操作之间不能重排序。 初次读一个包含 final 域的对象的引用,与随后初次读这个 final 域,这两个操作之间不能重 阅读全文
posted @ 2022-06-08 18:15 Tailife 阅读(87) 评论(0) 推荐(0) 编辑
摘要: 1. 并发模型的两个关键问题 在并发编程中,需要处理两个关键问题:线程之间如何通信及线程之间如何同步(这里的线程是指并发执行的活动实体)。通信是指线程之间以何种机制来交换信息。在命令式编程中,线程之间的通信机制有两种:共享内存和消息传递。 Java 的并发采用的是共享内存模型,Java 线程之间的通 阅读全文
posted @ 2022-06-08 17:07 Tailife 阅读(172) 评论(0) 推荐(0) 编辑
摘要: 收集算法是内存回收的理论基础,垃圾收集器是内存回收的具体实现。在 HotSpot 虚拟机实现中,目前有 7 种垃圾收集器实现,分别是 Serial、ParNew、Parallel Scavenge、CMS、Serial Old 和 G1。前三种是新生代垃圾收集器,后面四种是老年代垃圾收集器。它们可以 阅读全文
posted @ 2022-06-06 10:53 Tailife 阅读(138) 评论(1) 推荐(0) 编辑
摘要: 注:本文是垃圾收集器读书笔记,内容基本来自《深入理解Java虚拟机(第2版)》 上一篇介绍了 GC 时哪些对象需要回收,本篇主要将主要介绍怎么回收,也就是垃圾收集算法。 垃圾收集算法 标记-清除算法 最基础的收集算法,分为“标记”和“清除”两个阶段:首先标记(也就是两次标记的过程)出所有需要回收的对 阅读全文
posted @ 2022-06-06 10:45 Tailife 阅读(42) 评论(0) 推荐(0) 编辑
摘要: 注:本文是垃圾收集器读书笔记,内容基本来自《深入理解Java虚拟机(第2版)》 要了解垃圾收集器(Garbage Collector,GC),需要从以下 3 个问题着手: 哪些内存需要回收? 什么时候回收? 如何回收? 本文解决的是第一个问题:垃圾收集器在对堆进行回收前,如何确定哪些对象还“存活”着 阅读全文
posted @ 2022-06-06 10:42 Tailife 阅读(27) 评论(0) 推荐(0) 编辑
摘要: 如果你对 Class 文件还熟悉的话,你应该知道 Class 文是一组以 8 位字节为单位的二进制流,各个数据项目严格按照顺序紧凑地排列在 Class 文件之中。也就是说,我们可以像读普通二进制文件一样读取 Class 文件,只不过需要遵循一定的规范(Java 虚拟机规范)。于是便有了用 Java 阅读全文
posted @ 2022-06-05 23:52 Tailife 阅读(107) 评论(0) 推荐(0) 编辑
摘要: 前言 Class 文件是一组以 8 位字节为单位的二进制流,各个数据项目严格按照顺序紧凑地排列在 Class 文件之中。Class 文件中存储数据有两种数据类型:无符号数和表 无符号数:Class 文件中基本的数据结构,以 u1、u2、u4、u8 来分别代表 1 个字节、2 个字节、4 个字节和 8 阅读全文
posted @ 2022-06-05 23:51 Tailife 阅读(166) 评论(0) 推荐(0) 编辑
摘要: 注:本文是类加载器总结,内容基本来自《深入理解Java虚拟机(第2版)》 上篇说过,类加载的过程分为 5 个阶段:加载、验证、准备、解析和初始化。 加载 “加载”是“类加载”过程的第一个阶段,在加载阶段,虚拟机主要做 3 件事情: 通过一个类的全限定名来获取定义此类的二进制字节流。 将这个字节流所代 阅读全文
posted @ 2022-06-05 23:48 Tailife 阅读(313) 评论(0) 推荐(0) 编辑