Amigos tenho um problema com o seguinte trecho de codigo em minha aplicação. Em alguns pc´s, inclusive o que desenvolvi,
a aplicação não encontrou problemas mas em certos computadores apresenta comportamento estranho chegando a utilizar 100%
de CPU contra 10% nas maquinas que apresenta comportamento normal. Fiz uma comparação das maquinas todas
tem windows XP sp2 CPU acima de 2 GHZ pelo menos 512 de ram e jre 1.6. Fiz testes com este processo rodando sozinho, além dos normais do sistema.
O mesmo comportamento foi observado quando desenvolvido em java 1.5 e 1.6. Não sei mais o que fazer. Alguém imagina o que pode ser?
Os pc´s não possuem spy ou virus. o comportamento ocorre somente durante a execução do programa. Durante o restante do tempo a CPU fica quase 100% livre. Fiz avaliação com plugin profiler do netbeans este também mostrou
que somente nesse trecho ocorre estresse da CPU.
deixei apenas o codigo que abre a tela dele, comentando o resto do metodo inteiro (inclusive a parte aonde chama outro metodo enviando o endereço do arquivo selecionado).
assim mesmo ocupava 100 %
atualizei o avast e dei o scan e novidade…ele encontro um virus generico…
pesquisando sobre o dito cujo descobri que o melhor a fazer é manda ele da um scan no boot, e assim eu fiz… quando abri a aplicação denovo depois de reseta tava normal…
a) Sua máquina tem 512 MB - ainda acho pouco
b) Você abre mas não fecha os OutputStreams? Precisa fechar tudo direitinho. Senão gasta memória adoidado. Principalmente o ObjectOutputStream, que tem a tendência de consumir memória se você não o fechar.
eu vi isso uma semanas atrás, o OWB, uma aplicação da Oracle para DataWareHouse tem uma ferramenta de backup, que em UM desses backups chegou a consumir fácil fácil 100% de memória numa máquina de 2 gb… Acreditam??? Se alguém souber explicar, agradeco… hehehe Bug??? hhhhhmmmmm
Não pode afirmar isso até ver se realmente você não está com falta de memória.
Que eu saiba, programas Java sofrem cronicamente de falta de memória.
Quando um programa Java está usando toda a memória alocada para ele (se você não está usando a opção -Xmx na linha de comando fica pior ainda) ele começa a fazer duas coisas:
Fica fazendo “garbage collection” direto (isso leva a CPU para cima)
Fica fazendo um monte de swap em disco, e isso também leva a CPU lá para cima (além de você ver que a luzinha do HD fica acesa direto).