INDEX · JAVA
JAVA 源码分析索引
阅读方法:每篇都是一个完整代码块:真实 JDK 源码 + 只点关键设计和坑的注释。聚焦一个类,按下面顺序读,从数据结构到并发再到 JVM。
集合
| 类 | 一句话 |
|---|
| Collection 接口 | 集合框架顶层契约:查询/修改/批量三组方法,可选操作 + equals 驱动 + default 演进 |
| ArrayList | 可变数组,1.5 倍扩容,尾增删摊还 O(1),fail-fast 迭代器 |
| LinkedList | 双向链表,兼作 Deque,随机访问 O(n) |
| CopyOnWriteArrayList | 写时复制,读无锁写加锁,适合读多写少 |
| HashMap | 数组+链表/红黑树,扰动函数,负载因子 0.75,树化阈值 8(含 JDK7 对照:头插法、并发扩容成环) |
| LinkedHashMap | HashMap + 双向链表维护顺序,accessOrder 实现 LRU |
| TreeMap | 红黑树,按键有序,增删的左旋右旋与变色 |
| ConcurrentHashMap | CAS + synchronized 分段锁,size 用 CounterCell 分散 |
| HashSet | HashMap 的薄壳,全部委托 + PRESENT 哨兵;LinkedHashSet/TreeSet 同理 |
| ArrayDeque | 环形数组双端队列,永远留一个空槽消歧空/满,栈与队列双料替代品 |
| PriorityQueue | 数组小根堆,siftUp/siftDown 挪坑不交换,heapify 建堆 O(n) |
基础与类型
| 类 | 一句话 |
|---|
| String | 不可变,JDK9 后 byte[] + coder 压缩存储,常量池 |
| StringBuilder | 可变字符序列,非线程安全,扩容翻倍+2;StringBuffer 加 synchronized |
| Integer | 装箱缓存池 -128~127,valueOf 复用 |
| Object | equals/hashCode 契约,wait/notify 与 monitor |
JUC 并发
锁
同步器(AQS 共享模式)
原子与线程本地
线程池与队列
JVM 与运行时
| 类 | 一句话 |
|---|
| Thread | 线程映射,6 态机,start vs run,interrupt 协作式中断 |
| ClassLoader | 双亲委派,类唯一性 = 类名 + 加载器,打破委派的三场景 |
| Class | 类的类,反射入口,类加载生命周期,getMethods vs getDeclaredMethods |