java零基础4--JVM内存解析(过渡知识)

什么是jvm

JVM是JRE的一部分,即java虚拟机,当我们在安装JDK的时候,就附带安装了JRE,JVM的跨平台特性就和JVM息息相关,java的字节码文件可以在任何具有JVM的电子设备上运行,通过JVM,我们就可以实现对java程序的编译与运行,目前我们需要掌握JVM中的三块主要内存,为后面学习面向对象打下基础。这三块内存分别是:栈内存,方法区和堆内存。,当然,除了这三块还有别的内存,但作为初学者,先掌握这三块即可。

一、栈数据结构

栈:方法在被调用的时候,该方法所需的内存空间,就会在栈内存中进行分配。
压栈:当方法被调用时,在栈空间底部会开辟一个内存空间,此过程被称作压栈
弹栈:位于栈顶部的方法执行完后,释放其内存,此过程被称作弹栈
栈帧:类似于c语言中的指针,永远指向栈顶部的元素。

下面我们通过一张图来理解栈内存(以下图片均来源于B站动力节点杜老师的课程)
从上图我们不难看出:压入栈中的方法先被安置在栈内存的底部,随后的方法依次往上堆叠,并且先进入栈的方法最后被弹栈,后进入的栈的方法最后弹栈。

这里我们解释一下方法递归:比如说求一个数的阶乘的方法 f(int a)
return a*f(a-1)
在栈内存中,f(a)在底部,后面压入的f(a-1)依次上叠,在执行到f(1)时,return1,发生弹栈,从最顶部的f(1)开始依次弹栈,最后弹出f(a),我们就得到了a的阶乘。

二、堆内存

凡是通过new创建出来的对象,都存储在JVM的堆内存之中,new运算符的作用就是在堆内存之中开辟一个空间,这里先不展开,后面面向对象时再详细展开在创建对象时堆内存的变化情况。

三、方法区

JVM自带有一个类加载器,其作用是,将硬盘上的xxx.class字节码文件装载到JVM时,会将字节码文件存放到方法区之中,也就是说方法区之中存放的是你所写的代码片段。(以下图片来源于b站动力节点杜老师的课程之中)
在这里插入图片描述
在运行程序时,需要先加载类,所以方法区中会最早有数据。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值