Problema na exportação de muitos dados do banco de dados para .csv com java

Obrigado pela atenção.

Eu quero exportar muitos dados, realmente muitos dados (6 milhões de linhas) para um arquivo .csv usando java. O aplicativo é um aplicativo swing, com JPA, usando toplink (ojdbc14).

Tentei usar:

BufferedWriter RandomAccessFile FileChannel

tc, mas o consumo de memória permanece muito alto, causando uma exceção de falta de memória do heap Java, embora eu defina o tamanho máximo do heap em 800m (-Xmx800m

Minha última versão do código fonte:

...(more lines of code)

FileChannel channel = getRandomAccessFile(tempFile).getChannel();
Object[][] data = pag.getRawData(); //Database data in a multidimentional array

            for (int j = 0; j < data.length; j++) {
                write(data[j], channel); //write data[j] (an array) into the channel
                freeStringLine(data[j]); //data[j] is an array, this method sets all positions =null
                data[j] = null;//sets reference in null
            }

            channel.force(false); //force writing in file system (HD)
            channel.close(); //Close the channel
            pag = null; 

...(more lines of code)

 private void write(Object[] row, FileChannel channel) throws DatabaseException {
    if (byteBuff == null) {
        byteBuff = ByteBuffer.allocateDirect(1024 * 1024);
    }
    for (int j = 0; j < row.length; j++) {
        if (j < row.length - 1) {
            if (row[j] != null) {
                byteBuff.put(row[j].toString().getBytes());
            }
            byteBuff.put(SPLITER_BYTES);
        } else {
            if (row[j] != null) {
                byteBuff.put(row[j].toString().getBytes());
            }
        }
    }
    byteBuff.put("\n".toString().getBytes());        
    byteBuff.flip();
    try {
        channel.write(byteBuff);
    } catch (IOException ex) {
        throw new DatabaseException("Imposible escribir en archivo temporal de exportación : " + ex.getMessage(), ex.getCause());
    }
    byteBuff.clear();
}

Sendo 6 milhões de linhas, não quero armazenar esses dados na memória enquanto o arquivo é criado. Criei muitos arquivos temporários (com 5000 linhas cada) e, no final do processo, anexe todos esses arquivos temporários em um único, usando dois FileChannel. No entanto, a exceção por falta de memória é iniciada antes da associação.

gora você tem outra estratégia para exportar muitos dado

Muito obrigado por qualquer resposta. Desculpe pelo meu inglês, estou melhorando xD

questionAnswers(1)

yourAnswerToTheQuestion