* [一、运行时数据区域](#一运行时数据区域) * [程序计数器](#程序计数器) * [Java 虚拟机栈](#java-虚拟机栈) * [本地方法栈](#本地方法栈) * [Java 堆](#java-堆) * [方法区](#方法区) * [运行时常量池](#运行时常量池) * [直接内存](#直接内存) * [二、垃圾收集](#二垃圾收集) * [判断一个对象是否可回收](#判断一个对象是否可回收) * [1. 引用计数](#1-引用计数) * [2. 可达性](#2-可达性) * [3. 引用类型](#3-引用类型) * [4. 方法区的回收](#4-方法区的回收) * [5. finalize()](#5-finalize) * [垃圾收集算法](#垃圾收集算法) * [1. 标记-清除](#1-标记-清除) * [2. 复制](#2-复制) * [3. 标记-整理](#3-标记-整理) * [4. 分代收集](#4-分代收集) * [垃圾收集器](#垃圾收集器) * [1. Serial 收集器](#1-serial-收集器) * [2. ParNew 收集器](#2-parnew-收集器) * [3. Parallel Scavenge 收集器](#3-parallel-scavenge-收集器) * [4. Serial Old 收集器](#4-serial-old-收集器) * [5. Parallel Old 收集器](#5-parallel-old-收集器) * [6. CMS 收集器](#6-cms-收集器) * [7. G1 收集器](#7-g1-收集器) * [8. 七种垃圾收集器的比较](#8-七种垃圾收集器的比较) * [内存分配与回收策略](#内存分配与回收策略) * [1. 优先在 Eden 分配](#1-优先在-eden-分配) * [2. 大对象直接进入老年代](#2-大对象直接进入老年代) * [3. 长期存活的对象进入老年代](#3-长期存活的对象进入老年代) * [4. 动态对象年龄判定](#4-动态对象年龄判定) * [5. 空间分配担保](#5-空间分配担保) * [Full GC 的触发条件](#full-gc-的触发条件) * [1. 调用 System.gc()](#1-调用-systemgc) * [2. 老年代空间不足](#2-老年代空间不足) * [3. 空间分配担保失败](#3-空间分配担保失败) * [4. JDK 1.7 及以前的永久代空间不足](#4-jdk-17-及以前的永久代空间不足) * [5. Concurrent Mode Failure](#5-concurrent-mode-failure) * [三、类加载机制](#三类加载机制) * [类的生命周期](#类的生命周期) * [类初始化时机](#类初始化时机) * [类加载过程](#类加载过程) * [1. 加载](#1-加载) * [2. 验证](#2-验证) * [3. 准备](#3-准备) * [4. 解析](#4-解析) * [5. 初始化](#5-初始化) * [类加载器](#类加载器) * [1. 类与类加载器](#1-类与类加载器) * [2. 类加载器分类](#2-类加载器分类) * [3. 双亲委派模型](#3-双亲委派模型) * [四、JVM 参数](#四jvm-参数) * [GC 优化配置](#gc-优化配置) * [GC 类型设置](#gc-类型设置) * [参考资料](#参考资料) # 一、运行时数据区域