Problema com OutOfMemory

2 respostas
jonasjgs2

boa tarde a todos
eu tenho um metodo que executa um batch
e neste batch esta dando outofmemory

me lembro que tinha visto em algum lugar que isto pode ser resolvido para fazer swap em disco quando acontecer este problema...

se alguem poder me ajudar eu agradeco desde ja...

segue abaixo o meu metodo:
o erro da no stmt.addBatch();

public void InsereLista(List<PdvPrc> lista) throws SQLException {
        StringBuilder sb = new StringBuilder();
        sb.append("insert into PdvPrc");
        sb.append("(P15CodReduz,P15Descricao,P15Descricao35,");
        sb.append("P15Ean,P15Secao,P15Natureza,");
        sb.append("P15AliqIcm,P15Fracao,P15Pesado,");
        sb.append("P15Associado,P15DescMax,P15Preco,");
        sb.append("P15Conjunto,P15PrecoFixo,P15Preco2,");
        sb.append("P15Preco3,P15Vasilhame,P15IcmReduz,");
        sb.append("P15IsenPis,P15TipVen,P15EmbVen,");
        sb.append("P15Arred,P15ProdProp,P15Oferta,");
        sb.append("P15Estq,P15Nbm)");
        sb.append(" values (?,?,?,?,?,?,?,?,?,?,");
        sb.append("?,?,?,?,?,?,?,?,?,?,");
        sb.append("?,?,?,?,?,?)");
        PreparedStatement stmt = this.con.prepareStatement(sb.toString());

        for (PdvPrc pdvprc : lista) {
            stmt.setLong(1, pdvprc.getP15CodReduz());
            stmt.setString(2, pdvprc.getP15Descricao());
            stmt.setString(3, pdvprc.getP15Descricao35());
            stmt.setLong(4, pdvprc.getP15Ean());
            stmt.setLong(5, pdvprc.getP15Secao());
            stmt.setString(6, pdvprc.getP15Natureza());
            stmt.setDouble(7, pdvprc.getP15AliqIcm());
            stmt.setString(8, pdvprc.getP15Fracao());
            stmt.setString(9, pdvprc.getP15Pesado());
            stmt.setLong(10, pdvprc.getP15Associado());
            stmt.setLong(11, pdvprc.getP15DescMax());
            stmt.setDouble(12, pdvprc.getP15Preco());
            stmt.setString(13, pdvprc.getP15Conjunto());
            stmt.setString(14, pdvprc.getP15PrecoFixo());
            stmt.setDouble(15, pdvprc.getP15Preco2());
            stmt.setDouble(16, pdvprc.getP15Preco3());
            stmt.setString(17, pdvprc.getP15Vasilhame());
            stmt.setDouble(18, pdvprc.getP15IcmReduz());
            stmt.setString(19, pdvprc.getP15IsenPis());
            stmt.setString(20, pdvprc.getP15TipVen());
            stmt.setLong(21, pdvprc.getP15EmbVen());
            stmt.setString(22, pdvprc.getP15Arred());
            stmt.setString(23, pdvprc.getP15ProdProp());
            stmt.setString(24, pdvprc.getP15Oferta());
            stmt.setDouble(25, pdvprc.getP15Estq());
            stmt.setLong(26, pdvprc.getP15Nbm());
            stmt.addBatch();
        }
        stmt.executeBatch();
        stmt.close();

2 Respostas

javaflex

Sei que nao é o adequado mas se inserir diretamente linha a linha no banco dentro de uma transacao nao te salva desse problema?

jonasjgs2

javaflex, eu consegui resolver esse problema,
salvando de 100 em 100…

foi a unica maneira…
mas eu vi em algum lugar, que tem como configurar
nao se se a classe ou coisa assim, para que
seja feito swap em disco quando isso ocorrer…

Criado 26 de março de 2013
Ultima resposta 27 de mar. de 2013
Respostas 2
Participantes 2