首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

Java方法调用(虚拟机字节码执行引擎)

JAVA方法调用属于虚拟机字节码执行引擎的一部分,执行引擎,可以简单的理解为它用来接收输入的Class文件,按照字节码进行处理程序,然后输出执行结果。...我们在如何找个对象中已经讲述了关于方法调用的指令,那么今天我们就看一下方法调用的时候虚拟机引擎会做哪些事。 1....方法调用 由于Java语言的多态性质(重写、重载),因此我们的方法调用需要确认需要调用哪个方法。这里不牵涉方法的执行。 2....所有基于静态类型来确定方法调用版本的方式都属于静态分派。静态分派发生在编译阶段,因此并不是由虚拟机执行的,编译器在确定方法版本的时候会选取于一个最合适的版本。...本期虚拟机层面的Java方法调用介绍到这,我们下期再见!!!

33720

ARM64下的函数sp指令调用栈操作

一·指令 sp:用来保存栈底的寄存器 ldr:把数据从内存读出来,写入寄存器 str:把数据从寄存器读出来,写入内存 二·实现 我们新建一个Xcode项目,创建一个新的.s文件。...如下 1.JPG 三·通过LLDB和内存查看栈空间 我们需要特别关注sp,x0,x1 寄存器的变化 当我们执行函数A时:sp指向A函数的栈空间底部 2.JPG 此时x1 x0还未被赋值都为0x00b...当我们利用LLDB继续向下指向函数跳转到B函数时,修改x0的值,查看内存变化 IMG_5933(20210129-142055).JPG 1.JPG 我们得到了 跳转后的sp指针地址 2.JPG...比较A函数sp地址:0x16f1b7820 跳转到B时:16F1B7836处写的FF值 四·结论 QQ截图20210129143830.png 汇编代码解释: sub sp,sp #0x30 拉伸栈空间...stp x0,x1,[sp,#0x10] ldp x1,x0,[sp,#0x10] add sp,sp,#0x30 回缩栈空间 返回A函数sp栈底指针处

2.4K20

Java 虚拟机-JVM是如何执行方法调用的?(上)

然而,Java 编译器直接将我的方法调用识别为调用第二个方法,这究竟是为什么呢? 带着这个问题,我们来看一看 Java 虚拟机是怎么识别目标方法的。...具体来说,Java 字节码中与调用相关的指令共有五种。 invokestatic:用于调用静态方法。...而对于 invokevirtual 以及 invokeinterface 而言,在绝大部分情况下,虚拟机需要在执行过程中,根据调用者的动态类型,来确定具体的目标方法。...上一篇中我曾提到过,在执行使用了符号引用的字节码前,Java 虚拟机需要解析这些符号引用,并替换为实际引用。...在执行调用指令前,它所附带的符号引用需要被解析成实际引用。对于可以静态绑定的方法调用而言,实际引用为目标方法的指针。对于需要动态绑定的方法调用而言,实际引用为辅助动态绑定的信息。

1.4K70

Java 虚拟机:JVM是如何执行方法调用的?(下)

这两种指令,均属于 Java 虚拟机中的虚方法调用。 在绝大多数情况下,Java 虚拟机需要根据调用者的动态类型,来确定虚方法调用的目标方法。这个过程我们称之为动态绑定。...我们知道,方法调用指令中的符号引用会在执行之前解析成实际引用。对于静态绑定的方法调用而言,实际引用将指向具体的目标方法。...对于动态绑定的方法调用而言,实际引用则是方法表的索引值(实际上并不仅是索引值)。 在执行过程中,Java 虚拟机将获取调用者的实际类型,并在该实际类型的虚方法表中,根据索引值获得目标方法。...它能够缓存虚方法调用调用者的动态类型,以及该类型所对应的目标方法。在之后的执行过程中,如果碰到已缓存的类型,内联缓存便会直接调用该类型所对应的目标方法。...因此,在最坏情况下,我们用两种不同类型的调用者,轮流执行该方法调用,那么每次进行方法调用都将替换内联缓存。也就是说,只有写缓存的额外开销,而没有用缓存的性能提升。 另外一种选择则是劣化为超多态状态。

1.1K20

SpringCloudRPC远程调用核心原理:Feign远程调用执行流程

Feign远程调用执行流程 由于Feign中生成RPC接口JDK动态代理实例涉及的InvocationHandler调用处理器有多种,导致Feign远程调用执行流程稍微有所区别,但是远程调用执行流程的主要步骤是一致的...这里主要介绍与两类InvocationHandler调用处理器相关的RPC执行流程: (1)与默认的调用处理器FeignInvocationHandler相关的RPC执行流程。...FeignInvocationHandle在它的invoke(...)方法中会根据hello()方法的Java反射实例在dispatch映射对象中找到对应的MethodHandler方法处理器,然后由后者完成实际的...Feign远程调用的核心是通过一系列封装和处理,将以JAVA注解方式定义的RPC方法最终转换成HTTP请求,然后将HTTP请求的响应结果解码成POJO对象返回给调用者。...通过Feign及其动态代理机制,Java开发人员不用再通过HTTP框架封装HTTP请求报文的方式完成远程服务的HTTP调用

1.2K30
领券