• jvm(7)


    方法调用的底层实现
    1. 一般我们写的代码都是经过编译,类加载,进入运行时数据区,一般是方法区,人关注的是方法的执行
    2. jvm关注的是字节码的执行,
    3. main函数是指令的起点,jvm创建main线程执行main方法,出发jvm的一些列指令,使jvm跑起来
    4. 所以要了解在jvm中 方法调用方法的过程

    方法调用的字节码指令
    1. invokestatic 调用静态方法
    2. invokespecial 调用私有实例方法
    3. invokevirtual 调用非私有实例方法(final 除外)
    4. invokeinterface 调用非私有接口
    5. invokedynamic 调用动态方法

    非虚方法
    1. 如果方法在编译器就确定了具体的调用版本,运行时不可变
    2. invokestatic;invokespecial

    虚方法
    1. 与非虚方法相反的,在方法在运行过程中是可变的
    2. jvm根据调用者的类型确定调用的目标方
    3. invokevirual;invokeinterface

    静态分派
    1. 多用于方法的重载(方法名相同,方法的类型或者个数不同)
    2.
    3.

    动态分派
    1. 多用于放的重写
    2.
    3. jvm中虚拟机栈中的动态链接就是invokevirtual将引用变成直接引用

    方法表
    1. 动态分派会导致jvm频繁搜索元数据,所以建了个方法表
    2.

    lambda表达式
    1. invokedynamic 动态调用,类似反射,但是比反射快,权限没有反射大
    2. 创建methodtype,methodhandle 句柄,传入方法参数到handle调用方法

    lambda的捕获与非捕获
    1. 非捕获 不传入变量
    2. 捕获 传入变量

  • 相关阅读:
    javascript 中检测数据类型的方法
    javascript 中的类数组和数组
    html5 构造网页的新方式
    关于 jQuery 中的 $.data() 方法和 jQuery 对象上的data 方法
    基于北洋PT站表结构分析以及ORM重写
    面试题准备
    sqlalchemy 外键
    sqlalchemy
    ansible roles
    ansible
  • 原文地址:https://www.cnblogs.com/xiaoshahai/p/13436827.html
Copyright © 2020-2023  润新知