JVM规范阅读-instance of
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相关推荐
- JVM规范阅读:徒手解析class文件
Class文件结构 ClassFile {u4 magic; // 魔数u2 minor_version; // 副版本号u2 major_version; // 主版本号u2 constant_po ...
- JVM规范系列第2章:Java虚拟机结构
本规范描述的是一种抽象化的虚拟机的行为,而不是任何一种(译者注:包括 Oracle 公司自己的 HotSpot 和 JRockit 虚拟机)被广泛使用的虚拟机实现. 记住:JVM规范是一种高度抽象行为 ...
- java虚拟机规范这本书怎么样_JVM规范系列开篇:为什么要读JVM规范?
博主个人独立站点开通啦!欢迎点击访问:https://shuyi.tech 许多人知道类加载机制.JVM内存模型,但他们可能不知道什么是<Java虚拟机规范>.对于Java开发来说,< ...
- JVM - 认识JVM规范
目录 重识JVM JVM规范作用及其核心 JVM 整体组成 理解ClassFile结构 ASM开发 重识JVM JVM概述 JVM: Java Virtual Machine,也就是Java虚拟机 所 ...
- 【Java】Volitile的作用、JVM规范如何要求内存屏障、硬件层级内存屏障如何帮助java实现高并发 - 第二天笔记
第二天笔记 Volitile的使用 保持线程可见性 禁止指令重排:单线程中,两条指令的执行前后顺序不会影响执行结果,CPU流水线会优化执行顺序 如果存在乱序,则不可能出现x=0,y=0的结果 运行结果 ...
- Java虚拟机规范阅读(二)IEEE754简介以及Java虚拟机中的浮点算法
什么是浮点数 在计算机系统的发展过程中,曾经提出过多种方法表达实数.典型的比如相对于浮点数的定点数(Fixed Point Number).在这种表达方式中,小数点固定的位于实数所有数字中间的某个位置 ...
- oracle jvm规范官网下载及相关书籍推荐
oracle官网下载 https://www.oracle.com/downloads oracle.com/cn/java/technologies/javase-downloads.html 下载 ...
- java虚拟机规范阅读(三)异常
Java虚拟机里面的异常使用Throwable或其子类的实例来表示,抛异常的本质实际上是程序控制权的一种即时的.非局部(Nonlocal)的转换--从异常抛出的地方转换至处理异常的地方. 绝大多数的异 ...
- JVM规范(四)Frames
Frames 一个frame是被用于存储数据和部分结果的,以及执行动态链接.返回方法的值和分派异常. frame在每次一个方法被调用时创建,在方法调用结束时销毁,不管其完成的结果是正常的还是异常的.f ...
最新文章
- Vue项目自动转换 px 为 rem,高保真还原设计图
- RBAC权限管理总结
- 【OpenCV】邻域滤波:方框、高斯、中值、双边滤波
- Minecraft Forge编程入门一 “环境搭建”
- JavaScript 弱类型
- 【01】什么是AJAX
- java 按钮组_java中创建一个按钮组,有10个按钮,分别写着0,1,2,,3。。。。9
- java 提取url参数_Java提取URL某个参数的值
- 计算机专业英语作业1,计算机专业英语作业1
- CSS3与页面布局学习总结(八)——浏览器兼容与前端性能优化
- 如何在 Mac 上更改特定应用程序的语言?
- ASCII码表以及字符和数字转换
- proteus仿真电路连线
- 【拒绝一问就懵】之从Thread讲到Handle
- 计算机识别人脸原理,深入浅出人脸识别原理
- [转]雷雨天防雷要点
- 【NOIP】【codevs】【DP】1169传纸条
- MAC上安装Ubantu双系统
- Be awesome
- 什么是系统集成资质?对于企业的重要性具体是什么?
热门文章
- ITK:使用二进制阈值对图像阈值
- ITK:像素是否在区域内
- VTK:图表之ColorVertexLabels
- OpenCV基本线性变换的实例(附完整代码)
- OpenCV霍夫线圆HoughLinesCircles的实例(附完整代码)
- OpenCV cv::Mat::checkVector用法的实例(附完整代码)
- c++稀疏表sparse table的实现算法(附完整源码)
- C语言实现二叉树(附完整源码)
- C语言和C++中的struct 和typedef struct
- QT的QStatusBar类的使用