allocateNew() in NullableValueVectors allocates extra memory for the validity vector of fixed-width vectors. Instead of doing bits.allocateNew(valueCount + 1), we should simply do bits.allocateNew(valueCount).
AFAIK, the only case where we need an additional valueCount is for the offsetVector and we already do that. Additional valueCount for the validity vector is not needed.
reset() method should call reset() on the underlying value vector as well to re-initialize the state (allocation monitor, reader index etc) and zero out the buffers. Right now we just reset the validity vector.