当前位置: 首页 > news >正文

JVM实战-掌握分派方法规则

方法调用问题

class GrandFather {
void thinking() {System.out.println("i am grandfather");}
}
class Father extends GrandFather {void thinking() {System.out.println("i am father");}
}
class Son extends Father {void thinking() {// 请读者在这里填入适当的代码(不能修改其他地方的代码)// 实现调用祖父类的thinking()方法,打印"i am grandfather"}
}

Java程序中,可以通过“super”关键字很方便地调用到父类中的方法,但如何访问祖类的方法
使用MethodHandles

void thinking() {
try {MethodType mt = MethodType.methodType(void.class);Field lookupImpl = MethodHandles.Lookup.class.getDeclaredField("IMPL_LOOKUP");lookupImpl.setAccessible(true);MethodHandle mh = ((MethodHandles.Lookup) lookupImpl.get(null)).findSpecial(GrandFather.class,"thinking", mt, 			GrandFather.class);mh.invoke(this);
} catch (Throwable e) {
}
}

基于栈的字节码解释执行引擎

执行引擎

基于栈的指令集与基于寄存器的指令集

Javac编译器输出的字节码指令流,基本上[1]是一种基于栈的指令集架构(Instruction SetArchitecture,ISA),字节码指令流里面的指令大部分都是零地址指令,它们依赖操作数栈进行工作。
基于栈的指令集主要优点是可移植,因为寄存器由硬件直接提供,程序直接依赖这些硬件寄存器则不可避免地要受到硬件的约束。栈架构指令集的主要缺点是理论上执行速度相对来说会稍慢一些

基于栈的解释器执行过程

示例字节码

public int calc();Code:Stack=2, Locals=4, Args_size=10: bipush 1002: istore_13: sipush 2006: istore_27: sipush 30010: istore_311: iload_112: iload_213: iadd14: iload_315: imul16: ireturn
}

操作数入栈 遇到符号出栈计算

相关文章:

  • MyBatis 四大核心组件之 StatementHandler 源码解析
  • STM32——继电器
  • Photoshop Circular Text
  • 鸿蒙应用开发(二)环境搭建
  • Linux gtest单元测试
  • 前端组件库开发
  • 模型 心流
  • 【华为数据之道学习笔记】3-4主数据治理
  • 本项目基于Spring boot的AMQP模块,整合流行的开源消息队列中间件rabbitMQ,实现一个向rabbitMQ
  • 使用Rust 构建C 组件
  • 汽车网络安全--关于UN R155认证的思考
  • 视频封面提取:精准截图,如何从指定时长中提取某一帧图片
  • qt5图形视频框架
  • Minio保姆级教程
  • 激活函数数学详解以及应用场景解释
  • [译]CSS 居中(Center)方法大合集
  • Apache的80端口被占用以及访问时报错403
  • CSS中外联样式表代表的含义
  • ES6, React, Redux, Webpack写的一个爬 GitHub 的网页
  • Java 9 被无情抛弃,Java 8 直接升级到 Java 10!!
  • Java|序列化异常StreamCorruptedException的解决方法
  • Less 日常用法
  • Linux下的乱码问题
  • nginx 负载服务器优化
  • overflow: hidden IE7无效
  • SSH 免密登录
  • vue2.0开发聊天程序(四) 完整体验一次Vue开发(下)
  • 力扣(LeetCode)56
  • 利用jquery编写加法运算验证码
  • 前端js -- this指向总结。
  • 使用API自动生成工具优化前端工作流
  • 学习笔记DL002:AI、机器学习、表示学习、深度学习,第一次大衰退
  • #《AI中文版》V3 第 1 章 概述
  • #在线报价接单​再坚持一下 明天是真的周六.出现货 实单来谈
  • (06)Hive——正则表达式
  • (1)bark-ml
  • (8)Linux使用C语言读取proc/stat等cpu使用数据
  • (delphi11最新学习资料) Object Pascal 学习笔记---第2章第五节(日期和时间)
  • (Python) SOAP Web Service (HTTP POST)
  • (solr系列:一)使用tomcat部署solr服务
  • (差分)胡桃爱原石
  • (转)【Hibernate总结系列】使用举例
  • (转)Android中使用ormlite实现持久化(一)--HelloOrmLite
  • (转)可以带来幸福的一本书
  • **CI中自动类加载的用法总结
  • .NET Core跨平台微服务学习资源
  • .netcore如何运行环境安装到Linux服务器
  • .net开发时的诡异问题,button的onclick事件无效
  • ?php echo ?,?php echo Hello world!;?
  • @WebService和@WebMethod注解的用法
  • [.NET]桃源网络硬盘 v7.4
  • [20180224]expdp query 写法问题.txt
  • [④ADRV902x]: Digital Filter Configuration(发射端)
  • [BZOJ1040][P2607][ZJOI2008]骑士[树形DP+基环树]
  • [c#基础]DataTable的Select方法