大厂面试系列:JVM中有哪些内存区域,分别都是用来干嘛的?

添加VX:ruyuan0220,回复:CSDN,领取更多精品学习资料!

目录

背景知识

大厂面试背景引入

到底什么是JVM的内存区域划分?

存放类的方法区

执行代码指令用的程序计数器

Java虚拟机栈

Java堆内存

核心内存区域的全流程串讲

其他内存区域

本文小结


背景知识

我们先聊了一下相关的背景知识:JVM类加载这块的机制,简单介绍一下。

大家需要搞明白的是,在什么情况下会触发类的加载?加载之后的验证、准备和解析分别是干什么的?

尤为重要的是准备阶段和初始化阶段,是如何为类分配内存空间的?然后类加载器的规则是什么?

来看图简单介绍一下。

大厂面试系列:JVM中有哪些内存区域,分别都是用来干嘛的?_第1张图片

大厂面试背景引入

很多人想要到阿里、美团、京东等互联网大公司去面试,但是现在互联网大厂面试一般都必定会考核JVM相关的知识积累

所以在了解完了JVM的类加载机制之后,先一起来看看JVM的内存区域划分,这个基本上是互联网公司面试必问。

到底什么是JVM的内存区域划分?

其实这个问题非常简单,JVM在运行我们写好的代码时,他是必须使用多块内存空间的,不同的内存空间用来放不同的数据,然后配合我们写的代码流程,才能让我们的系统运行起来。

举个最简单的例子,比如咱们现在知道了JVM会加载类到内存里来供后续运行,那么我问问大家,这些类加载到内存以后,放到哪儿去了呢?想过这个问题吗?

所以JVM里就必须有一块内存区域,用来存放我们写的那些类。

我们来看下面的图:

大厂面试系列:JVM中有哪些内存区域,分别都是用来干嘛的?_第2张图片

继续来看,我们的代码运行起来时,是不是需要执行我们写的一个一个的方法?

那么运行方法的时候,方法里面有很多变量之类的东西,是不是需要放在某个内存区域里?

接着如果我们写的代码里创建一些对象,这些对象是不是也需要内存空间来存放?

同样的,大家看下图:

大厂面试系列:JVM中有哪些内存区域,分别都是用来干嘛的?_第3张图片

这就是为什么JVM中必须划分出来不同的内存区域,它是为了我们写好的代码在运行过程中根据需要来使用的。

接下来,我们就依次看看JVM中有哪些内存区域。

存放类的方法区

这个方法区是在JDK 1.8以前的版本里,代表JVM中的一块区域。

主要是放从“.class”文件里加载进来的类,还会有一些类似常量池的东西放在这个区域里。

但是在JDK 1.8以后,这块区域的名字改了,叫做“Metaspace,可以认为是“元数据空间”这样的意思。当然这里主要还是存放我们自己写的各种类相关的信息。

举个例子,还是跟我们之前说的那样࿰

你可能感兴趣的:(面试求职,java,面试,jvm,内存划分,类加载)