Tenho uma aplicação com timer e esta consumindo muita memoria, consome ate que para de funcionar, oque devo fazer ?
Poderia colocar a parte especifica do Timer que esta consumindo muita memoria ?
File file;
File afile[];
File arq;
File arqn;
try {
file = new File("D:\\sistema\\exporta");
afile = file.listFiles();
int i = 0;
for (int j = afile.length; i <= 20; i++) {
File arquivos = afile[i];
ArquivoNome = arquivos.getName();
SetQuery q = new SetQuery();
DAO.DAOParticipantes DAOPart = new DAO.DAOParticipantes();
String SQL = q.LerTXT_Query(0, ArquivoNome);
arq = new File ("D:\\sistema\\exporta\\" + ArquivoNome);
arqn = new File("D:\\sistema\\exporta\\z" + ArquivoNome);
if (DAOPart.RetonaQTDClientes(SQL) == 1) {
SQLQuery.append(q.LerTXT_Query(1, ArquivoNome) + "\r\n");
DAOPart.AlteraDAOParticipantes(q.LerTXT_Query(1, ArquivoNome));
if (RetornoSQL == true) {
arq.delete();
} else {
arq.renameTo(arqn);
}
} else {
if (DAOPart.RetonaQTDClientes(q.LerTXT_Query(0, ArquivoNome)) < 1) {
SQLQuery.append(q.LerTXT_Query(2, ArquivoNome) + "\r\n");
DAOPart.SalvarDAOParticipantes(q.LerTXT_Query(2, ArquivoNome));
if (RetornoSQL == true) {
arq.delete();
} else {
arq.renameTo(arqn);
}
}
}
}
SQLQuery.setText("");
} catch (Exception ex) {
} finally {
}
Imagino que essa “travada” seja porque o que você fez ainda está sendo executado.
Ou você sem querer entrou em um loop infinito.
Experimente fazer uma Thread para executar isto.
int j = afile.length; i <= 20; i++ <— acho que tá aqui seu laço infinito…
Você declara J e incrementa o I. o for nunca se acabará.
Poisé eu tambem pensei nisso mais aparentemente não e
Nesse caso somente com debug mesmo, mas uma rotina como essa e’ sempre bom colocar em background dentro de uma Thread. Caso ela ja’ esteja voce pode tentar “jvisualvm”.
Tentei com uma Thread não deu certo ainda
O Timer é pra executar esta função? Operações IO consomem muito processamento, ou melhor, travam o processamento.
A aplicação é JavaEE? Você pode considerar utilizar componentes @Schedule.
Ultilizei ja fiz uma thread e não para de subir ate estourar o limite
/*
- To change this license header, choose License Headers in Project Properties.
- To change this template file, choose Tools | Templates
- and open the template in the editor.
*/
package view;
import java.io.File;
import javax.swing.JOptionPane;
/**
*
-
@author Administrador
*/
public class magica extends Thread{
public static boolean RetornoSQL = false ;
public void run()
{
File file;
File afile[] = null;
File arq;
File arqn;
String ArquivoNome;
try {
// timer1.stop();
file = new File("c:\\sistema\\exporta");
afile = file.listFiles();
int i = 0;
for ( i= 0 ; i <= afile.length; i++)
// for(i = 0; i < afile.length; i++)
{
File arquivos = afile[i];
ArquivoNome = arquivos.getName();
SetQuery q = new SetQuery();
DAO.DAOParticipantes DAOPart = new DAO.DAOParticipantes();
String SQL = q.LerTXT_Query(0, ArquivoNome);
arq = new File ("c:\\sistema\\exporta\\" + ArquivoNome);
arqn = new File("c:\\sistema\\exporta\\z" + ArquivoNome);
if (DAOPart.RetonaQTDClientes(SQL) == 1) {
// SQLQuery.append(q.LerTXT_Query(1, ArquivoNome) + "\r\n");
DAOPart.AlteraDAOParticipantes(q.LerTXT_Query(1, ArquivoNome));
if (RetornoSQL == true) {
arq.delete();
} else {
arq.renameTo(arqn);
}
} else {
if (DAOPart.RetonaQTDClientes(q.LerTXT_Query(0, ArquivoNome)) < 1) {
// SQLQuery.append(q.LerTXT_Query(2, ArquivoNome) + "\r\n");
DAOPart.SalvarDAOParticipantes(q.LerTXT_Query(2, ArquivoNome));
if (RetornoSQL == true) {
arq.delete();
} else {
arq.renameTo(arqn);
}
}
}
}
// SQLQuery.setText("");
} catch (Exception ex) {
JOptionPane.showMessageDialog(null,ex);
} finally {
}
}
}
Esse tipo de erro e’ mesmo terrível pra encontrar. Mas você tem certeza que é dessa rotina que esta causando o estouro da memoria ?
Você verificou o tamanho do arquivo de leitura em relação a memoria disponivel, talvez precisa paginar, bom to chutando, mas você não é primeiro que ocorre esse tipo de coisa e tão pouco será o ultimo.
Tem que ter paciencia e analisar item por item com o debug e você encontrará o problema.
Mas quando você fala de estouro de memoria voce esta recebendo a mensagem de OutOfMemory exception ? se for, tenta aumentar o -Xms32M -Xmx1024M
Poise j-menezes não e este erro não eu vou te manda amanha dizendo o erro correto so pra vc entender
eu tenho varios arquivos txt dentro deles tem tres query um select e um insert e um update, então leio o select que esta na linha 1 do arquivo se tiver dados eu executo Update se não insert, estou fazendo uma especie de monitor que pega dados de um bd de uma aplicação Clipper e atraves do txt que a aplicação clipper cria eu leio e enseiro no MySQL então meu loop gira em torno disso vai pegando um a 1 lendo e excluindo
Exception in thread "Thread-2" java.lang.InternalError: O processo atual usou todos os identificadores de sistema
permitidos para objetos do Gerenciador do Windows.
at sun.awt.windows.WToolkit.eventLoop(Native Method)
at sun.awt.windows.WToolkit.run(WToolkit.java:306)
at java.lang.Thread.run(Thread.java:748)CONSTRUÇÃO
PARADA (tempo total: 4 minutos 42 segundos)