Сборка мусора разработана таким образом, что, когда у вас заканчивается процесс памяти, он попытается освободить больше памяти, если это возможно. Так что в большинстве случаев, если у вас заканчивается память, этого не произойдет, потому что JVM вызывала не сборщик мусора, а потому, что вы действительно используете слишком много памяти.
В вашем случае вы читаете весь файл с первой строки в память. После этого вы создаете входной поток из байтов вашего файла в памяти и обрабатывает байты.
Возможно, вам больше подойдет использование FileInputStream
напрямую для потоковой передачи байтов из файла и их обработки вместо того, чтобы сначала кэшировать полный файл в String
.