JVM内存模型
public class Teacher {String name;int age;public void eat(){System.out.println("吃饭");}public void study(){System.out.println("学习");}public static void main(String[] args) {//创建对象Teacher teacher = new Teacher();System.out.println(teacher.name);System.out.println(teacher.age);//赋值操作teacher.name = "老王";teacher.age = 36;//调用方法teacher.eat();teacher.study();}
}

执行流程
- JVM解析类文件:
- JVM 解析 .class 文件,将类信息分层加载到方法区。
2. 执行 main 方法:
- main 方法是程序的入口,开始执行 main 方法。
3. 栈帧创建:
- 每个方法在栈中都有一个栈帧。main 方法的栈帧首先存放形参 args,然后继续执行。
- 创建对象:
- 执行 Teacher teacher = new Teacher(); 时,在 main 方法的栈帧中创建一个局部变量 teacher。
- 在堆中创建一个 Teacher 对象(对象的创建信息从方法区的 Teacher 类信息中获取)。
- 将堆中对象的地址赋值给局部变量 teacher。
- 访问属性:
- 获取 teacher 对象的 name 和 age 属性,由于未赋值,初始值分别为 null 和 0。
6. 赋值操作:
- 将 teacher.name 赋值为 "老王",teacher.age 赋值为 36(name 的值从方法区的字符串常量池中获取)。
7. 调用方法:
- 调用 teacher.eat() 方法,在栈中创建 eat 方法的栈帧,执行完毕后出栈。
- 调用 teacher.study() 方法,在栈中创建 study 方法的栈帧,执行完毕后出栈。
- 结束 main 方法:
- main 方法执行完毕后,其栈帧出栈。
- 堆中创建的对象会由 JVM 在适当的时候进行垃圾回收。
