- 栈
- 存放:局部变量
- 堆
- 存放new出来的对象
- 方法区
- 存放:类的信息、static变量、常量池(字符串常量)等
例如
程序以main函数为入口,
1.首先读取到Student类,将类的信息如代码、static常量、常量池存放如方法区,如图所示
2.s1为局部变量,放入栈,s1是引用类型(类似于int、String),占用4个字节,栈比较小
3.new的方法放入堆,调用构造器,建的student对象是类的一个复制,将类的定义复制到堆,包括name :null,Id :0;Age:0,Gender:null;weight:0,并对其初始化赋值,属性越多,占的内存越多,
study()与sayhello()方法赋上地址,指向方法区
4.Student s1=new student();"="赋值 ,将堆中对象的地址值赋给s1;
4.s1.nam e="亚运"通过s1的地址找到name,通过name的地址找到常量池;
以此类推
操作对象就是操作地址
下图为此段代码的对应内存分析图