JAVA - Ошибка нехватки памяти при записи ячеек Excel в jxl - PullRequest
1 голос
/ 02 июля 2010

Я использую JXL для записи файла Excel из 50000 строк и 30 столбцов.Мой код выглядит так:

для (int j = 0; j

myWritableSheet.addCell(new Label(0, j, myResultSet.getString(1), myWritableCellFormat));

myWritableSheet.addCell(new Label(1, j, myResultSet.getString(2), myWritableCellFormat));

.....

.....

}

Во время записи ячеек программа выходитмедленнее и медленнее

и, наконец, вокруг строки 25000 Я получаю следующую ошибку:

Исключение в потоке "Thread-3" java.lang.OutOfMemoryError: пространство кучи Java в jxl.write.

В Java всегда трудно обрабатывать память.

В этом случае, похоже, проблема jxl.

Есть ли способ написать файл, очиститьячейки памяти и непрерывной записи каждые 1000 ячеек?

Это была бы хорошая идея или что бы вы предложили в качестве решения?

Ответы [ 2 ]

5 голосов
/ 04 июля 2010

В JExcel FAQ есть пара предложений, включая идею Кертиса выше.

Если вы не возражаете против снижения производительности, вы можете использовать временный файл вместо того, чтобы делать все это в памяти .

WorkbookSettings s = new WorkbookSettings();  
s.setUseTemporaryFileDuringWrite(true);  
WritableWorkbook ws = Workbook.createWorkbook(new File("someFile.xls"),s); 
1 голос
/ 02 июля 2010

Повышение памяти, доступной для виртуальной машины (с -Xms и -Xmx), не вариант?

...