Java中不明白的小知识 ---- 方法执行时内存的变化

在Java虚拟机中,有三块主要的空间(还有其他的空间在这里不一一阐述):

package com;

public class Demo2 {
    public static void main(String[] args) {
        System.out.println("main begin");
        int x = 100;
        m1(x);
        System.out.println("main over");
    }
    public static void m1(int i){
        System.out.println("m1 begin");
        m2(i);
        System.out.println("m1 over");
    }
    public static  void m2(int i){
        System.out.println("m2 begin");
        m3(i);
        System.out.println("m2 over");
    }
    public static void m3(int i){
        System.out.println("m3 begin");
        System.out.println(i);
        System.out.println("m3 over");
    }
}

执行结果:

main begin
m1 begin
m2 begin
m3 begin
100
m3 over
m2 over
m1 over
main over

执行过程:

先把整个class Demo2的代码放入方法区==>Demo2.class
进入主方法,输出main begin;
在栈中分配x的空间,并把x赋值为100;
调用m1方法,在栈中分配m1的空间,并把形参赋值为x;
执行m1方法中的代码,输出m1 begin;
调用m2方法,在栈中分配没m2的空间,并把形参值赋值为x;
以此类推......

(三个i和一个x这四个变量都是局部变量,存在栈内存中,堆内存存放的是成员变量)
如果有:
int x = 100;
int z = 100;
这两个变量在栈中各占一块内存空间

方法调用:压栈,分配空间;

方法结束:弹栈,释放空间。

发布了16 篇原创文章 · 获赞 28 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_42597414/article/details/104731961