I believe it's just the DFA. The construction of it is also the only place in the ANTLR4 C++ runtime where we use a lock to serialize access (the DFA is shared between all instance of a particular parser/lexer class). See also the adaptivePredict function in the ATNSimulator classes (there's one for parsers and for lexers). This function does the lookahead and creates the DFA cache on the way.
Note: there are DFASerializer and LexerDFASerializer classes, which however only create string expressions of the DFA, for human consumption. But they could perhaps serve as starting point - at least for the serialization functionality.