У меня есть программа, которая производит огромное количество вызовов Long.bitCount(), поэтому многие из них занимают 33% циклов на одном ядре процессора. Есть ли способ реализовать его быстрее, чем версия Sun JDK?
Я пробовал:
- Этот алгоритм (я думаю, именно так JDK его реализует)
- таблицы поиска различных размеров между 2 8 и 2 22 (просмотр нескольких бит за раз и добавление результатов)
Но я не мог сделать ничего лучше, чем таблица поиска 2 16 с ручным разворачиванием (около 27% CPU).
Как еще это можно оптимизировать для Java?
Примечание: этот вопрос касается оптимизации, специфичной для Java, но этот аналогичный (язык-агностический) вопрос содержит много других алгоритмов.