java ---一个对象的内存解析(详细讲解 以及方法区的内存解析)

要知道对象的内存图,首先要知道ava 对内存空间的划分五部分;
栈、堆、方法区、本地方法区、寄存器。
1、栈内存:存储都是局部变量。只要是在方法中定义的变量都是局部变量。
      一旦变量的生命周期结束该变量就被释放。
2、堆内存都是实体(对象)(new 关键词创建的)(成员变量)
     每一个实体都有一个首地址值。
     堆内存的变量都有默认的初始化值。不同类型不一样,
          byte,short,int,:0       float, double:0.0    boolean:false      char——’\u0000'  string:null
     
3.方法区里存储的是类文件 即.class文件 与字符串常量池

分析:

1有两个类 TestDemo 与 Phone 放在方法区, 类TestDemo内有main方法,类Phone中有String brand, int price和void call(String name) ,void sendMessage()以及两个方法的位置0x222

 2执行main方法 Phone p先在栈内存开辟空间存储对象p,new Phone()在堆内存开辟空间,同时 类Phone中的属性 String brand,int price以及call() sendMessage的位置:0x222,注意:堆内存的都为成员变量,所以它们都有初始化值即brand:null, price:0,

3.p.rand="华为",p.price="4999"分别将brand price重新赋值为华为,4999

5.p.call("古力娜扎") 通过栈内存中p对象0x111找到堆内存中的new Phone()0x111,然后再通过堆内存中0x222找到方法区中的call()方法,接着在栈内存开辟call()方法的空间

6.p.sendMessage()过程同 5。

7.入栈后的内存运行完毕后会进行出栈,释放内存。(出栈顺序:先进后出)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值