java和golang性能_Java本质和性能
java和golang性能
最初的问题是如何计算二进制数中1的个数? 我包含了使用Integer.bitCount()的性能比较,该性能可以转换为固有特性,即单个机器代码指令POPCNT和执行相同功能的Java代码。
题
如何计算二进制数中1的个数?
假设我有数字45,它等于二进制数101101,其中有4 1。 编写算法来执行此操作的最有效方法是什么?
回答
与其编写算法来执行此操作,不如使用内置函数。 Integer.bitCount()
使之特别有效的原因是JVM可以将其视为内部函数。 即在支持它的平台(例如Intel / AMD)上用单个机器代码指令识别并替换整个事物
演示此优化的有效性
public static void main(String... args) {perfTestIntrinsic();perfTestACopy();
}private static void perfTestIntrinsic() {long start = System.nanoTime();long countBits = 0;for (int i = 0; i < Integer.MAX_VALUE; i++)countBits += Integer.bitCount(i);long time = System.nanoTime() - start;System.out.printf("Intrinsic: Each bit count took %.1f ns, countBits=%d%n", (double) time / Integer.MAX_VALUE, countBits);
}private static void perfTestACopy() {long start2 = System.nanoTime();long countBits2 = 0;for (int i = 0; i < Integer.MAX_VALUE; i++)countBits2 += myBitCount(i);long time2 = System.nanoTime() - start2;System.out.printf("Copy of same code: Each bit count took %.1f ns, countBits=%d%n", (double) time2 / Integer.MAX_VALUE, countBits2);
}// Copied from Integer.bitCount()
public static int myBitCount(int i) {// HD, Figure 5-2i = i - ((i >>> 1) & 0x55555555);i = (i & 0x33333333) + ((i >>> 2) & 0x33333333);i = (i + (i >>> 4)) & 0x0f0f0f0f;i = i + (i >>> 8);i = i + (i >>> 16);return i & 0x3f;
}
版画
Intrinsic: Each bit count took 0.4 ns, countBits=33285996513
Copy of same code: Each bit count took 2.4 ns, countBits=33285996513
使用固有版本和循环的每个位数平均仅需要0.4纳秒。 使用相同代码的副本要花费6倍的时间(获得相同的结果)
参考: Vanilla Java博客上来自我们JCG合作伙伴 Peter Lawrey的Java Intrinsics and Performance 。
翻译自: https://www.javacodegeeks.com/2012/11/java-intrinsics-and-performance.html
java和golang性能
java和golang性能_Java本质和性能相关推荐
- java 测试代码效率_JAVA程序的性能测试方法
JAVA程序的性能测试方法 Java 1.5以上都在虚拟机里内建了程序性能跟踪的功能,并提供了Java Profiling API,简称JPA,你可以搜索'java profiling'.Java也提 ...
- java端到端_Java应用程序性能监控:复杂分布式应用程序的端到端性能
java端到端 通过从您的应用程序学习企业APM产品,发现更快,更有效的性能监控. 参加AppDynamics APM导览! 在最复杂和分布式环境中端到端监视Java应用程序性能-专注于业务事务. 自 ...
- java 反射为何耗性能_Java反射的性能成本
在Java中,普遍认为java.reflect API的性能代价很高.旧的Java版本有巨大的性能开销,而新版本似乎使其处于可接受的范围内.但"可接受"到底是什么意思呢? 这是我在 ...
- java的SSPanel类_Java模板引擎性能对比
从Github上翻到对JSP.Thymeleaf 3.Velocity 1.7.Freemarker 2.3.23几款主流模板的性能对比,总体上看,Freemarker.Velocity.JSP在性能 ...
- java反射的性能_java反射的性能问题
java反射效率到底如何,花了点时间,做了一个简单的测试.供大家参考. 测试背景: 1. 测试简单Bean(int,Integer,String)的set方法 2. loop 1亿次 3. 测试代码尽 ...
- java map扩容机制_Java HashMap的原理、扩容机制、以及性能思考
Java HashMap 说明 此文档所介绍的HashMap是基于JDK1.8之后的.此文受到网上很多其他Java生态爱好者文章的影响,写此文的目的是系统的概括下HashMap,并把一些优秀文章的脉络 ...
- java dump分析工具_java性能分析与常用工具
本次源码已放在Github:https://github.com/nateshao/jvm-tuning 个人博客 https://nateshao.gitee.io http://www.nates ...
- java 脚本引擎性能_Java SE 6 入门之脚本引擎加大程序性能
Java SE 6 入门之脚本引擎加大程序性能 Java SE 6较Java SE5有了很大的改进,它的性能更强,而且是专为Vista所设计,这就象征着Java SE 6将是Vista上的最佳抉择.而 ...
- hashset java 键值对_Java中的各个容器的性能对比
java中个个容器的属性,性能,参数对比: Java容器的性能及属性的对比 List:Vector,ArrayList,LinkedList Vector:内部是数组数据结构,可以理解为加锁的Arra ...
最新文章
- vs2008 常用快捷键
- 洛谷—— P1605 迷宫
- VS2012下安装配置OpenCV2.4.9的方法
- python正则表达式面试题_吐血总结!50道Python面试题集锦(4)
- 理论基础 —— 索引
- 2011年最后一小时
- opencv-api drawContours
- android 拖动按钮
- MySQL进阶之SQL优化
- 设计一个递归算法由二叉树BT复制产生另一棵二叉树BT1(假设二叉树采用二叉链存储结构)
- directxsdk 下载地址
- JuiceFS 如何帮助趣头条超大规模 HDFS 降负载
- 以喷管雷诺数,当地大气压及射流有效温度计算所需质量流量,静温
- 音视频开发—抖音GsyVideoPlayer视频底层分析使用
- 简单方法解决火狐浏览器主页被篡改/挟持,主页变成垃圾网站的问题
- 北京的人口、交通和土地利用发展战略: 基于东京都市圈的比较分析
- 机械设备行业专题:摩托车专题-大排量和电动化新兴赛道正在崛起
- Android学习-通知的使用详解
- 2019南昌网络赛 Yukino With Subinterval —— 树套树 或 cbq分治
- C语言变长数组(柔性数组)
热门文章
- 为什么大公司一定要使用DevOps
- Java IO: 字节和字符数组
- 开学一月,可以自己玩自己做的游戏了!!!
- javaWeb服务详解(含源代码,测试通过,注释) ——applicationContext-dao.xml
- 学生上课睡觉班主任怎么处理_【师问师答】学生上课说话,点名批评还嘴怎么办?...
- echarts line 去掉最外围方框_干货 | 关于射频芯片最详细解读
- (转)es 聚合查询并返回每个组的数据
- linux-basic(11)认识和学习bash
- getParameterValues用法
- Servlet其他关联类---ServletConfig类