Se non hai scritto errato ... 20 milioni di record sono tanti, ma proprio TANTI. Assicurati di avere abbastanza heap space sufficiente per la applicazione Java (ad occhio, almeno 1 GByte di heap, se non di più).
Sì. Una classe es .... Record.(detto così, senza sapere meglio il senso, significato, del record)
Sì
Non ho capito il senso del dubbio. Comunque sì, ha senso usare ArrayList.