Java中执行一个方法,jvm中做了哪些事情

当在Java中执行一个方法时,JVM进行的具体步骤如下:

1. 加载类

  • 查找类:JVM通过类加载器查找指定的类文件(.class)。
  • 加载类:将类文件的字节码读入内存,并在方法区(Metaspace)中创建Class对象。

2. 连接

  • 验证:确保字节码的合法性,包括检查类文件结构、确保没有安全隐患等。
  • 准备:为类变量分配内存,分配空间并初始化为默认值(如整型为0,布尔型为false)。
  • 解析:将符号引用(如方法名、字段名等)转换为直接引用(内存地址),确保可以高效访问。

3. 初始化

  • 在类被首次使用前,JVM会执行类的初始化,包括:
    • 执行静态变量的赋值。
    • 执行静态初始化块(如果有的话)。

4. 创建线程栈

  • 每次方法调用时,JVM会为该方法创建一个新的栈帧,栈帧包含:
    • 局部变量表:存储方法参数和局部变量。
    • 操作数栈:用于执行方法时存储操作数和计算结果。
    • 方法返回地址:用于跟踪方法返回时应返回的地址。

5. 执行方法

  • JVM根据字节码指令逐条执行:
    • 加载参数:将方法参数压入操作数栈。
    • 执行指令:如算术运算、条件判断、对象创建等,更新操作数栈和局部变量表。
    • 异常处理:如果发生异常,JVM会查找对应的异常处理机制。

6. 方法调用

  • 如果该方法内部调用其他方法,JVM将:
    • 为被调用的方法创建新的栈帧,重复上述的过程。
    • 通过返回地址在完成后返回到原来的方法栈帧。

7. 方法返回

  • 方法执行完后,返回值被放入调用栈中的操作数栈,控制权返回到调用该方法的位置,栈帧被弹出。

8. 垃圾回收

  • 在方法执行完毕后,JVM可能会触发垃圾回收,以回收不再使用的对象内存。具体何时触发取决于JVM的实现和内存管理策略。

9. 优化

  • JVM可能会使用即时编译(JIT)技术,在方法执行时将热代码编译为本地机器码,提高性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yymagicer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值