JVM学习第二天|JVM基础(内存区域+垃圾回收入门·必背)
JVM学习第二天|JVM基础(内存区域+垃圾回收入门·必背)
哈喽,各位正在深耕Java后端的小伙伴~今天是JVM系列学习第二天,承接第一天的JVM基础概念,我们聚焦JVM基础核心:JVM运行时数据区基础 + 垃圾回收入门,全程用通俗语言拆解基础原理,配套基础面试题及满分答案,零基础也能快速上手,扎实夯实JVM基础功底!
一、本期核心目标
-
掌握JVM运行时数据区5大区域的基础划分、核心作用及简单异常
-
理解垃圾回收基础:什么是垃圾、垃圾判定的简单方法
-
搞定JVM基础面试题,覆盖初面基础考点
-
兼顾原理理解与面试记忆,告别死记硬背,轻松入门
二、核心基础: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类:
-
虚拟机栈中引用的对象
-
方法区静态属性引用的对象
-
方法区常量引用的对象
-
本地方法栈引用的对象
(基础记忆即可,无需深入理解每一种的具体含义,能准确说出4类内容即可)
-
3. 四种引用(基础认知)
-
强引用:普通new对象,GC不回收,内存不足报错(最常用)
-
软引用:内存不足时回收(简单了解,无需深入使用场景)
-
弱引用:下次GC会回收(基础认知即可)
-
虚引用:了解即可,基本不考基础知识点
四、JVM基础面试题(附基础版答案)
1. 基础必问(入门必背)
-
JVM运行时数据区分为哪几个部分?
答:程序计数器、虚拟机栈、本地方法栈、堆、方法区。 -
哪些区域线程共享,哪些私有?
答:共享:堆、方法区;私有:程序计数器、虚拟机栈、本地方法栈。 -
堆的作用是什么?为什么会OOM?
答:堆存放对象实例;对象过多、回收不及时,就会堆内存溢出。 -
JDK8为什么用元空间替代永久代?
答:永久代内存受限、容易OOM;元空间使用本地内存,扩容更灵活。
2. 原理必问
-
判断垃圾用什么算法?为什么不用引用计数?
答:基础常用可达性分析算法;引用计数无法解决循环引用问题,判定不准确。 -
GC Roots包括哪些?(基础记忆)
答:虚拟机栈、本地方法栈、方法区静态属性、方法区常量引用的对象。 -
StackOverflowError和OOM的基础区别?
答:两者都是内存相关异常,SOE是虚拟机栈深度不够导致,OOM是整体内存不足导致。 -
强引用、软引用、弱引用的基础区别?
答:强引用GC不回收,软引用内存不足时回收,弱引用下次GC必回收。
3. 基础易错题(入门避坑)
-
常量池在哪个区域?(基础记忆)
答:JDK7+在堆中,JDK8+在元空间。 -
数组存在哪里?
答:数组对象本身在堆,数组引用在栈。
五、第二天学习总结
-
掌握JVM内存5大区域的基础划分、核心作用,能应对基础面试提问
-
吃透垃圾回收基础:记住可达性分析核心,了解两种判定方法和四种引用的基础区别
-
吃透基础面试题,夯实JVM入门功底,为后续学习打基础
六、下期预告
JVM学习第三天:JVM基础进阶(垃圾回收基础算法+内存分配入门),延续基础难度,不涉及复杂内容,配套基础面试题,稳步夯实JVM入门功底!
本文同步至个人学习笔记,如有错误,欢迎评论区指正交流~
(注:文档部分内容可能由 AI 生成)

浙公网安备 33010602011771号