Java.lang.OutOfMemoryError: Java heap space

4 respostas
rolipam

Tenho o seguinte código no meu construtor …

public Principal() {
        initComponents();
        
       try {
            Class.forName("org.postgresql.Driver");
            con = DriverManager.getConnection(url, user, senha);
            stm = con.createStatement(); //ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);
            String sql = "select * from cadfilia, cadcvend where cadfilia.cod_filial=cadcvend.cod_filial";            
            rs = stm.executeQuery(sql); // Linha 30 (linha que está gerando o erro)
            mostraDados();
            con.close();

        } catch (Exception e) {
            e.printStackTrace();
        }

e o método mostraDados()

private void mostraDados() throws SQLException{
        if(rs.first()){
            tfcidfilial.setText(rs.getString("cod_filial"));
            tfcodfarmacia.setText(rs.getString("cod_farmacia"));
            tfrazaosocial.setText(rs.getString("raz_social"));
            tfnomefilial.setText(rs.getString("nom_filial"));
            tfcnpj.setText(rs.getString("num_cnpj"));
            tfie.setText(rs.getString("num_inscest"));
            tfendereco.setText(rs.getString("end_filial"));
            tfbairro.setText(rs.getString("bai_filial"));
            tfcidfilial.setText(rs.getString("cid_filial"));
            tfcep.setText(rs.getString("cep_filial"));
            tfuf.setText(rs.getString("est_filial"));
        }else
            JOptionPane.showMessageDialog(null, "Não Localizou Dados!");
            

    }

e qdo tento executar a aplicação ocorre o segunte erro

Exception in thread "AWT-EventQueue-0" java.lang.OutOfMemoryError: Java heap space
	at java.lang.Class.getDeclaredFields0(Native Method)
	at java.lang.Class.privateGetDeclaredFields(Class.java:2291)
	at java.lang.Class.getDeclaredField(Class.java:1880)
	at java.util.concurrent.atomic.AtomicReferenceFieldUpdater$AtomicReferenceFieldUpdaterImpl.<init>(AtomicReferenceFieldUpdater.java:181)
	at java.util.concurrent.atomic.AtomicReferenceFieldUpdater.newUpdater(AtomicReferenceFieldUpdater.java:65)
	at java.sql.SQLException.<clinit>(SQLException.java:353)
	at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1309)
	at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:192)
	at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:451)
	at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:336)
	at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:235)
	at Principal.<init>(Principal.java:30)
	at Principal$1.run(Principal.java:284)
	at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)

A mesma Aplicação feita para rodar direto no console, imprimindo a saída com System.out.println() não ocorre nehum erro.

System.out.println("Código da Filial "+rs.getString("cod_filial"));
System.out.println(...);

Alguém aí tem alguma SOLUÇÃO!!!
Obrigado

4 Respostas

ribclauport

A solução está nesse post:

Espero ter ajudado.

B

Pergunta: quantas linhas/registros esta sql retorna?

select * from cadfilia, cadcvend where cadfilia.cod_filial=cadcvend.cod_filial
furutani

Aumentar a memória as vezes não resolve. Dependendo de quantas linhas a query retorna é melhor trabalhar com paginação/lote de registros.

rolipam

Bom dia Gente,

Obrigado pelas dicas, mas consegui resolver o problema. É engraçado, mas como pode dar erro no modo gráfico e a mema consuta não dá erro no modo texto. Na verdade a consulta era pra retornar uma única linha, mas quando fiz o teste direto no banco de dados retornada todos os registros da tabela (+ 26.000). então restringi a query:

select distinct f.cod_filial, cod_farmacia, raz_social, nom_filial, num_cnpj, nun_inscest, end_filial, bai_filial, cid_filial, est_filial from cadfilia f, cadcvend v where v.cod_filial=f.cod_filial

que me retorna um único registro, mas mesmo assim ainda demora um pouco para processar, mas pelo menos está funcionando.

Criado 20 de março de 2012
Ultima resposta 21 de mar. de 2012
Respostas 4
Participantes 4