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

本文详细介绍了JVM内存区域的划分,包括方法区(JDK 1.8后的Metaspace)、程序计数器、Java虚拟机栈和Java堆。讲解了类加载、字节码执行、线程执行与局部变量的关系,以及对象实例在堆内存的分配。通过实例和图表,帮助读者理解JVM如何配合代码运行并管理内存。
摘要由CSDN通过智能技术生成

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

目录

背景知识

大厂面试背景引入

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

存放类的方法区

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

Java虚拟机栈

Java堆内存

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

其他内存区域

本文小结


背景知识

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

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

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

来看图简单介绍一下。

大厂面试背景引入

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

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

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

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

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

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

我们来看下面的图:

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

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

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

同样的,大家看下图:

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

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

存放类的方法区

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

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

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

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

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值