On Wed, 18 Jan 2023 14:15:17 GMT, Uwe Schindler <uschind...@openjdk.org> wrote:

> As one dealing with bitsets very often: In my opinion, adding this to bitset 
> adds too much overhead on the hot methods like set/clear methods. Especially 
> loops that populate a BitSet with values, I am not sure if the whole loop can 
> be vectorized by Hotspot after this patch.
> 
> From my experience with Apache Lucene it has been shown, that you use bitsets 
> often to track existence/not existence in very hot loops. Calling 
> cardinality() is done only after you have build the bitset and before you use 
> it in a read-only way.
> 
> I know there are other usages patterns, but also code using BitSet as a 
> compact `Set<Integer>` does not need cardinality information.
> 
> I also have a comment about the code: There is an assert-only method called 
> `checkInvariants()` that is executed after all bulk operations. This one 
> should also check the cardinality fits the current words. This is especially 
> important after those crazy methods that intersect bitsets and have special 
> handling of first/last word.

I have already added a condition that asserts 0 <= cardinality <= length().

In my personal experience, I used BitSet for implementing a set of candidates 
for a sudoku solver, and the call to cardinality is needed often, and obviously 
is not read-only, since some candidates can be removed after the call.

-------------

PR: https://git.openjdk.org/jdk/pull/11837

Reply via email to