在Java里面使用instanceof的性能影响
问题:在Java里面使用instanceof的性能影响
我正在写一个应用程序,其中一种设计方案包含了instanceof操作的大量使用。虽然我知道面向对象设计通常试图避免使用instanceof,但那是另一回事了,这个问题纯粹只是讨论与性能有关。我想知道这是否会对性能产生任何影响?它和 ==一样快速吗?
例如,我有一个有10个子类的父类。在接受父类作为参数的单个函数中,我检查这个类是否是子类的实例,并执行一些程序。
我想到的解决它的另一种方法是使用一个“type id”原始整型代替,并使用掩码表示子类的类别,然后只让子类“type id”和一个常量掩码做一次掩码的比较,比较的结果就用来表示类别。
instanceof是否被JVM优化到比这更快?我想坚持使用Java,但是这个应用程序的性能是至关重要。如果以前有过类似经历的人能提供一些建议,那就太棒啦。我是不是太挑剔了,或者说把注意力放在优化错误的东西上面了?
回答
现代的JVM/JIT编译器已经消除了大多数传统的“慢”操作(包括实例化、异常处理、反射等。)产生的性能影响。
正如Donald Knuth所写,“我们应该忘记小的效率问题,可以说大约97%的情况下:过早的优化是万恶之源。”instanceof的性能可能还没有成为一个问题,所以不要浪费时间去想一些复杂的解决方案,除非你确定这已经出现问题了。
文章翻译自Stack Overflow:https://stackoverflow.com/questions/103564/the-performance-impact-of-using-instanceof-in-java
在Java里面使用instanceof的性能影响相关推荐
- 在Java中使用instanceof的性能影响
本文翻译自:The performance impact of using instanceof in Java I am working on an application and one desi ...
- java instanceof性能差_在J中使用instanceof的性能影响
在J中使用instanceof的性能影响 我正在开发一个应用程序,一种设计方法涉及到instanceof运算符的极大使用. 虽然我知道OO设计通常会试图避免使用instanceof,但这是一个不同的故 ...
- java overdata_使用try-catch over条件来安全地设置值,并在java中以最小的性能影响...
在这里,我的主要目标是安全地设置值,而不会产生性能(速度,内存,CPU等)影响. 我有一个愚蠢的选择(坏的风格)也在下面提到. 那么,最好的方法是什么? 选项1? 选项2? 还是另一个? 选项1 : ...
- 英特尔发现Spectre和Meltdown 补丁对性能影响程度为0-21%
\ 看新闻很累?看技术新闻更累?试试下载InfoQ手机客户端,每天上下班路上听新闻,有趣还有料! \ \\ 微软.红帽(Red Hat)和英特尔一起发布了Meltdown和Spectre补丁对各种系统 ...
- java split()方法_Java编程性能优化一些事儿
点击上方 "程序员小乐"关注, 星标或置顶一起成长 每天凌晨00点00分, 第一时间与你相约 每日英文 Smile and stop complaining about the t ...
- JAVA的字符串拼接与性能
概述:本文主要研究的是JAVA的字符串拼接的性能,原文中的测试代码在功能上并不等价,导致concat的测试意义不大.不过原作者在评论栏给了新的concat结果,如果有兴趣的同学建议自己修改代码测试. ...
- 【读书笔记】实战JAVA虚拟机JVM故障诊断与性能优化 读书笔记
文章目录 1.概述 1.1 **第一章:初探java虚拟机** 1.2 认识java虚拟机的基本结构 1.3 常用Java虚拟机参数 1.4 垃圾回收器 1.5 垃圾收集器以及内存分配 1.6 性能监 ...
- 老李分享:《Java Performance》笔记1——性能分析基础
老李分享:<Java Performance>笔记1--性能分析基础 1.性能分析两种方法: (1).自顶向下: 应用开发人员通过着眼于软件栈顶层的应用,从上往下寻找性能优化的机会. (2 ...
- 一起谈.NET技术,.Net Discovery系列之-深入理解平台机制与性能影响 (中)
上一篇文章中Aicken为大家介绍了.Net平台的垃圾回收机制与其对性能的影响,这一篇中将继续为大家介绍.Net平台的另一批黑马-JIT.有关JIT的机制分析 ● 机制分析以C#为例,在C#代码运行前 ...
最新文章
- window.open详解
- Win10的64位操作系统,Visual Studio 2019配置OpenCV4.1.0
- bouml 逆向分析c++_JS逆向之漫画柜
- dbscan论文_论文分享 :Linkage Based Face Clustering via GCN
- LeetCode 837. 新21点(动态规划)
- 简单选择排序算法 (JAVA)
- 将Windows8或WindowsServer2012装在VHD上
- 智慧警务三维PGIS及一标三实采集、展示平台
- java根据经纬度计算距离
- 银行如何构建反欺诈模型
- 地图制图基础(四):制图意识
- python编的俄罗斯方块游戏_Python编写俄罗斯方块小游戏
- 神器推荐:应用之星,零代码就能制作炫酷的H5页面
- kinova_j2s6s300【Cartesian position control Finger position control】
- [硬件]导热垫(Thermal Pad)和导热过孔(Via for thermal pad)
- 总结吴恩达 ChatGPT Prompt 免费课程
- syslog与syslog服务器的配置
- 网页版式设计与平面构图
- DDR4之地址空间、颗粒容量、page size计算
- Luca Canali