Java本质和性能

最初的问题是如何计算二进制数中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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/370961.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

spring RequestMapping 包含http的部分以及各部分详解

RequestMapping有四个参数&#xff0c;分别为&#xff1a;1、value&#xff1a;表示请求URL2、method&#xff1a;表示请求方法3、params&#xff1a;表示请求参数4、headers&#xff1a;表示请求头 【例如】&#xff1a;RequestMapping(value"/testRequestMapping",…

【ZBH选讲·拍照】

【问题描述】 假设这是一个二次元。LYK召集了n个小伙伴一起来拍照。他们分别有自己的身高Hi和宽度Wi。为了放下这个照片并且每个小伙伴都完整的露出来&#xff0c;必须需要一个宽度为ΣWi&#xff0c;长度为max{Hi}的相框。&#xff08;因为不能叠罗汉&#xff09;。LYK为了节省…

php基础是什么,php基础学什么?

有不少同学想要学习 PHP&#xff0c;但又不清楚 PHP 基础学什么&#xff0c;那么这篇文章告诉你。熟悉前端开发语言学习 PHP 之前&#xff0c;首先要学习前端语言包括 HTML、CSS、JS 等。等对前端语言有个大致掌握后&#xff0c;能编写一个 web 静态页面。学习 PHP 基本语法和函…

名为 cursor_jinserted 的游标不存在_生鲜电商存在的问题及对策解析:未来生鲜电商如何发展?...

生鲜电商的特点有哪些&#xff1f;生鲜电商特点&#xff1a;1,生鲜电商具有粘性高、重复购买率高、毛利高的“三高”特性&#xff1b;2,生鲜食品需要保鲜、冷藏、冷冻&#xff1b;3,生鲜食品保质期比较短&#xff1b;保存不易、对物流配送的条件要求极高&#xff1b;4,生鲜商品…

遇到短信轰炸,别人换ip调你的短信接口怎么办

前端开发者很容易暴露自己的请求地址和参数&#xff0c;我们都知道&#xff0c;一个h5页面&#xff0c;按 F12 是可以看到页面的源码的&#xff0c;所以经常很多人会利用这一点恶意调取别人的接口。 我们公司出现了好多次短信接口被大量调用&#xff0c;导致一天发了几万条短信…

UVa 10170 - The Hotel with Infinite Rooms

题目&#xff1a;求从s開始的递增序列&#xff08;每次加1&#xff09;。求出他们加和不小于D的那个最后的加数。 分析&#xff1a;数学题。分治。s s1 ... n n*&#xff08;n1&#xff09;/2 - s*&#xff08;s-1&#xff09;/2 &#xff08;ns&#xff09;*&#xff08;…

番石榴函数和Java 8 Lambdas

我最近阅读了Brian Goetz的《 Lambda的状况》 &#xff0c;在阅读了该文章之后&#xff0c;我想尝试使用Java 8 Lambda表达式。 Brian在他的文章中继续描述了将一种方法称为“功能”接口的接口。 功能接口几乎总是用作匿名类&#xff0c;其中ActionListener是规范示例。 这些“…

linux rsync删文件速度,为什么用rsync删除大量文件的时候比用rm快

为什么用rsync删除大量文件的时候比用rm快今天研究怎么在Linux下快速删除大量文件&#xff0c;搜到很多人都说可以用rsync来删除大量文件&#xff0c;速度比rm要快很多&#xff0c;但是没有人说为什么&#xff0c;仔细研究了一下原因&#xff0c;总结起来大概就是&#xff0c;一…

关于源码,反码,补码(正数--负数)---------(-128)自己的理解

以一个字节为例 1、无符号位&#xff0c;一个字节可以存放0~255共256个数字&#xff1b;有符号位存放-128~127共256个数字&#xff1b; 2、无符号全都表示为正数&#xff1b;有符号位则首位表示正负数&#xff0c;正数首位为0&#xff0c;负数首位为1&#xff08;因此在判断一个…

英特尔x722网卡驱动_产品详情 | 从核心到边缘,英特尔加速5G网络基础设施建设...

英特尔近期宣布推出无可比拟的5G基础设施芯片产品组合&#xff0c;包括一款面向无线基站的10纳米片上系统(SoC)英特尔凌动P5900&#xff0c;和一款面向5G网络处理的结构化ASIC&#xff0c;一款针对5G网络优化、提供基于GPS的高精度网络服务同步功能的以太网适配器。此外&#x…

canvas离屏技术与放大镜实现

教程所示图片使用的是 github 仓库图片&#xff0c;网速过慢的朋友请移步>>> &#xff08;原文&#xff09;canvas 离屏技术与放大镜实现。 更多讨论或者错误提交&#xff0c;也请移步。 利用canvas除了可以实现滤镜&#xff0c;还可以利用离屏技术放大镜功能。为了方…

虚拟机下安装ubuntu后root密码设置

问题描述&#xff1a; 在虚拟机下安装了ubuntu中要输入用户名&#xff0c;一般情况下大家都会输入一个自己的网名或绰号之类的&#xff0c;密码也在这时设置过了。 但是当安装成功之后&#xff0c;使用命令#su root&#xff0c;然后输入刚才设置的密码&#xff0c;发现密码错误…

使用Ajax的Spring MVC REST调用

这篇文章提供了对Spring MVC Web应用程序的REST调用的简单示例。 它基于在Spring MVC上下文示例中使用Spring MVC服务静态资源和使用Ajax获取JSON 。 该代码可在GitHub的Spring-REST-With-Ajax目录中找到。 主页 我们的主页包含与执行Ajax调用的Javascript函数链接的四个按钮…

团队作业—预则立他山之石

团队作业—预则立&&他山之石 Deadline: 2017.10.24 22:00pm 作业要求 一、确立团队选题&#xff0c;建立和初步熟悉团队git的协作方式。项目后续的代码、文档都要通过github增量式管理。实现文档的版本化和增量式管理。 二、初步确立团队任务计划&#xff0c;将团队的任…

linux7系统如何配置网卡,Linux 7 配置网卡(nmcli)

操作系统版本&#xff1a;[rootcjcos01 network-scripts]# cat /etc/redhat-releaseRed Hat Enterprise Linux Server release 7.5 (Maipo)查看网卡、IP等信息&#xff1a;[rootcjcos01 ~]# ifconfigenp0s3: flags4163 mtu 1500inet 192.168.1.90 netmask 255.255.255.0 bro…

学以致用深入浅出数字信号处理 pdf_数字阵列雷达--相控阵专题讲座之三

数字阵列雷达-相控阵专题讲座之三https://www.zhihu.com/video/1218562626877583360从名词上看&#xff0c;数字阵列雷达&#xff0c;肯定是阵列雷达了&#xff0c;那么数字阵列与传统的相控阵雷达又有什么区别呢&#xff1f;传统的相控阵雷达&#xff0c;是依靠移相器、衰减器…

Ubuntu中右击出现终端

1 root用户 $sudo apt-get install nautilus-open-terminal 2重启 3ok 转载于:https://www.cnblogs.com/lanjianhappy/p/6761599.html

MapReduce:处理数据密集型文本处理–局部聚合第二部分

这篇文章继续进行有关使用MapReduce进行数据密集型处理的书中实现算法的系列文章。 第一部分可以在这里找到。 在上一篇文章中&#xff0c;我们讨论了使用本地聚合技术来减少通过网络进行混洗和传输的数据量的方法。 减少传输的数据量是提高MapReduce作业效率的主要方法之一。 …

python爬虫需要什么知识-学习Python爬虫技术,需要掌握哪些web端的知识?

HTML5&#xff1a;html概述和基本结构、html标题标签、html段落标签、换行标签、块标签、图片标签、a链接标签、列表标签、表格、表单、页面布局等。 CSS3&#xff1a;CSS基本语法和页面引用、CSS文本设置、颜色表示法、CSS选择器、盒子模型、盒子模型实际尺寸、浮动、四大定位…

UDP学习总结

1、UDP的优势是什么&#xff1f;有哪些典型的应用是使用UDP的&#xff1f;为什么&#xff1f; 2、转载于:https://www.cnblogs.com/zhouhaibing/p/7669251.html