Carga de memoria dos aplicativos jar no windows

2 respostas
L

Ola Pessoal, uma vez criei um programa em Delphi e em resumo alguns meses depois ele estava travando por sobrecarga de memória paginada do windows, então agora todo programa que monto fico de olho nesta “GAFI”.
Em Java construí o seguinte código para conectar-se a um BD:

public ClassConecta() {    }
   
 
    
    private String url = "jdbc:postgresql://127.0.0.1:5432/postgres";
    private String driver ="org.postgresql.Driver";
    private String user ="postgres";
    private String pwd = "postgres";//Senha do Banco de dados
    Connection con = null;    
     
    public Connection conecta(){
        try{
            Class.forName(driver);
            con = DriverManager.getConnection(url, user,pwd);            
        }catch(ClassNotFoundException e){
            JOptionPane.showMessageDialog(null,"Ocorreu um erro no sistema, se o problema persistir contate o administrador:\n Driver n�o encontrado!\n"+ e,"ATEN��O",JOptionPane.WARNING_MESSAGE);
        }catch(SQLException e){
            JOptionPane.showMessageDialog(null,"Ocorreu um erro no sistema, se o problema persistir contate o administrador:\n Erro na Conex�o com Banco\n"+ e,"ATEN��O",JOptionPane.WARNING_MESSAGE);            
}

        return con;  
    }

e em determinados momentos chamo a classe de nome conecta que contem o código acima e crio o seguinte:

ClassConecta conexao = new ClassConecta();
            GeinsComandasApp principal = new GeinsComandasApp();
            conexao.conecta();
            Statement stmt = conexao.con.createStatement();
            ResultSet rs = stmt.executeQuery("select codcliente, descliente , fone, cel from clientes");

A questão é: Tenho que fechar a conexão? ou o stmt? pois notei que as memórias estão subindo cada vez que eu chamo a classe conecta e ela só baixa quando eu encerro o aplicativo…
Tem algo errado, Não?

2 Respostas

Diego_Marinho

Olá amigo,

claro que sim, você é “obrigado” a fechar todas as conexões existentes que foram abertas.

Para fechar a tua conexao JDBC utiliza um bloco finally fechando o teu ResultSet e o teu Statement.

Agora tome cuidado quando for fechar o teu Connection antes de capturar os resultados, sei que os Drivers dos bancos de dados já estão bastantes robustos, mas nunca se sabe quando alguém irá usar uma versão mais nova ou antiga!! mas fica a dica.

Só voltando a tua pergunta, vc é obrigado a fechar a conexao de qualquer objeto DAO ou Engenharia para uso de banco de dados. assim você estabelece contato direto para se ter o bom uso sobre questoes de não haver Overhead caso haja multiplas conexoes para não trazer problemas para vc.

Uma dica use algum framework do tipo ORM como o Hibernate, lhe dará mais praticidade e é bem mais visto pelas empresas e empregadores, mas para quem está aprendendo é uma boa tbm.

Qualquer duvida posta ou grita!!! rsrsrs

L

OK, Obrigado, Valeu mesmo as Dicas!! :slight_smile:

Criado 8 de setembro de 2009
Ultima resposta 10 de set. de 2009
Respostas 2
Participantes 2