你真的了解java中方法执行时的内存变化嘛?

首先我们要知道java中的jvm主要有三块内存空间:栈,堆,方法区(当然除了这三个还有别的,这里我们只讨论这三个。)

 首先我们来说说方法区:类加载器会将硬盘上的.class字节码文件装载到jvm的时候,会将字节码文件存放到方法区当中,就是说方法区存放的是代码片段。(因为类需要加载,所以方法区当中最先有数据)

栈:当我们的方法被调用的时候,该方法需要的内存空间就会在栈中分配(没有调用的时候就还是老实的呆在方法区当中)。栈这种数据结构的特点是先进的后出,如图:

 知道这些之后我们可以来看一道程序:

下面我们来根据上面的理论来分析,首先会在我们的方法区加载,意思就是我们的main(),testone(),testtwo(),testthree()都会先放在我们的方法区。然后main方法会首先自动进入我们的栈,第一个入栈,它会执行一个int x = 10,然后输出main start,接着再调用我们的testone()方法,这时候我们的testone()入栈,主导权就交到了testone()手上,会输出我们testone()中定义的东西,以此类推,当我们栈顶是testthree()时,testthree()没再调用任何方法,会都执行完,执行完之后就会出栈,接着并是我们的testtwo()在我们的栈顶,以此类推。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值