java对象内存分析
# 创建对象分析
public class Person {
int id;
int age;
public static void main(String[] args) {
Person p1 = new Person();
}
}
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
# 分析 2
public class Person {
int id;
int age;
String school;
public Person(int id, int age, String school) {
this.id = id;
this.age = age;
this.school = school;
}
public static void main(String[] args) {
Person p1 = new Person(1, 20, "朝阳");
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
运行分析:
- 生成字节码
- 从方法区里加载字节码
- 在堆中生成对象以及内存地址以及变量初始化
int id
初始值为 0int age
初始值为 0String school
初始值为null
- 在栈中压入
main()
方法 - 产生变量
p1
并保存其对应的关联的对象的内存地址 - 调用构造器,构造器方法压栈,并对局部变量进行初始化
- 初始化完毕之后,进行赋值
id = 1
age = 20
school
是字符串,是引用类型,会在方法区的字符串常量中生成一个字符串朝阳
以及其对应的内存地址 ,这里保存的是内存地址
- 对应的堆中的对象里的属性值也随之变更
- 构造器结束之后,出栈
- 最后 main 方法出栈,结束
编辑 (opens new window)
上次更新: 2021/11/09, 22:59:05