JVM中存在的空间
- 栈:
- 方法运行时进入的内存,里面还会存储程序中的局部变量
- 堆:
- new出来的对象都存在于该内存
- 方法区:在JVM规范中该区域属于堆,但实现中不属于堆
- 字节码文件加载时进入的内存
内存模型
加载字节码文件
- demo_Memory:静态主方法main进入方法区中的demo_Memory.Class中的静态方法区中
- Student:name age 进入student.class中的非静态区中;静态成员变量school进入静态方法区,初始化值为null(静态成员变量特性);然后由于有赋值所以将null替换为所赋的值;加载非静态方法show()
运行程序
- 运行程序main方法进栈:程序开始执行 Student s = new Student();
- 堆内存中开辟一块空间存放student对象并将其地址值赋值给s;
- 堆内存中name初始化为null,age初始化为0;
- 由于有赋值则用值替换初始值;
- 成员方法地址指向方法区中的方法内存地址;
- 调用show()方法:show()方法进栈并输出结果
- 再次创建一个Student对象无需加载字节码文件;直接在堆中再开辟一块儿空间储存新的对象,步骤相同