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性能

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

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

相关文章

开源GIS库GDAL/GEOS在Windows下的编译与 Codeblocks配置

最近在研究开源GIS库GDAL&#xff0c;我是采用自己下载源码编译的方式&#xff0c;主要进行以下几个步骤&#xff1a; 编译GEOS&#xff0c;参考自GEOS的wiki 下载GEOS源代码&#xff0c;目前的版本为3.5.0&#xff0c;解压到C盘根目录。打开VS2012自带的命令行工具 进入geo…

Java中.setvalue(-1)_Java State.setValue方法代碼示例

本文整理匯總了Java中org.eclipse.core.commands.State.setValue方法的典型用法代碼示例。如果您正苦於以下問題&#xff1a;Java State.setValue方法的具體用法&#xff1f;Java State.setValue怎麽用&#xff1f;Java State.setValue使用的例子&#xff1f;那麽恭喜您, 這裏精…

使用自定义线程池处理并行数据库流

并行数据库流 在我以前的文章中 &#xff0c;我写了关于使用并行流和Speedment并行处理数据库内容的信息。 在许多情况下&#xff0c;并行流可能比通常的顺序数据库流快得多。 线程池 Speedment是一个开源的Stream ORM Java工具包和Runtime Java工具&#xff0c;它将现有的数…

GDAL编译Windows平台下64位的方式

最近写的项目需要在64位的服务器上&#xff0c;结果32位下编译的不能用&#xff0c;只好重新编译一套64位的。在编译GDAL时&#xff0c;出现了连接错误&#xff0c;如下&#xff1a; LINK : error LNK2001: unresolved external symbol > _OCTNewCoordinateTransformation a…

CentOS7.x以上版本配置DNS失效解决办法

这2周做实验&#xff0c;centos7.x经常出现yum安装软件包的时候找不到解析地址&#xff0c;提示如下错误 正在尝试其它镜像。Error downloading packages: pam-devel-1.1.8-22.el7.x86_64: [Errno 256] No more mirrors to try. libcom_err-1.42.9-12.el7_5.x86_64: [Errno 256…

java slf4j日志级别_java - 在slf4j中设置运行时消息的日志级别 - 堆栈内存溢出

>>#1 票数&#xff1a;41 已采纳使用slf4j无法做到这slf4j 。我想&#xff0c;缺少这个功能的原因是&#xff0c;几乎不可能为slf4j构建一个Level类型&#xff0c;它可以有效地映射到Facade后面所有可能的日志记录实现中使用的Level (或等效)类型。 或者&#xff0c;设计…

使用Cloudformation集成Spring Boot和EC2

在之前的博客中&#xff0c;我们将Spring Boot应用程序与Elastic beantalk集成在一起。 该应用程序是一个基于Servlet的应用程序&#xff0c;可以响应请求。 在本教程中&#xff0c;我们将部署一个Spring Boot应用程序&#xff0c;该应用程序在ec2实例上执行一些计划的任务。 …

出现$ref的原因及解决方案

$ref的产生原因 &#xff08;1&#xff09;重复引用&#xff1a;一个集合/对象中的多个元素/属性都引用了同一个对象 &#xff08;2&#xff09;循环引用&#xff1a;集合/对象中的多个元素/属性在相互引用导致循环 针对fastjson的处理 fastjson作为一款序列化引擎&#xff0c;…

Wireshark图解教程(简介、抓包、过滤器)

Wireshark是世界上最流行的网络分析工具。这个强大的工具可以捕捉网络中的数据&#xff0c;并为用户提供关于网络和上层协议的各种信息。与很多其他网络工具一样&#xff0c;Wireshark也使用pcap network library来进行封包捕捉。可破解局域网内QQ、邮箱、msn、账号等的密码&am…

php格式书写,PHP书写格式详解(必看)

从一个例子开始。启动编辑器&#xff0c;创建一个php文件并键入如下代码&#xff1a;echo "你好&#xff01;";?>将该文件命名为 test.php 并存储于 E:html 目录下。在浏览器地址栏里访问该 php 文件&#xff1a;http://127.0.0.1/test.php&#xff0c;输出结果如…

java java se_Java SE 11:推动Java前进

java java se介绍 在我看来&#xff0c;这篇文章提出了Java语言应该如何发展成为一种首选语言。 它还提供了一些我喜欢但是有时&#xff08;可能永远不会&#xff09;成为Java的一部分的功能&#xff0c;出于某些原因&#xff0c;我将对此加以解释&#xff0c;这些功能有时我已…

用GDAL/OGR去读shapefile

一、读shapefile 1、首先&#xff0c;用Arcgis创建所要读的shp文件。打开ArcCatalog,右键NEW->Shapefile&#xff0c;名称Name:point &#xff0c;要素类型&#xff08;Feature Type&#xff09;:Point。点击Edit&#xff0c;选择投影类型。 2、打开ArcMap. 单击工具栏里的A…

【日 志】

/// <summary>/// 记录执行sql时的错误日志/// <para>cmdTxt 执行的sql</para>/// <para>inputParams 传入的Hashtable参数</para>/// </summary>private static void LogLastError(string cmdTxt, Hashtable inputParams){try{StringBuil…

php 数组移除指定健,php删除数组指定键的方法

php删除数组指定键的方法&#xff1a;首先创建一个PHP代码示例文件&#xff1b;然后定义一个“array_remove”方法&#xff1b;最后利用“array_key_exists”、“array_search”等函数实现删除数组指定键即可。PHP删除Array数组里指定的key/*** php除数组指定的key值(直接删除k…

Intellij IDEA社区版中的SpringBoot入门

我们可以使用Intellij IDEA社区版来处理SpringBoot应用程序&#xff0c;因为我们不需要配置Tomcat&#xff0c;Wildlfy等服务器&#xff0c;只需运行main&#xff08;&#xff09;方法即可运行应用程序。 但是&#xff0c;Intellij IDEA社区版中没有提供直接创建SpringBoot应用…

SpatialHadoop中空间索引系列之(四)空间格网索引实现

有关空间格网索引原理详见前面章节讲述的内容。这里我们根据SpatialHadoop中具体的实现&#xff0c;来详细讲解下。格网索引是一级索引&#xff0c;格网的个数取决于两个参数&#xff0c;一个是数据集的大小&#xff0c;另外一个就是格网的大小。那么在SpatialHadoop当中&#…

php导入csv文件,php实现CSV文件导入和导出

项目开发中&#xff0c;很多时候要将外部CSV文件导入到数据库中或者将数据导出为CSV文件&#xff0c;那么具体该如何实现呢&#xff1f;本文将使用PHP并结合mysql&#xff0c;实现了CSV格式数据的导入和导出功能。我们先准备mysql数据表&#xff0c;假设项目中有一张记录学生信…

剑指offer-二叉搜索树的后序遍历序列

/*输入一个整数数组&#xff0c;判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。*/ /** 已知条件&#xff1a;后序序列最后一个值为root&#xff1b;二叉搜索树左子树值都比root小&#xff0c;右子树值都…

Nessus漏洞扫描教程之安装Nessus工具

Nessus基础知识 Nessus号称是世界上最流行的漏洞扫描程序&#xff0c;全世界有超过75000个组织在使用它。该工具提供完整的电脑漏洞扫描服务&#xff0c;并随时更新其漏洞数据库。Nessus不同于传统的漏洞扫描软件&#xff0c;Nessus可同时在本机或远端上遥控&#xff0c;进行系…

php强制关机代码,程序员关机代码是什么?

程序员关机代码&#xff1a;1、定时关机&#xff0c;在运行中输入【at 22:00 Shutdown -s】&#xff1b;2、倒计时方式关机&#xff0c;在运行中输入【Shutdown.exe -s -t 3600】&#xff1b;3、自动关机&#xff0c;输入【shutdown -i】。程序员关机代码&#xff1a;1、比如你…