code: private static String factorizeFullness(long bitmapCardinality, long numRows)
    {
      if (bitmapCardinality == 0) {
        return "0";
      } else if (bitmapCardinality == numRows) {
        return "1";
      } else {
        double fullness = bitmapCardinality / (double) numRows;
        int index = Arrays.binarySearch(BITMAP_FULLNESS_FACTORIZATION_STOPS, fullness);
        if (index < 0) {
          index = ~index;
        }
        return FACTORIZED_FULLNESS[index];
      }
    }
docs: Processing of queries with BitmapOffsets, whose Bitmaps has different factorized fullness (bucket), reported from
  this method, uses different copies of the same code, so JIT compiler analyzes and compiles the code for different
  factorized fullness separately. The goal is to capture frequency of abstraction usage in compressed bitmap
  algorithms, i. e.
  - "Zero sequence" vs. "Literal" vs. "One sequence" in {@link org.apache.druid.extendedset.intset.ImmutableConciseSet}
  - {@link org.roaringbitmap.ArrayContainer} vs {@link org.roaringbitmap.BitmapContainer} in Roaring
  and then https://shipilev.net/blog/2015/black-magic-method-dispatch/ comes into play. The secondary goal is to
  capture HotSpot's thresholds, which it uses to compile conditional blocks differently inside bitmap impls. See
  https://bugs.openjdk.java.net/browse/JDK-6743900. The default BlockLayoutMinDiamondPercentage=20, i. e. if
  probability of taking some branch is less than 20%, it is moved out of the hot path (to save some icache?).
  
  On the other hand, we don't want to factor fullness into too small pieces, because
  - too little queries may fall into those small buckets, and they are not compiled with Hotspot's C2 compiler
  - if there are a lot of queries for each small factorized fullness and their copies of the code is compiled by
  C2, this pollutes code cache and takes time to perform too many compilations, while some of them likely produce
  identical code.
  
  Ideally there should be as much buckets as possible as long as Hotspot's C2 output for each bucket is different.