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本质和性能相关推荐

  1. java 测试代码效率_JAVA程序的性能测试方法

    JAVA程序的性能测试方法 Java 1.5以上都在虚拟机里内建了程序性能跟踪的功能,并提供了Java Profiling API,简称JPA,你可以搜索'java profiling'.Java也提 ...

  2. java端到端_Java应用程序性能监控:复杂分布式应用程序的端到端性能

    java端到端 通过从您的应用程序学习企业APM产品,发现更快,更有效的性能监控. 参加AppDynamics APM导览! 在最复杂和分布式环境中端到端监视Java应用程序性能-专注于业务事务. 自 ...

  3. java 反射为何耗性能_Java反射的性能成本

    在Java中,普遍认为java.reflect API的性能代价很高.旧的Java版本有巨大的性能开销,而新版本似乎使其处于可接受的范围内.但"可接受"到底是什么意思呢? 这是我在 ...

  4. java的SSPanel类_Java模板引擎性能对比

    从Github上翻到对JSP.Thymeleaf 3.Velocity 1.7.Freemarker 2.3.23几款主流模板的性能对比,总体上看,Freemarker.Velocity.JSP在性能 ...

  5. java反射的性能_java反射的性能问题

    java反射效率到底如何,花了点时间,做了一个简单的测试.供大家参考. 测试背景: 1. 测试简单Bean(int,Integer,String)的set方法 2. loop 1亿次 3. 测试代码尽 ...

  6. java map扩容机制_Java HashMap的原理、扩容机制、以及性能思考

    Java HashMap 说明 此文档所介绍的HashMap是基于JDK1.8之后的.此文受到网上很多其他Java生态爱好者文章的影响,写此文的目的是系统的概括下HashMap,并把一些优秀文章的脉络 ...

  7. java dump分析工具_java性能分析与常用工具

    本次源码已放在Github:https://github.com/nateshao/jvm-tuning 个人博客 https://nateshao.gitee.io http://www.nates ...

  8. java 脚本引擎性能_Java SE 6 入门之脚本引擎加大程序性能

    Java SE 6 入门之脚本引擎加大程序性能 Java SE 6较Java SE5有了很大的改进,它的性能更强,而且是专为Vista所设计,这就象征着Java SE 6将是Vista上的最佳抉择.而 ...

  9. hashset java 键值对_Java中的各个容器的性能对比

    java中个个容器的属性,性能,参数对比: Java容器的性能及属性的对比 List:Vector,ArrayList,LinkedList Vector:内部是数组数据结构,可以理解为加锁的Arra ...

最新文章

  1. vs2008 常用快捷键
  2. 洛谷—— P1605 迷宫
  3. VS2012下安装配置OpenCV2.4.9的方法
  4. python正则表达式面试题_吐血总结!50道Python面试题集锦(4)
  5. 理论基础 —— 索引
  6. 2011年最后一小时
  7. opencv-api drawContours
  8. android 拖动按钮
  9. MySQL进阶之SQL优化
  10. 设计一个递归算法由二叉树BT复制产生另一棵二叉树BT1(假设二叉树采用二叉链存储结构)
  11. directxsdk 下载地址
  12. JuiceFS 如何帮助趣头条超大规模 HDFS 降负载
  13. 以喷管雷诺数,当地大气压及射流有效温度计算所需质量流量,静温
  14. 音视频开发—抖音GsyVideoPlayer视频底层分析使用
  15. 简单方法解决火狐浏览器主页被篡改/挟持,主页变成垃圾网站的问题
  16. 北京的人口、交通和土地利用发展战略: 基于东京都市圈的比较分析
  17. 机械设备行业专题:摩托车专题-大排量和电动化新兴赛道正在崛起
  18. Android学习-通知的使用详解
  19. 2019南昌网络赛 Yukino With Subinterval —— 树套树 或 cbq分治
  20. C语言变长数组(柔性数组)

热门文章

  1. 为什么大公司一定要使用DevOps
  2. Java IO: 字节和字符数组
  3. 开学一月,可以自己玩自己做的游戏了!!!
  4. javaWeb服务详解(含源代码,测试通过,注释) ——applicationContext-dao.xml
  5. 学生上课睡觉班主任怎么处理_【师问师答】学生上课说话,点名批评还嘴怎么办?...
  6. echarts line 去掉最外围方框_干货 | 关于射频芯片最详细解读
  7. (转)es 聚合查询并返回每个组的数据
  8. linux-basic(11)认识和学习bash
  9. getParameterValues用法
  10. Servlet其他关联类---ServletConfig类