У меня есть приложение swing, которое работает в CSV-файле. Он читает полный файл по строкам, вычисляет некоторые требуемые статистические данные и выводит результат. Верхняя часть экрана вывода показывает каждую запись из файла в этом порядке в JTable, тогда как нижняя часть показывает статистику, вычисленную на основе этих данных. Проблема в том, что JVM занимает в 4 раза больше памяти, чем размер файла. (в то время как обработка 86 Мбайт области Heap использует 377 МБ использования памяти в памяти, используя jVisualVM).Чтение большого файла в Java
Примечание:
Я использовал LineNumberReader для чтения файла (обусловленно конкретных требований, я могу изменить его, если это помогает в использовании памяти)
Для чтения каждой строки ReadLine() является и затем .split (',') этой строки, которая является String, вызывается для отдельных полей этой записи.
Каждая запись хранится в векторе для отображения в JTable, тогда как другая статистика хранится в HashMap, TreeMap и сводных данных в классе JavaBean. Также один график отображается с использованием JFreeChart.
Пожалуйста, предлагайте уменьшить использование памяти, поскольку мне нужно обработать файл 2 ГБ.
Чтобы быть ясным, вы говорите, что вам нужно хранить весь файл 2GB в векторе и отображать его в JTable? – NPE
Вы можете сделать это с помощью 8-гигабайтной кучи, или вы можете загружать только те части файла, которые вам нужно отобразить. –
yes Я хочу, чтобы этот 2GB-файл в памяти, но он не должен в 4 раза больше места. – Rony