JVM内存区域划分

在JVM内存划分上有三块主要的内存空间(当然除了这三块还有其他的内存空间,这里先只说这三种主要的)分别是

  1. 方法区内存
  2. 堆内存
  3. 栈内存

那么在正常的开发阶段,方法在执行过程中,在JVM中的内存是如何分布的呢,内存是如何变化的? 

一.编译流程

首先xx.java文件在通过编译后会生成xx.class的类文件,然后通过classloader类加载器在硬盘中查找到对应的xx.class文件。找到后会把这个类文件放到JVM中去分配内存空间。

二.执行流程

注意:当方法只定义不调用的时候是不会执行的,因为不执行,所以在JVM中也就并不会给它分配“运行所属”的内存空间,只有在调用这个方法时才会动态的给这个方法分配所属的内存空间。

方法代码片段是属于.class字节码文件的一部分,字节码文件(也就是.class类文件)在类加载的时候,将其放在了方法区内存中,所以这也就导致了JVM的三块主要内存空间中,方法区内存最先由数据存放。

方法代码片段虽然在方法区内存中存放的只有一份,但是实际开发过程中它可以被多次重复调用,每一次调用这个方法的时候,都需要给这个方法分配独立的活动场所,即在栈内存中分配所属的内存空间,此时发生的就是压栈/push/进栈。当方法执行结束的时候,就会释放内存,这时候发生的就是弹栈/pop/出栈。

 上图可以比较形象的表达。同时也理解了局部变量生命周期短的原因。局部变量是在"方法体"中声明的,刚开始是和字节码文件一起放在方法区内存中,在执行阶段内在栈中分配内存,在方法执行结束后内存又被释放。

栈数据结构存储数据的特点是:

  1. 先进后出
  2. 后进先出

 所以在运行阶段最先执行的是main方法,最后释放的是main方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值