AFAIK每个类都知道它扩展的所有类以及实现的接口.这些可以存储在提供O(1)查找时间的哈希集中.

当代码经常采用同一分支时,由于几乎可以消除成本,因为CPU可以在确定是否应该采用该分支之前在分支中执行代码,从而使成本几乎为零.

由于微基准测试是在4年前进行的,我希望最新的CPU和JVM会更快.

public static void main(String... args) {

Object[] doubles = new Object[100000];

Arrays.fill(doubles, 0.0);

doubles[100] = null;

doubles[1000] = null;

for (int i = 0; i < 6; i++) {

testSameClass(doubles);

testSuperClass(doubles);

testInterface(doubles);

}

}

private static int testSameClass(Object[] doubles) {

long start = System.nanoTime();

int count = 0;

for (Object d : doubles) {

if (d instanceof Double)

count++;

}

long time = System.nanoTime() - start;

System.out.printf("instanceof Double took an average of %.1f ns%n", 1.0 * time / doubles.length);

return count;

}

private static int testSuperClass(Object[] doubles) {

long start = System.nanoTime();

int count = 0;

for (Object d : doubles) {

if (d instanceof Number)

count++;

}

long time = System.nanoTime() - start;

System.out.printf("instanceof Number took an average of %.1f ns%n", 1.0 * time / doubles.length);

return count;

}

private static int testInterface(Object[] doubles) {

long start = System.nanoTime();

int count = 0;

for (Object d : doubles) {

if (d instanceof Serializable)

count++;

}

long time = System.nanoTime() - start;

System.out.printf("instanceof Serializable took an average of %.1f ns%n", 1.0 * time / doubles.length);

return count;

}

最终打印

instanceof Double took an average of 1.3 ns

instanceof Number took an average of 1.3 ns

instanceof Serializable took an average of 1.3 ns

如果我改变“双打”

for(int i=0;i

doubles[i] = "";

我懂了

instanceof Double took an average of 1.3 ns

instanceof Number took an average of 1.6 ns

instanceof Serializable took an average of 2.2 ns

注意:如果我改变

if (d instanceof Double)

if (d != null && d.getClass() == Double.class)

表现是一样的.

java instanceof 原理_java-在现代JVM实现中如何实现instanceof?相关推荐

  1. java开发流程图_Java 详解 JVM 工作原理和流程

    作为一名Java使用者,掌握JVM的体系结构也是必须的. 说起Java,人们首先想到的是Java编程语言,然而事实上,Java是一种技术,它由四方面组成:Java编程语言.Java类文件格式.Java ...

  2. 《Java虚拟机原理图解》5. JVM类加载器机制与类加载过程

    参考网址:http://blog.csdn.net/luanlouis/article/details/50529868 0.前言 读完本文,你将了解到: 一.为什么说Jabalpur语言是跨平台的 ...

  3. java锁原理_Java锁原理学习

    Java锁原理学习 为了学习Java锁的原理,参照ReentrantLock实现了自己的可重入锁,代码如下: 先上AQS的相关方法: // AQS = AbstractQueuedSynchroniz ...

  4. java synchronized 原理_Java Synchronized的原理

    我们先通过反编译下面的代码来看看Synchronized是如何实现对代码块进行同步的: public classSynchronizedDemo{public voidmethod(){synchro ...

  5. java 静态绑定原理_Java方法的静态绑定与动态绑定讲解

    一:绑定 把一个方法与其所在的类/对象 关联起来叫做方法的绑定.绑定分为静态绑定(前期绑定)和动态绑定(后期绑定). 二:静态绑定 静态绑定(前期绑定)是指:在程序运行前就已经知道方法是属于那个类的, ...

  6. java cas原理_Java并发之原子变量及CAS算法-上篇

    Java并发之原子变量及CAS算法-上篇 编辑 ​ 概述 本文主要讲在Java并发编程的时候,如果保证变量的原子性,在JDK提供的类中是怎么保证变量原子性的呢?.对应Java中的包是:java.uti ...

  7. java序列化原理_Java序列化机制和原理

    Java序列化算法透析 Serialization(序列化)是一种将对象以一连串的字节描述的过程:反序列化deserialization是一种将这些字节重建成一个对象的过程.Java序列化API提供一 ...

  8. java写值日表_Java知识之JVM

    类加载器 类装载器ClassLaoder负责加载class文件,class文件开头有特定的文件标识,将class文件字节码内容加载到内存中,并将这些内容转换成方法区中的运行时数据结构,并且ClassL ...

  9. java treeset原理_Java集合 --- TreeSet底层实现和原理(源码解析)

    概述 文章的内容基于JDK1.7进行分析,之所以选用这个版本,是因为1.8的有些类做了改动,增加了阅读的难度,虽然是1.7,但是对于1.8做了重大改动的内容,文章也会进行说明. TreeSet实现了S ...

最新文章

  1. 17日南土所蒋瑀霁报告:红壤团聚体尺度养分转化的生物学过程(线虫-微生物互作机制)...
  2. 用友服务器整体迁移--数据库附加
  3. 第23天学习Java的笔记-抽象类
  4. 【忘川风华录】雅社——公会社交系统交互设计思考
  5. 认识控制台-控制台句柄、附着到控制台、关闭控制台
  6. “5G 时代,手机或被淘汰”
  7. ASP.NET MVC5总结(二)@HTML扩展
  8. Ubuntu安装最新版nodejs
  9. Java基础入门(八)之面向对象二
  10. 优启通制作系统u盘_优启通 v3.6.2020.0620 VIP版/免费版-好用的U盘启动盘制作工具...
  11. matlab 平滑曲线连接_Matlab的5个控制类工具箱介绍
  12. 计算机中丢失msvcr100.dll怎么办,msvcr100.dll
  13. android允许应用在后台弹出界面,Android部分手机“后台弹出界面权限”解决方案...
  14. C语言将图片转化成Base64码
  15. javaScript系列 [06]-javaScript和this
  16. android subscriber 自定义,android – 使用自定义ErrorHandler时,Retrofit不会触发onError
  17. 深圳IT外包公司名单汇总
  18. 橙仕汽车——双排mini卡
  19. 智能手机全球普及率今年有望达到63%
  20. 分子动力学模拟之SETTLE约束算法

热门文章

  1. android 找不到符号 符号 RequiresApi
  2. 前端要懂mysql_【灵魂拷问】你真的懂得Mysql的管理和使用吗?
  3. calendar当前时间整点_时间处理相关类
  4. aps是什么意思_全画幅大还是中画幅大? 为什么说底大一级压死人
  5. android手机变微软手机号码,手机居然变平板?微软沦落到抄袭5年前安卓设计
  6. python stm32f401_NUCLEO-F401RE(STM32F401RE)开发板跑Micropython平台
  7. Linux下yum安装nginx教程
  8. vi vim常用命令
  9. -heap 查看当前jvm堆栈信息_必知必会的JVM工具系列二,读懂会用jhat,jstack,jstatd,JConsole...
  10. 宿松长铺程集高中2021年高考成绩查询,2017宿松程集中学录取分数线(附2017高考成绩喜报)...