instanceof

操作:

 决定对象是否是指定类型的实例

指令格式:

    instanceofindexbyte1indexbyte2

指令码:

    instanceof = 193 (0xc1)

指令执行前后的栈顶状态:

    ..., objectref →..., result

描述:

objectref是线程栈顶部弹出的类型的引用,无符号数indexbyte1和indexbyte2共同构建成一个索引(indexbyte1<<8|indexbyte2)指向运行时常量池中的类.
如果objectref为null,result=0;
如果objectref为指定类(resolved class),数组,接口的实例,则result=1
否则result=0;

举例说明:

如果S是objectref所指向的类,T为指定类(resolved class),在下列情况下result=1:

  • 如果S是一个class:

    • 如果T为class,则S extends T,或者S等于T
    • 如果T为interface,则S implements T
  • 如果S是一个class:

    • 如果T为interface,则T为Object
    • 如果T为interface,则S extends T,或者S等于T
  • 如果S是一个array,SC[],数组元素为SC:

    • 如果T为class,则T为Object
    • 如果T为interface,则T 为数组的子类(见JLS4.10.3)
    • 如果T是一个array,TC[],数组元素为TC

      • TC和SC是相同的原始类型
      • TC和SC都是class,SC可以在运行时转换为TC

JVM具体的实现

论文Fast subtype checking in the HotSpot JVM
问答请教一个share/vm/oops下的代码做fast subtype check的问题

参考:
1.JLS
2.JVM
3.知乎

JVM规范阅读-instance of相关推荐

  1. JVM规范阅读:徒手解析class文件

    Class文件结构 ClassFile {u4 magic; // 魔数u2 minor_version; // 副版本号u2 major_version; // 主版本号u2 constant_po ...

  2. JVM规范系列第2章:Java虚拟机结构

    本规范描述的是一种抽象化的虚拟机的行为,而不是任何一种(译者注:包括 Oracle 公司自己的 HotSpot 和 JRockit 虚拟机)被广泛使用的虚拟机实现. 记住:JVM规范是一种高度抽象行为 ...

  3. java虚拟机规范这本书怎么样_JVM规范系列开篇:为什么要读JVM规范?

    博主个人独立站点开通啦!欢迎点击访问:https://shuyi.tech 许多人知道类加载机制.JVM内存模型,但他们可能不知道什么是<Java虚拟机规范>.对于Java开发来说,< ...

  4. JVM - 认识JVM规范

    目录 重识JVM JVM规范作用及其核心 JVM 整体组成 理解ClassFile结构 ASM开发 重识JVM JVM概述 JVM: Java Virtual Machine,也就是Java虚拟机 所 ...

  5. 【Java】Volitile的作用、JVM规范如何要求内存屏障、硬件层级内存屏障如何帮助java实现高并发 - 第二天笔记

    第二天笔记 Volitile的使用 保持线程可见性 禁止指令重排:单线程中,两条指令的执行前后顺序不会影响执行结果,CPU流水线会优化执行顺序 如果存在乱序,则不可能出现x=0,y=0的结果 运行结果 ...

  6. Java虚拟机规范阅读(二)IEEE754简介以及Java虚拟机中的浮点算法

    什么是浮点数 在计算机系统的发展过程中,曾经提出过多种方法表达实数.典型的比如相对于浮点数的定点数(Fixed Point Number).在这种表达方式中,小数点固定的位于实数所有数字中间的某个位置 ...

  7. oracle jvm规范官网下载及相关书籍推荐

    oracle官网下载 https://www.oracle.com/downloads oracle.com/cn/java/technologies/javase-downloads.html 下载 ...

  8. java虚拟机规范阅读(三)异常

    Java虚拟机里面的异常使用Throwable或其子类的实例来表示,抛异常的本质实际上是程序控制权的一种即时的.非局部(Nonlocal)的转换--从异常抛出的地方转换至处理异常的地方. 绝大多数的异 ...

  9. JVM规范(四)Frames

    Frames 一个frame是被用于存储数据和部分结果的,以及执行动态链接.返回方法的值和分派异常. frame在每次一个方法被调用时创建,在方法调用结束时销毁,不管其完成的结果是正常的还是异常的.f ...

最新文章

  1. Vue项目自动转换 px 为 rem,高保真还原设计图
  2. RBAC权限管理总结
  3. 【OpenCV】邻域滤波:方框、高斯、中值、双边滤波
  4. Minecraft Forge编程入门一 “环境搭建”
  5. JavaScript 弱类型
  6. 【01】什么是AJAX
  7. java 按钮组_java中创建一个按钮组,有10个按钮,分别写着0,1,2,,3。。。。9
  8. java 提取url参数_Java提取URL某个参数的值
  9. 计算机专业英语作业1,计算机专业英语作业1
  10. CSS3与页面布局学习总结(八)——浏览器兼容与前端性能优化
  11. 如何在 Mac 上更改特定应用程序的语言?
  12. ASCII码表以及字符和数字转换
  13. proteus仿真电路连线
  14. 【拒绝一问就懵】之从Thread讲到Handle
  15. 计算机识别人脸原理,深入浅出人脸识别原理
  16. [转]雷雨天防雷要点
  17. 【NOIP】【codevs】【DP】1169传纸条
  18. MAC上安装Ubantu双系统
  19. Be awesome
  20. 什么是系统集成资质?对于企业的重要性具体是什么?

热门文章

  1. ITK:使用二进制阈值对图像阈值
  2. ITK:像素是否在区域内
  3. VTK:图表之ColorVertexLabels
  4. OpenCV基本线性变换的实例(附完整代码)
  5. OpenCV霍夫线圆HoughLinesCircles的实例(附完整代码)
  6. OpenCV cv::Mat::checkVector用法的实例(附完整代码)
  7. c++稀疏表sparse table的实现算法(附完整源码)
  8. C语言实现二叉树(附完整源码)
  9. C语言和C++中的struct 和typedef struct
  10. QT的QStatusBar类的使用