用Java如何实现方法重写?在C ++中,我们有vtable的概念。.这是如何在Java内部实现的?
为了回答这个问题,特别是在虚拟机中如何实现覆盖,在Java虚拟机编程(Google图书链接)中有一篇文章。
VM将在所引用的类中寻找适当的方法定义,然后逐步处理继承栈。显然,在某些阶段将应用各种优化。
有关相关字节码指令的说明,请参见此处invokevirtual
:
invokevirtual会查看中提供的描述符,并确定该方法采用多少个参数(可能为零)。它将这些参数从操作数堆栈中弹出。接下来,它将objectref从堆栈中弹出。objectref是对正在调用其方法的对象的引用。invokevirtual检索objectref的Java类,并搜索由该类定义的方法列表,然后搜索其超类,以查找名为methodname的方法,该方法的描述符为描述符。
正如gustafc在下面强调的那样,可以应用各种优化,并且毫无疑问,JIT将进一步引入。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句