当前位置: 首页 > news >正文

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 在适当的时候进行垃圾回收。

http://www.mrgr.cn/news/22464.html

相关文章:

  • C语言:刷题日志(2)
  • 代码随想录Day 38|背包问题完结,题目322.零钱兑换、279.完全平方数、139,单词拆分数
  • 两种常用损失函数:nn.CrossEntropyLoss 与 nn.TripletMarginLoss
  • Ansible简单部署与使用
  • C++11 的继续学习
  • 游泳馆押金管理+手牌管理+刷手牌 开通方法
  • 从状态管理到性能优化:全面解析 Android Compose
  • STM32(十二):DMA直接存储器存取
  • 【C++】STL学习——priority_queue(了解仿函数)
  • 防爆定位信标与防爆定位基站有什么区别?
  • 面板中的乐观更新(体验升级)
  • c++进阶——哈希表
  • java基础-IO(4)管道流 PipedOutputStream、PipedInputStream、PipedReader、PipedWriter
  • 逆元
  • C语言函数
  • Js实现继承的6种方式
  • 一文彻底搞懂:Java基本数据类型详解
  • C++11 atomic和内存序
  • 谈谈ES搜索引擎
  • 2409wtl,网浏包装