Из ваших комментариев кажется, что вы перебираете некоторые объекты, которые заполняют StringBuffer, и, когда вы закончите перебора, вы сбрасываете весь StringBuffer в файл.Вместо этого вы можете либо записывать напрямую в выходной поток на каждой итерации (рекомендуется), либо на каждой итерации записывать в свой StringBuffer, сбрасывать его в выходной поток и затем очищать StringBuffer для следующей итерации (не рекомендуется).Это должно снизить использование памяти.
Я не рекомендую увеличивать размер кучи - это не похоже на правильное решение этой проблемы.