Я использую Scala Enumeration ValueSets с довольно высокой пропускной способностью - создание, тестирование, объединение и пересечение около 10M наборов/second/core. Я не ожидал, что это будет большой проблемой, потому что я где-то читал, что они поддерживаются BitSets, но на удивление ValueSet.isEmpty появился как горячая точка в профилирующем сеансе с YourKit.Scala Enumeration ValueSet.isEmpty slow
Чтобы проверить, я решил попробовать и переопределить то, что мне нужно, используя Java BitSet, пытаясь сохранить некоторую безопасность типов использования Scala Enumerations. (обзор кода переместился на https://codereview.stackexchange.com/questions/74795/scala-bitset-implemented-with-java-bitset-for-use-in-scala-enumerations-to-repl). Хорошая новость заключается в том, что изменение моих наборов ValueSets на эти BitSets действительно отменило 25% моего времени выполнения, поэтому я не знаю, что ValueSet действительно делает под капотом, но его можно улучшить ...
EDIT: просмотр источника ValueSet указывает на то, что isEmpty определенно O (N), реализованный с использованием общего SetLike.isEmpty. Учитывая, что ValueSet реализован с помощью BitSet, это ошибка?
EDIT: Это была обратная трассировка из профилировщика. Это кажется сумасшедшим способом реализации isEmpty на битете.
«Я не знаю, что ValueSet действительно делает под капотом». Источник доступен, если вы хотите взглянуть: https://github.com/scala/scala/blob/v2.11.4/src/library/scala/Enumeration.scala#L1 –
Похоже, у вас есть рабочий код что вы хотите получить обратную связь. Если это так, вы должны перенести свой вопрос на [codereview.se]. В противном случае, пожалуйста, рассмотрите свой вопрос и сделайте реальный вопрос более очевидным - мне потребовалось некоторое время, чтобы даже найти то, о чем вы спрашивали. –
Спасибо, глядя сейчас. До сих пор, похоже, я подтверждал, что нашел в профилировщике (прилагается); ValueSet.isEmpty, по крайней мере, полностью реализуется с помощью общих алгоритмов, пренебрегая тем, что для BitSet это должно быть не более сложным, чем (x == 0). – experquisite