OutOfMemoryError: Java heap space

5 respostas Resolvido
java
nanquim

Sei que já tem tópicos sobre isso, mas parece que li metade da internet e ainda não consegui resolver.
Eu já aumentei o espaço de memória em “opções adicionais do compilador” do projeto e ainda assim não funciona. Acho que é mesmo meu código que tá ruim… Podem me ajudar?

public List<Contato> getLista(){
    sql = "SELECT * FROM contato";
    
    try{
        ps = con.prepareStatement(sql);
        rs = ps.executeQuery();
    }catch(SQLException e){
        System.err.println("\n\nERRO AO RETORNAR DADOS\n\n");
    }
    
    List<Contato> lista = new ArrayList<Contato>();
   
    int qtColunas = contaColunas(rs);
    
    if(qtColunas <= 0){
        System.err.println("Não há colunas");
    }else{
        try {
            while(rs.next()){
                int i = 1;
                while(i < qtColunas){
                    Contato contato = new Contato();
                    int id = rs.getInt("id_contato");
                    String nome = rs.getString("nome");
                    String endereco = rs.getString("endereco");
                    String email = rs.getString("email");
                    String dataNascimento = rs.getString("dataNascimento");

                    contato.setId(id);
                    contato.setNome(nome);
                    contato.setEndereco(endereco);
                    contato.setEmail(email);
                    contato.setDataNascimento(dataNascimento);

                    lista.add(contato);
                }
            }
        }
     catch (SQLException ex) {
        ex.printStackTrace();
    }catch(OutOfMemoryError o){
            System.err.println("Sem memória");
            o.printStackTrace();
       }
      }
    
    return lista;
    }

public int contaColunas(ResultSet rs){
ResultSetMetaData rsmd = null;
int colunas = 0;
    try {
        rsmd = rs.getMetaData();
    } catch (SQLException ex) {
        System.err.println("Erro ao recuperar metadata");
    }
    try {
        colunas = rsmd.getColumnCount();
    } catch (SQLException ex) {
        System.err.println("Erro ao recuperar número de colunas do rs");
    }
return colunas;
}

}

Stacktrace:

run:

Sem memória

Exception in thread main java.lang.OutOfMemoryError: Java heap space

at java.util.IdentityHashMap.init(IdentityHashMap.java:254)

at java.util.IdentityHashMap.(IdentityHashMap.java:210)

at java.lang.Throwable.printStackTrace(Throwable.java:649)

at java.lang.Throwable.printStackTrace(Throwable.java:643)

at java.lang.Throwable.printStackTrace(Throwable.java:634)

at br.com.model.dao.ContatoDAO.getLista(ContatoDAO.java:92)

at br.com.connection.Teste.main(Teste.java:17)

5 Respostas

M
Solucao aceita

Me parece que…

…é um loop infinito pois o valor de i nunca é alterado dentro do while, resultando no out of memory que você relatou.

nanquim

pqp isso mesmo, obrigada

FernandoFranzini

Seu código esta gastando mais memoria que a JVM suporta…
Quanto de memoria vc tem na maquina?
Quanto de memoria a JVM ta usando dessa maquina?
Sua logica estourou os limites…

nanquim

também, que lógica burra essa minha do loop infinito

FernandoFranzini

KKK Bem vindo ao time…
Todos nos já fizemos isso
:stuck_out_tongue_winking_eye:

Criado 29 de janeiro de 2017
Ultima resposta 10 de fev. de 2017
Respostas 5
Participantes 3