Java内存分配介绍:
栈 | 堆 | 方法区 | 本地方法栈 | 寄存器 |
当我们在创造一个对象时
Student stu =new Student()
内存中会做以下事情
1.加载class文件 |
2.声明局部变量 |
3.在堆内存中开辟一个空间 |
4.默认初始化 |
5.显示初始化 |
6.构造方法初始化 |
7.将堆内存中的地址值赋值给左边的局部变量 |
public class Animal{
String name;
int age
public void walk(){
System.out.println("walk");
}
}
public class TestAnimal{
public static void main(String[] args){
Animal a=new Animal();
System.out.println(a);
System.out.println(a.name+" "+a.age);
a.name="cat";
a.age=2;
System.out.println(a.name+" "+a.age);
a.walk();
}
}
下面是该代码的内存图
执行过程分析:
首先,main()方法会先进入栈里面,然后执行new出一个对象a,a被new后会被加载到堆中,堆内存会给a一个默认的值,name的值是null,age的值是0。然后给name和age分别赋值cat,2进行输出,之后执行a.walk()方法,执行完这个程序,这个a就会出栈,然后main方法也出栈。