在面向对象的编程中,会很频繁的使用到动态分派,如果在每次动态分派的过程中都要重新在类的方法元数据中搜索合适的目标的话就可能影响到执行效率。因此,为了提高性能,JVM采用在类的方法区建立一个虚方法表 (virtual method table)(非虚方法不会出现在表中)来实现。使用索引表来代替查找。

每个类中都有一个虚方法表,表中存放着各个方法的实际入口。

虚方法表是什么时候被创建的呢?

虚方法表会在类加载的链接阶段被创建并开始初始化,类的变量初始值准备完成之后,JVM会把该类的方法表也初始化完毕。

如上图所示:如果类中重写了方法,那么调用的时候,就会直接在虚方法表中查找,否则将会直接连接到Object的方法中。

方法的调用:虚方法表相关推荐

  1. java设置按钮调用问题_按钮相关问题:尝试在空对象引用上调用虚方法

    我在Android中遇到了这个问题 . 01-30 20:32:57.415 24227-24227 / edu.gatech.seclass.vcipher E / AndroidRuntime:F ...

  2. Java实现 for循环输出空心的菱形 在main方法中调用printHollowRhombus()方法完成10行的空心菱形输出,其中 printHollo

    Java实现for循环输出空心的菱形 @author asus 在main方法中调用printHollowRhombus()方法完成10行的空心菱形输出,其中 printHollowRhombus() ...

  3. java 调用对象的方法_JAVA调用对象方法的执行过程

    JAVA调用对象方法的执行过程: ①.编译器查看对象的声明类型和方法名.假设调用x.f(parameter),  且隐式参数x声明为C类型的对象,有可能在C对象中存在多个参数类型和参数个数不同的f的方 ...

  4. java 方法重载调用_Java方法的定义以及调用、方法重载、可变参数以及递归

    何谓方法 Java方法是语句的集合,它们在一起执行一个功能 方法是解决一类问题的步骤的有序组合 方法包含于类或对象中 方法在程序中被创建,在其他地方被引用 System.out.println();/ ...

  5. c 调用java post方法_C#调用Java方法(详细实例)

    C#可以直接引用C++的DLL和转换JAVA写好的程序.最近由于工作原因接触这方面比较多,根据实际需求,我们通过一个具体例子把一个JAVA方法转换成可以由C#直接调用的DLL C#调用c++ C#调用 ...

  6. obj是什么意思_为什么start方法会调用run方法?(为什么不能直接run来实现创建线程?)...

    我们知道再创建线程的时候是使用Thread类中的start方法,那么为什么不直接用Thread类中的run方法呢? 来直接上源码: Thread中的run方法如下. 那么target是什么呢? 我们可 ...

  7. python中的魔法方法__new___Python魔法方法会调用new方法吗?

    Python中的sort()方法用于数组排序,本文以实例形式对此加以详细说明:一.基本形式列表有自己的sort方法,其对列表进行原址排序,既然是原址排序,那显然元组不可能拥有这种方法,因为元组是不可修 ...

  8. android 虚方法,尝试在空对象引用上调用虚方法’android.view.View android.view.View.getRootView()’...

    我收到这个错误, "Attempt to invoke virtual method 'android.view.View android.view.View.getRootView()' ...

  9. java中show方法的调用_Java方法调用细节

    JVM中,类加载过程链接阶段的解析步骤包含将符号引用转换为调用方法的直接引用过程,该过程与方法的绑定机制有关,这节记录下Java方法调用的一些细节. 方法绑定机制 在聊方法绑定机制之前,我们需要先知道 ...

  10. 关于SurfaceHolder.addCallback方法无法调用surfaceCreated 方法不回调的一个建议

    我遇到这个问题的场景是:页面一个大的SurfaceView .想要通过相机实时预览捕获到的场景.页面进入的时候动态获取相机权限,如果有权限则直接绑定holder surfaceHolder=surfa ...

最新文章

  1. web页面的点对点复制粘贴
  2. ES6学习笔记之Promise
  3. 使用 Minidumps 和 Visual Studio .NET 进行崩溃后调试
  4. Json string to object debug - json字符串转Java对象的处理调试
  5. Linux环境变量详解
  6. Win10系统如何查看电脑是否是UEFI启动模式
  7. 在线PS(PhotoShop),打开PSD文件,图像处理
  8. 2018. 2.4 Java中集合嵌套集合的练习
  9. 模拟电子电路技术基础 | 常用半导体器件
  10. SOLIDWORKS Composer制作动画的方法
  11. Java5的倍数_关于java:将数字四舍五入到最接近的5的倍数
  12. linux 命令 查询丢包率,linux测试丢包率的命令 linux查看丢包率命令
  13. 【windows环境 PKCS11库Demo 用于劫持PKCS11库并打印参数】
  14. OpenLayers学习笔记中级篇(四、地图图标操作)
  15. php调用微信公众号支付接口,Thinkphp实现微信公众号支付接口
  16. 邮箱发送附件,附件变成了bin文件
  17. mysql mmm 测试_mysql-mmm有关mmm_control 参数测试
  18. 机器人的自述作文_扫地机器人的自述500字作文
  19. win2003 x86 下载
  20. xcode 配置wechat_iOS逆向 给微信添加新功能

热门文章

  1. Log4j分级别记录日志文件
  2. Jetpack Compose 中使用 Lottie 动画
  3. Oracle表空间(tablespaces)详解
  4. clojure_深入了解Clojure系列
  5. 前端面试:(VUE)
  6. 用python写一个文件去重
  7. macbook 常用键盘快捷键大全 mac os 苹果电脑
  8. 【英语面试】三.计算机专业英语面试常见问题(个人选择/学业规划篇)
  9. Windows10下编译Nginx64位并增加Ipv6模块
  10. GCD(i,j)求和