【jvm】虚拟机栈之方法返回地址

目录

一、说明
    1. 存放调用该方法的pc寄存器的值。
    1. 一个方法的结束,有两种方式:正常执行完成和出现未处理的异常的非正常退出
    1. 无论通过哪种方式退出,在方法退出后都返回到该方法被调用的位置。
    1. 方法正常退出时,调用者的pc计数器的值作为返回地址,即调用该方法的指令的下一条指令的地址。
    1. 通过异常退出的,返回地址是要通过异常表来确定,栈帧中一般不会保存这部分信息。
    1. 方法的退出就是当前栈帧出栈的过程。此时,需要恢复上层方法的局部变量表、操作数栈、将返回值压入调用者栈帧的操作数栈、设置PC寄存器值等,让调用者方法继续执行下去。
    1. 正常完成出口和异常完成出口的区别在于: 通过异常完成出口退出的不会给他的上层调用者产生任何的返回值。
二、方法退出
    1. 当一个方法开始执行后,只有两种方式可以退出这个方法
    1. 一是执行引擎遇到任意一个方法返回的字节码指令 (返回),会有返回值传递给上层的方法调用者,简称正常完成出口。
    1. 一个方法在正常调用完成之后究竟需要使用哪一个返回指令还需要根据方法返回值的实际数据类型而定。
    1. 在字节码指令中,返回指令包含ireturn(当返回值是boolean、byte、char、short和int类型时使用)、lreturn、freturn、dreturn以及areturn(引用类型),另外还有一个return指令供声明为void的方法、实例初始化方法、类和接口的初始化方法使用。
    1. 在方法执行的过程中遇到了异常 (Exception),并且这个异常没有在方法内进行处理,也就是只要在本方法的异常表中没有搜索到匹配的异常处理器,就会导致方法退出。简称异常完成出口。
三、代码示例
package com.learning.stack.return_address;

import java.util.Date;

/**
 * @Author wangyouhui
 * @Description 方法返回地址
 **/
public class ReturnAddressLearning {
    public boolean booleanMethod(){
        return false;
    }

    public char charMethod(){
        return 'a';
    }

    public int intMethod(){
        return 0;
    }

    public long longMethod(){
        return 0L;
    }

    public float floatMethod(){
        return 0.0f;
    }

    public double doubleMethod(){
        return 0.0;
    }

    public String stringMethod(){
        return null;
    }

    public Date dateMethod(){
        return null;
    }

    public void voidMethod(){
    }
}
四、截图示例
    1. 方法返回类型为boolean,返回指令为ireturn
    1. 方法返回类型为char,返回指令为ireturn
    1. 方法返回类型为int,返回指令为ireturn
    1. 方法返回类型为long,返回指令为lreturn
    1. 方法返回类型为float,返回指令为freturn
    1. 方法返回类型为double,返回指令为dreturn
    1. 方法返回类型为引用类型,返回指令为areturn
    1. void方法,返回指令为return
    1. init方法,返回指令为return
相关推荐
无尽的大道11 小时前
Java反射原理及其性能优化
jvm·性能优化
AAA 建材批发王哥(天道酬勤)17 小时前
JVM 由多个模块组成,每个模块负责特定的功能
jvm
JavaNice哥1 天前
1初识别jvm
jvm
涛粒子1 天前
JVM垃圾回收详解
jvm
YUJIANYUE1 天前
PHP将指定文件夹下多csv文件[即多表]导入到sqlite单文件
jvm·sqlite·php
逊嘘1 天前
【Java语言】抽象类与接口
java·开发语言·jvm
鱼跃鹰飞1 天前
大厂面试真题-简单说说线程池接到新任务之后的操作流程
java·jvm·面试
王佑辉1 天前
【jvm】Major GC
jvm
阿维的博客日记1 天前
jvm学习笔记-轻量级锁内存模型
jvm·cas·轻量级锁