It is more to see the impact in the result of profiling. DevNullColumnReader.readInteger() shows disproportionate high times while profiling but I suspect it is an artifact of JIT compilation messing up profiling. I'm currently thinking of decoupling those three, remove the read() method in MemColumnReader and just call the individual 3 columns as needed in the RecordReader. The compiled FSA would not call the columns at all when the max level is 0.