码迷,mamicode.com
首页 > 其他好文 > 详细

jvm(7)

时间:2020-08-05 00:09:12      阅读:95      评论:0      收藏:0      [点我收藏+]

标签:底层实现   info   运行   virtual   mamicode   加载   链接   load   main函数   

方法调用的底层实现
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. 捕获 传入变量

jvm(7)

标签:底层实现   info   运行   virtual   mamicode   加载   链接   load   main函数   

原文地址:https://www.cnblogs.com/xiaoshahai/p/13436827.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!