跳转至

Java 基础知识与 JVM 原理

学习目标:从"会用"升级到"理解原理 → 能解决问题 → 能做技术决策"

检验标准:学完每个模块后,能口述"这个技术解决了什么问题?不用它会怎样?工作中有哪些坑?"


整体知识地图

mindmap
    root((Java 基础))
        面向对象
            封装 / 继承 / 多态 / 抽象
            接口 vs 抽象类
            设计原则入门
        集合框架
            List: ArrayList / LinkedList
            Map: HashMap / TreeMap / LinkedHashMap
            Set: HashSet / TreeSet
            并发集合: ConcurrentHashMap
        并发编程
            线程生命周期
            synchronized / volatile
            ThreadLocal
            线程池 ThreadPoolExecutor
            AQS / ReentrantLock
        JVM
            内存分区
            GC 算法
            G1 vs CMS
            OOM 排查
        类加载机制
            双亲委派模型
            破坏委派:SPI / Tomcat / OSGi
        底层原理专题
            字符串与 StringPool
            泛型与类型擦除
            反射与 MethodHandle
            NIO 与 IO 模型
        异常处理
            Checked vs Unchecked
            最佳实践
        Java 8 新特性
            Lambda 表达式
            Stream 流式编程
            Optional 空值处理
            新日期 API
            接口默认方法
        泛型与注解
            泛型擦除与边界
            元注解与自定义注解
        数据结构
            红黑树 / B+树 / 跳表
            布隆过滤器

知识点导航

# 知识点 核心一句话 详细文档
01 面向对象 封装隐藏实现、继承复用代码、多态解耦调用方、抽象定义规范 面向对象
02 集合框架 ArrayList 随机访问快、LinkedList 增删快、HashMap 数组+链表+红黑树、ConcurrentHashMap 线程安全 集合框架
03 并发编程 synchronized 保证原子性+可见性、volatile 保证可见性+有序性、线程池避免频繁创建销毁线程 并发编程
04 JVM 内存结构与 GC 堆存对象、栈存帧、元空间存类信息;GC 分代收集,G1 是 JDK9+ 默认收集器 JVM内存结构与GC
05 异常处理 Checked 编译器强制处理、Unchecked 编程错误应修复代码;禁止空 catch 块 异常处理
06 AQS 与 CAS AQS 是并发包核心框架,CAS 是无锁编程基础;ReentrantLock 比 synchronized 更灵活 AQS与CAS
07 [Java8] 函数式编程 Lambda 表达式 + Stream 流式编程 + Optional 空值处理,函数式编程三大核心 Java8函数式编程
08 [Java8] 其他新特性 新日期 API(java.time)+ 接口默认方法与静态方法 Java8其他新特性
09 [Java9-17] 新特性 var 局部变量推断、Record、Sealed Classes、Pattern Matching 等 Java9-17新特性
10 注解 元注解定义注解行为,自定义注解 + 反射/APT 实现框架功能 注解Annotation
11 数据结构精讲 红黑树自平衡 O(log n)、B+树磁盘友好、跳表概率平衡、布隆过滤器判存在 数据结构精讲
12 类加载机制与双亲委派模型 Boot → Ext/Platform → App 三级委派;SPI / Tomcat / OSGi 破坏委派的典型场景 类加载机制与双亲委派模型
13 字符串底层原理与 StringPool 字符串不可变的本质、intern() 与运行时常量池、JDK 9+ 紧凑字符串 字符串底层原理与StringPool
14 泛型底层原理与类型擦除 编译期检查 + 运行期擦除;桥接方法与通配符的底层机制 泛型底层原理与类型擦除
15 反射性能与 MethodHandle Method.invoke 的开销来源、MethodHandleinvokedynamic 的优势 反射与MethodHandle
16 NIO 与 IO 模型深度解析 BIO/NIO/AIO 对比、Reactor 模型、epoll 与 Netty 的关系 NIO与IO模型深度解析

高频问题索引

问题 详见
面向对象四大特性分别解决什么问题? 面向对象
HashMap 扩容流程?JDK7 头插法为什么会死循环? 集合框架
synchronized 和 volatile 的区别? 并发编程
线程池核心参数怎么设置?为什么不用 Executors? 并发编程
ThreadLocal 为什么会内存泄漏? 并发编程
JVM 内存分区有哪些?各自存什么? JVM内存结构与GC
G1 和 CMS 的区别? JVM内存结构与GC
OOM 问题如何排查? JVM内存结构与GC
双重检查锁的单例为什么需要 volatile? AQS与CAS
AQS 等待队列原理?ReentrantLock vs synchronized? AQS与CAS
CAS 的 ABA 问题如何解决? AQS与CAS
Tomcat / SPI / 线程上下文类加载器为什么要破坏双亲委派? 类加载机制与双亲委派模型
String s = new String("a") 创建了几个对象?intern() 在 JDK 6/7+ 有什么区别? 字符串底层原理与StringPool
泛型擦除下的桥接方法是干什么的?泛型数组为什么不能 new T[] 泛型底层原理与类型擦除
反射为什么慢?MethodHandle / LambdaMetafactory 快在哪里? 反射与MethodHandle
select / poll / epoll 的区别?Netty 的 Reactor 模型怎么回事? NIO与IO模型深度解析

学习路径建议

flowchart TD
    A[面向对象基础] --> B[集合框架原理]
    B --> C["并发编程基础<br>synchronized / volatile"]
    C --> D[线程池深入]
    D --> E[AQS / ReentrantLock]
    E --> F[JVM 内存模型]
    F --> G[GC 算法与调优]
    G --> H[类加载机制 & StringPool]
    H --> I[泛型/注解/反射]
    I --> J[NIO 与 IO 模型]
    J --> K[Java 8 / 9-17 新特性]

推荐实践

  1. 手写一个线程安全的单例(双重检查锁 + volatile)
  2. jvisualvm 模拟一次内存泄漏并排查
  3. 配置一个自定义线程池,测试各种拒绝策略的行为