java - 优化Long.bitCount

我有一个对long.bitcount()进行大量调用的程序,它太多了,在一个CPU核心上占用了33%的周期。有没有比Sun JDK版本更快的方法来实现它?
我尝试过:
(我认为这正是JDK实现它的方式)
28到222之间的各种大小的查找表(一次查看几个位并添加结果)
但是,我做不到比一个216条目的查找表更好的了,它有一个手动展开的循环(大约27%的CPU)。
这又如何为Java优化呢?
注意:这个问题是关于Java特定的优化,但是This algorithm还有很多其他算法。

最佳答案

如果您使用的是最新的x86 CPU,则有一条关于此的指令,即popcnt。
在Java的最新版本中,龙.BITCONTUTE()使用此指令。
仅使用-xx:+usePopCountInstruction(这是最新版本中的默认值)
但是,在JRE 6.0_18到7.0_5中有一些错误:
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7063674

本文翻译自 https://stackoverflow.com/questions/4839128/

网站遵循 CC BY-SA 4.0 协议,转载或引用请注明出处。

标签 java optimization bit-manipulation hammingweight


相关文章:

java - 在Java中创建类的实例?

c++ - 使用只读变量的性能与直接存储在对象中的性能直接不同吗?

python - 优化对大量数据的搜索和插入操作

java - Java-按位比较和位移

python - 位操作给出错误的输出

java - Arrays.sort()会增加时间复杂度和时空复杂度吗?

eclipse - m2eclipse无法找到C:\ Program Files \ Java \ jre6 \ .. \ lib \ tools.jar

c# - 将方法变量作为参数进行代码优化

java - 将一位插入字节数组

java - 如何将我的java程序转换为linux上的命令行实用程序?