code: public void releaseCache() {
          if (originalThunks != null) {
              // OPTIMIZATION:
              // Rather than use the standard iterator, which creates lots of int[] arrays on the heap, which need to be GC'd,
              // we use the fast version that just mutates one array. Since this is read once for us here, this is ideal.
              Iterator<int[]> fastPassByReferenceIterator = fastPassByReferenceIterator();
              int[] assignment = fastPassByReferenceIterator.next();
              while (true) {
                  setAssignmentValue(assignment, originalThunks.getAssignmentValue(assignment));
  
                  // Set the assignment arrays correctly
                  if (fastPassByReferenceIterator.hasNext()) fastPassByReferenceIterator.next();
                  else break;
              }
              // Release our replicated set of original thunks
              originalThunks = null;
          }
      }
docs: This will release references to the cached ConcatVectors created by cacheVectors(), so that they can be cleaned
  up by the GC. If no cache was constructed, this is a no-op.