$ java -Xmx64m LineCount reader big.log reader lines=9,623,347 chars=990,376,717 time=1,288 ms gc=37 collections / 31 ms (-Xmx64 MB) $ java -Xmx64m LineCount scanner big.log scanner lines=9,623,347 chars=990,376,717 time=6,233 ms gc=140 collections / 116 ms (-Xmx64 MB) $ java -Xmx64m LineCount lines big.log lines lines=9,623,347 chars=990,376,717 time=1,179 ms gc=37 collections / 32 ms (-Xmx64 MB) $ java -Xmx64m LineCount readAllLines big.log readAllLines OutOfMemoryError: Java heap space (-Xmx64 MB) How much heap does readAllLines need for this file? $ java -Xmx1g LineCount readAllLines big.log readAllLines OutOfMemoryError: Java heap space (-Xmx1024 MB) $ java -Xmx2g LineCount readAllLines big.log readAllLines lines=9,623,347 chars=990,376,717 time=2,872 ms gc=24 collections / 922 ms (-Xmx2048 MB) $ java -Xmx3g LineCount readAllLines big.log readAllLines lines=9,623,347 chars=990,376,717 time=2,729 ms gc=23 collections / 949 ms (-Xmx3072 MB) $ java -Xmx4g LineCount readAllLines big.log readAllLines lines=9,623,347 chars=990,376,717 time=2,862 ms gc=23 collections / 905 ms (-Xmx4096 MB) And the streaming reader at a tiny heap: $ java -Xmx16m LineCount reader big.log reader lines=9,623,347 chars=990,376,717 time=1,347 ms gc=171 collections / 101 ms (-Xmx16 MB)