* [内存模型](#内存模型) * [1. 程序计数器](#1-程序计数器) * [2. Java 虚拟机栈](#2-java-虚拟机栈) * [3. 本地方法栈](#3-本地方法栈) * [4. Java 堆](#4-java-堆) * [5. 方法区](#5-方法区) * [6. 运行时常量池](#6-运行时常量池) * [7. 直接内存](#7-直接内存) * [垃圾收集](#垃圾收集) * [1. 判断一个对象是否可回收](#1-判断一个对象是否可回收) * [1.1 引用计数](#11-引用计数) * [1.2 可达性](#12-可达性) * [1.3 引用类型](#13-引用类型) * [1.3.1 强引用](#131-强引用) * [1.3.2 软引用](#132-软引用) * [1.3.3 弱引用](#133-弱引用) * [1.3.4 虚引用](#134-虚引用) * [1.3 方法区的回收](#13-方法区的回收) * [1.4 finalize()](#14-finalize) * [2. 垃圾收集算法](#2-垃圾收集算法) * [2.1 标记-清除算法](#21-标记-清除算法) * [2.2 复制算法](#22-复制算法) * [2.3 标记-整理算法](#23-标记-整理算法) * [2.4 分代收集算法](#24-分代收集算法) * [3. 垃圾收集器](#3-垃圾收集器) * [3.1 Serial 收集器](#31-serial-收集器) * [3.2 ParNew 收集器](#32-parnew-收集器) * [3.3 Parallel Scavenge 收集器](#33-parallel-scavenge-收集器) * [3.4 Serial Old 收集器](#34-serial-old-收集器) * [3.5 Parallel Old 收集器](#35-parallel-old-收集器) * [3.6 CMS 收集器](#36-cms-收集器) * [3.7 G1 收集器](#37-g1-收集器) * [3.8 七种垃圾收集器的比较](#38-七种垃圾收集器的比较) * [4. 内存分配与回收策略](#4-内存分配与回收策略) * [4.1 优先在 Eden 分配](#41-优先在-eden-分配) * [4.2 大对象直接进入老年代](#42-大对象直接进入老年代) * [4.3 长期存活的对象进入老年代](#43-长期存活的对象进入老年代) * [4.4 动态对象年龄判定](#44-动态对象年龄判定) * [4.5 空间分配担保](#45-空间分配担保) * [4.6 Full GC 的触发条件](#46-full-gc-的触发条件) * [4.6.1 调用 System.gc()](#461-调用-systemgc) * [4.6.2 老年代空间不足](#462-老年代空间不足) * [4.6.3 空间分配担保失败](#463-空间分配担保失败) * [4.6.4 JDK 1.7 及以前的永久代空间不足](#464-jdk-17-及以前的永久代空间不足) * [4.6.5 Concurrent Mode Failure](#465-concurrent-mode-failure) * [类加载机制](#类加载机制) * [1 类的生命周期](#1-类的生命周期) * [2. 类初始化时机](#2-类初始化时机) * [3. 类加载过程](#3-类加载过程) * [3.1 加载](#31-加载) * [3.2 验证](#32-验证) * [3.3 准备](#33-准备) * [3.4 解析](#34-解析) * [3.5 初始化](#35-初始化) * [4. 类加载器](#4-类加载器) * [4.1 类与类加载器](#41-类与类加载器) * [4.2 类加载器分类](#42-类加载器分类) * [4.3 双亲委派模型](#43-双亲委派模型) * [JVM 参数](#jvm-参数) * [GC 优化配置](#gc-优化配置) * [GC 类型设置](#gc-类型设置) # 内存模型