• 方法的执行过程


    接昨天的文章顺便理一理方法的执行过程,这里借许令波大牛的图一用

    方法执行之前

    调用昨天的run工具,完成了目标源码的编译后;获取ClassLoader对象,加载目标字节码至方法区,在堆上创建Class< T >对象并初始化(总之对象就是一种有场景的半持久型数据)。

    方法的执行过程

    调用对象的方法,开始执行方法区指令,根据该方法的操作数栈深度,局部变量空间需求等在该线程栈上创建栈帧,执行单个方法的过程其实就是在栈帧中操作的过程;调用下一个方法,那么就重复之前创建栈帧的步骤。

    下面列出一个方法的字节码,不难想象方法指令的执行过程

    public int calc() {
    		int a = 100;
    		int b = 200;
    		int c = 300;
    		return (a + b) * c;
    	}
    
    public int calc();
        descriptor: ()I
        flags: ACC_PUBLIC
        Code:
          stack=2, locals=4, args_size=1  //操作数栈深度为2,局部变量空间为4个Slot 
             0: bipush        100
             2: istore_1
             3: sipush        200
             6: istore_2
             7: sipush        300
            10: istore_3
            11: iload_1
            12: iload_2
            13: iadd
            14: iload_3
            15: imul
            16: ireturn
          LineNumberTable:
            line 3: 0
            line 4: 3
            line 5: 7
            line 6: 11
    
    

    抽象理解方法执行

    就我而言,在抽象理解方法的执行上,会把栈帧转移到相应的对象上,没错就如下图

    方法的执行一下变得好简单哈




  • 相关阅读:
    Django搭建环境_初始化
    Python3 获取以及解析json格式
    python遍历目录树删除指定后缀的文件
    redis基础
    Centos7 更换阿里yum源
    Python3 实现带cookie登陆网站--自动
    Python3 requests实现cookie登陆--手动
    Flask中使用Editormd上传图片
    Flask中数据库的多对多关系
    Flask中博客类的Post实现
  • 原文地址:https://www.cnblogs.com/zzzz76/p/8159463.html
Copyright © 2020-2023  润新知