Я пишу клиентское приложение Swing (дизайнер графических шрифтов) на Java 5. Недавно я столкнулся с ошибкой java.lang.OutOfMemoryError: Java heap space
, потому что я не консервативен в использовании памяти. Пользователь может открывать неограниченное количество файлов, а программа сохраняет открытые объекты в памяти. После быстрого исследования я обнаружил эргономику виртуальной машины Java 5.0 и другие говорят, что на компьютере с Windows максимальный размер кучи JVM по умолчанию равен 64MB
.
Как мне справиться с этим ограничением в этой ситуации?
Я мог бы увеличить максимальный размер кучи с помощью параметра командной строки до java, но для этого потребовалось бы выяснить доступную оперативную память и написать некоторую запускающую программу или скрипт. Кроме того, увеличение до некоторого конечного максимального значения в конечном итоге не устраняет проблему.
Я мог бы переписать часть своего кода, чтобы часто сохранять объекты в файловой системе (использование базы данных - то же самое), чтобы освободить память. Это могло бы сработать, но, вероятно, это тоже много работы.
Если бы вы могли указать мне на подробности вышеупомянутых идей или на некоторые альтернативы, такие как автоматическая виртуальная память, динамическое увеличение размера кучи, это будет здорово.