JVM学习第二天|JVM基础(内存区域+垃圾回收入门·必背)

JVM学习第二天|JVM基础(内存区域+垃圾回收入门·必背)

哈喽,各位正在深耕Java后端的小伙伴~今天是JVM系列学习第二天,承接第一天的JVM基础概念,我们聚焦JVM基础核心:JVM运行时数据区基础 + 垃圾回收入门,全程用通俗语言拆解基础原理,配套基础面试题及满分答案,零基础也能快速上手,扎实夯实JVM基础功底!

一、本期核心目标

  1. 掌握JVM运行时数据区5大区域的基础划分、核心作用及简单异常

  2. 理解垃圾回收基础:什么是垃圾、垃圾判定的简单方法

  3. 搞定JVM基础面试题,覆盖初面基础考点

  4. 兼顾原理理解与面试记忆,告别死记硬背,轻松入门


二、核心基础:JVM运行时数据区(入门必掌握)

1. 一句话总览

JVM运行时数据区分为5大区域程序计数器、虚拟机栈、本地方法栈、堆、方法区;其中堆和方法区是线程共享栈、程序计数器是线程私有

2. 五大区域基础详解(入门必背)

(1)程序计数器(Program Counter Register)

  • 作用:记录当前线程执行的字节码行号,线程切换后能恢复到正确位置

  • 特点:线程私有、无OOM、生命周期随线程创建/销毁

  • 基础问答:为什么线程私有?
    答:多线程轮流执行时,私有能保证每个线程的执行位置不混乱,基础理解即可。

(2)Java虚拟机栈(VM Stack)

  • 作用:存放栈帧,每个方法执行对应一个栈帧入栈,方法结束出栈

  • 栈帧核心:主要存放局部变量、方法执行相关的基础数据(无需深入细节)

  • 常见异常:StackOverflowError(栈深度溢出)、OutOfMemoryError

  • 特点:线程私有、生命周期同线程

(3)本地方法栈(Native Method Stack)

  • 作用:为native方法(底层非Java编写的方法)提供基础运行内存

  • 特点:线程私有,HotSpot虚拟机中,它与虚拟机栈合二为一,基础了解即可。

(4)堆(Heap)—— 最重要区域

  • 作用:存放几乎所有对象实例与数组

  • 特点:线程共享、GC主要区域、内存最大

  • 基础划分:简单了解堆分为新生代、老年代即可,无需深入细分。

  • 常见异常:java.lang.OutOfMemoryError: Java heap space

(5)方法区(Method Area)

  • 作用:存储类信息、常量、静态变量、即时编译代码

  • 特点:线程共享、逻辑上属于堆

  • JDK8+基础认知:用元空间替代永久代,元空间使用本地内存,可避免内存溢出,简单了解即可。

  • 常见异常:OOM: Metaspace

3. 快速记忆表

区域 线程共享 存储内容 常见异常
程序计数器 私有 执行行号
虚拟机栈 私有 栈帧(局部变量等) SOE、OOM
本地方法栈 私有 Native方法栈帧 SOE、OOM
共享 对象实例、数组 OOM
方法区 共享 类元数据、常量、静态变量 OOM

三、核心基础:垃圾回收GC入门(零基础能懂)

1. 什么是垃圾?

堆中没有任何引用指向的对象,就是垃圾,需要被回收释放内存。

2. 垃圾判定的两种基础方法(入门了解)

(1)引用计数法

  • 原理:对象被引用+1,引用失效-1,为0即垃圾

  • 优点:简单、高效

  • 缺点:无法解决循环引用(简单理解:两个对象互相引用,无法判定为垃圾即可)

(2)可达性分析算法(JVM主流使用)

  • 原理:以GC Roots为起点,找不到引用的对象就是垃圾(基础理解,无需深入)

  • GC Roots固定4类:

    1. 虚拟机栈中引用的对象

    2. 方法区静态属性引用的对象

    3. 方法区常量引用的对象

    4. 本地方法栈引用的对象

    (基础记忆即可,无需深入理解每一种的具体含义,能准确说出4类内容即可)

3. 四种引用(基础认知)

  1. 强引用:普通new对象,GC不回收,内存不足报错(最常用)

  2. 软引用:内存不足时回收(简单了解,无需深入使用场景)

  3. 弱引用:下次GC会回收(基础认知即可)

  4. 虚引用:了解即可,基本不考基础知识点


四、JVM基础面试题(附基础版答案)

1. 基础必问(入门必背)

  1. JVM运行时数据区分为哪几个部分?
    答:程序计数器、虚拟机栈、本地方法栈、堆、方法区。

  2. 哪些区域线程共享,哪些私有?
    答:共享:堆、方法区;私有:程序计数器、虚拟机栈、本地方法栈。

  3. 堆的作用是什么?为什么会OOM?
    答:堆存放对象实例;对象过多、回收不及时,就会堆内存溢出。

  4. JDK8为什么用元空间替代永久代?
    答:永久代内存受限、容易OOM;元空间使用本地内存,扩容更灵活。

2. 原理必问

  1. 判断垃圾用什么算法?为什么不用引用计数?
    答:基础常用可达性分析算法;引用计数无法解决循环引用问题,判定不准确。

  2. GC Roots包括哪些?(基础记忆)
    答:虚拟机栈、本地方法栈、方法区静态属性、方法区常量引用的对象。

  3. StackOverflowError和OOM的基础区别?
    答:两者都是内存相关异常,SOE是虚拟机栈深度不够导致,OOM是整体内存不足导致。

  4. 强引用、软引用、弱引用的基础区别?
    答:强引用GC不回收,软引用内存不足时回收,弱引用下次GC必回收。

3. 基础易错题(入门避坑)

  1. 常量池在哪个区域?(基础记忆)
    答:JDK7+在堆中,JDK8+在元空间。

  2. 数组存在哪里?
    答:数组对象本身在,数组引用在


五、第二天学习总结

  1. 掌握JVM内存5大区域的基础划分、核心作用,能应对基础面试提问

  2. 吃透垃圾回收基础:记住可达性分析核心,了解两种判定方法和四种引用的基础区别

  3. 吃透基础面试题,夯实JVM入门功底,为后续学习打基础


六、下期预告

JVM学习第三天:JVM基础进阶(垃圾回收基础算法+内存分配入门),延续基础难度,不涉及复杂内容,配套基础面试题,稳步夯实JVM入门功底!

本文同步至个人学习笔记,如有错误,欢迎评论区指正交流~

(注:文档部分内容可能由 AI 生成)

posted @ 2026-04-22 09:57  白鹿为溪  阅读(14)  评论(0)    收藏  举报