资讯专栏INFORMATION COLUMN

<JVM规范>阅读-instance of

AlexTuan / 2417人阅读

摘要:操作决定对象是否是指定类型的实例指令格式指令码指令执行前后的栈顶状态描述是线程栈顶部弹出的类型的引用无符号数和共同构建成一个索引指向运行时常量池中的类如果为如果为指定类数组接口的实例则否则举例说明如果是所指向的类为指定类在下列情况下如果是一

instanceof 操作:
 决定对象是否是指定类型的实例
指令格式:
    instanceof
    indexbyte1
    indexbyte2
指令码:
    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.知乎

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/67222.html

相关文章

  • Python类方法与静态方法之间的区别

      小编写这篇文章的主要目的,是讲述一下关于Python的一些小技巧,包括类方法与静态方法之间,存在一些什么区别呢?怎么从真正的意义上去理解关于其不同之间的区别呢?下面就给大家详细的解答下。  前言  在python的类中不仅可以有methods,还可以有变量,这些变量称为类属性,例如如下代码中Book类的TYPES即为类属性。  类中的方法分为3类:  1.实例方法instance method...

    89542767 评论0 收藏0
  • 分布式NewSQL数据库 TiDB

    摘要:指定及端口创建实例默认情况下系统会自动分配一个及一个端口用来访问数据库。跨可用区指同类服务的不同节点部署在至少三个以上的可用区,可保证可用区级故障发生时服务继续可用,但性能比同可用区有所下降。实例本篇目录创建TiDB实例查看TiDB实例列表查看TiDB实例详情删除TiDB实例创建TiDB实例点击【创建实例】选择基础配置版本根据需要选择配置版本,默认选择旗舰版。 不同版本的说明请参考实例类型。...

    ernest.wang 评论0 收藏324
  • Django细腻解读多对多使用through自定中间表方法

      大家在搭建网站时,无可避免的必须设计方案完成页面的用户系统,我们应该完成包含新用户注册、账号登录、用户认证、销户等服务,Django做为完美主义者最终架构,它默认设置使用auth_user表来存储用户数据信息,下面我们就来看看Django多对多使用through自定中间表  多对多中间表详细说明  众所周知针对ManyToMany字段,Django使用的是下一张中间表的形式。依据这下一张表,来...

    89542767 评论0 收藏0
  • 详实注解原生JS以后也支持类型意义

      知道吗?在布达佩斯2022 JSConf会议上,tc39(ES标准委员会)成员Gil Tayar介绍了一份当前仍处于stage 1阶段的提案 ——Type Annotations,意在让原生JS支持类型注解。  很多现在盼到了,在.ts文件将后缀改为.js后就能直接在浏览器中运行。  一份tc39提案通常会经历5个阶段:  stage 0:被提出  stage 1:接受审议  stage 2:...

    3403771864 评论0 收藏0
  • 关于package.json管理依赖包版本的详解

      我们先说下,npm版本号定义  版本格式:X.Y.Z[-string]其含义为:  X:主版本号  Y:次版本号  Z:修正版本号  string: 先行版本号或版本编译信息  举个例子:  6.3.2-alpha的含义为:  主版本号6,有6次不可向下兼容的更新迭代。  次版本号3,有3次小的功能迭代。6.*.* <=6.3.2的依赖声明,都可以安装此新包。  修正版本号2,有2次bu...

    3403771864 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<