要知道对象的内存图,首先要知道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.入栈后的内存运行完毕后会进行出栈,释放内存。(出栈顺序:先进后出)
Java内存管理与对象生命周期
本文探讨了Java内存的五大部分:栈、堆、方法区、本地方法区和寄存器,以及对象在内存中的创建和使用过程。通过实例分析,详细解释了对象在栈和堆中的存储方式,以及方法调用时的内存分配。重点讲解了对象的初始化值、成员变量和局部变量的区别,以及方法调用的内存流程。最后,阐述了内存运行完毕后的出栈和内存释放机制。
444

被折叠的 条评论
为什么被折叠?



