java系统优化中的位操作优化

本博客来自我的新书《Java系统性能优化》的第四章15节,也欢迎阅读我的的经典书 《Spring Boot 2 精髓 》

4.15 位运算

Java位运算非常高效,可以使用位运算代替部分算数运算以提高性能,比如,最常用的判断奇数

1int a = 111; 2System.out.print((a & 1)==1);

乘以2或者除以2,也可以使用位运算

1int a = 111; 2//右移1位,相当于除以2 3System.out.println(a>>1); 4//左移1位,相当于乘以2 5System.out.println(a<<1);

在JAVA8的Integer里,也使用了位运算来实现int转字符串。

1//r=i-q*10 优化为如下 2r = i - ((q << 3) + (q << 1)); 3//q=i/10,优化为如下 4q = (i * 52429) >>> (16+3); 5

这里(i * 52429) >>> (16+3) 相当于i*0.1000000003,因此对于i较小的数据,可以认为俩着是相等的。

对比直接使用i/10 和 (i * 52429) >>> (16+3),性能如下

1Benchmark Mode Samples Score Score error Units 2c.i.c.c.BitTest2.bit avgt 5 0.669 0.031 ns/op 3c.i.c.c.BitTest2.general avgt 5 1.251 0.560 ns/op
点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

Java日期时间API系列31

  时间戳是指格林威治时间1970年01月01日00时00分00秒起至现在的总毫秒数,是所有时间的基础,其他时间可以通过时间戳转换得到。Java中本来已经有相关获取时间戳的方法,Java8后增加新的类Instant等专用于处理时间戳问题。 1获取时间戳的方法和性能对比1.1获取时间戳方法Java8以前

Opencv中Mat矩阵相乘——点乘、dot、mul运算详解

Opencv中Mat矩阵相乘——点乘、dot、mul运算详解2016年09月02日00:00:36 \牧野(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fme.csdn.net%2Fdcrmg) 阅读数:59593

4.22 错误优化策略

本博客来自我的新书Java系统性能优化(暂定名),也欢迎阅读我的新书《SpringBoot2精髓》(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fwww.kancloud.cn%2Fxiandafu%2Fspringboot2inpractice%2F"《Spring