Javafree
Página Inicial do Fórum > Java Básico

Aplicação utilizando muita memória



Criar novo tópico   Responder tópico
  1. Comment Arrow

    Publicado em: 09/09/2016 11:42:03

    Fiz uma aplicação em linguagem JAVA, ela esta funcionando tudo certo, porém, reparei pelo gerenciador de tarefas do windows que ela usa muita memória, e as vezes ela da a louca e começa a aumentar memória.

    Em várias partes do sistema, eu chamo o:
    System.gc();
    System.runFinalization();
    Segundo o que pesquisei, estes comandam forçam a chamada do Garbage Collector.

    Também uso um:
    finally{
    this.pst.close();
    this.rs.close();
    }

    depois de fazer comunicação com o banco de dados (USO PostgreSQL).

    Minha dúvida é a seguinte, mesmo fazendo todos estes processos, a aplicação ainda usa muito memória (na média de 90MB).
    Teria algum programa ou alguma forma de eu descobrir o que esta ocupando tanta memória na minha aplicação?




  1. staroski
    Posts:4600


    Comment Arrow

    Publicado em: 13/09/2016 10:05:28

    System.gc() apenas liga uma flag para o GC executar assim que possível.
    System.runFinalization() liga uma flag para disparar os métodos finalize() pendentes assim que possível.
    Mas ambos não forçam absolutamente nada, você não tem controle sobre o gerenciamento de memória.

    Tenha em mente que esses 90MB representam o espaço alocado pelo sistema operacional para a execução da Máquina Virtual Java, lembrando que Java é interpretado, você não executa código nativo diretamente, seu programa é executado dentro de uma máquina virtual, que consome bastante memória.
    Mas se você quiser monitorar a memória que seu aplicativo está consumindo dentro da máquina virtual, utilize os métodos totalMemory() e freeMemory() da classe Runtime.
    _________________

    Ricardo Artur Staroski, OCP-JP
    Blumenau - SC
    http://www.staroski.com.br

    Acesse http://www.guj.com.br/

  1. Comment Arrow

    Publicado em: 19/09/2016 09:33:11

    [quote="staroski"]System.gc() apenas liga uma flag para o GC executar assim que possível.
    System.runFinalization() liga uma flag para disparar os métodos finalize() pendentes assim que possível.
    Mas ambos não forçam absolutamente nada, você não tem controle sobre o gerenciamento de memória.

    Tenha em mente que esses 90MB representam o espaço alocado pelo sistema operacional para a execução da Máquina Virtual Java, lembrando que Java é interpretado, você não executa código nativo diretamente, seu programa é executado dentro de uma máquina virtual, que consome bastante memória.
    Mas se você quiser monitorar a memória que seu aplicativo está consumindo dentro da máquina virtual, utilize os métodos totalMemory() e freeMemory() da classe Runtime.




    Bom dia! Encontrei o problema para o alto consumo de memória.
    Eu havia feito uma rotina onde a cada 5 segundos rodava um TimerTask, este TimerTask executava ao mesmo tempo, 2 select ao banco de dados.
    Eu já imaginava que este era o problema, porém, achei que poderia ter uma "outra saída".



  1. Relacionados