Java内存加载过程

在此借用网上的一张图来说明内存加载过程:






首先说一下这几个内存区的意思:

      栈:是存放局部变量的

    堆:是存放对象的

  方法区:是存放类的字节码的

当你敲下java StaticDemo2的时候,StaticDemo2字节码已经进入了内存,放置在方法区中,方法区中分为静态区和非静态区,非静态区都有一个this所属,而静态区没有,都是被共享的其中有静态main方法和非静态方法即构造方法,其中静态方法有专门的位置,这个时候虚拟机便会自动调用StaticDemo2的main方法,main方法便进栈了,此时在栈中的main方法什么都没有,当执行Person.method()时,Person类便被加载,如上图我们便可以看到Person中的非静态方法和静态方法存放在方法区中,其中静态变量country也被存放到了静态方法区,当执行Person.method的时候,method方法会进栈,但是里面并没有任何变量,因为他里面都是静态的,他直接在方法区中找到类Person,再去找他的成员变量country,最后输出。然后method便会弹栈,(每一个方法都会有return,除了构造方法),接着出现一个局部变量p,放在了main方法中,接着new Person,便会在堆中开辟一个空间,name=null,age=0,然后起相对应的构造函数就进栈了,person(String name ,int age),里面会有一个this,name和age变量,执行他的构造方法,赋完值之后构造方法就会弹栈,然后执行P.show(),show方法进栈,里面有this,其值为在堆开辟的地址,拿着this去找相应的name 和 age,随后show方法弹栈,最后main方法弹栈,而堆里面的东西是靠垃圾回收机制来回收






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值