Por que os aplicativos java consomem tanta memória?

5 respostas
G

Olá galera, andei fazendo algumas observações e pude perceber que os aplicativos java consomem bastante memória. Por que?

Fiz alguns pequenos aplicativos pra universidade, usando o swing pra criar janelas bem simples, e estas aplicações consumiam em torno de 15mb… o_O Elas não tem nada de mais…

Verifiquei também quanto de memória consumia um jogo feito em java que tenho aqui no pc. Este é um jogo extremamente simples, com poucas imagens, etc… E está consumindo 45mb… o_O

Alguém saberia me explicar isso?

5 Respostas

rmendes08

Bem, abstrair a plataforma tem seu custo … O fato de carregar uma VM para rodar o programa pesa no consumo de memória, e de fato, pode ser um overhead grande para rodar um único aplicativo, mas que é bastante justificado quando se tem que rodar uma aplicação servidora por exemplo.

Há também de se considerar a possibilidade do programa em si consumir memória. Se você cria mais e mais objetos e mantêm referências para eles o consumo de memória aumenta.

G

rmendes08:
Bem, abstrair a plataforma tem seu custo … O fato de carregar uma VM para rodar o programa pesa no consumo de memória, e de fato, pode ser um overhead grande para rodar um único aplicativo, mas que é bastante justificado quando se tem que rodar uma aplicação servidora por exemplo.

Há também de se considerar a possibilidade do programa em si consumir memória. Se você cria mais e mais objetos e mantêm referências para eles o consumo de memória aumenta.

Isso eh verdade… É pq NUNCA vi ninguém falar desse ponto negativo do java… Do grande consumo de memória para se rodar uma única aplicação.

Se alguém tiver algo a acrescentar, agradeço… =)

S

gabrielost:
rmendes08:
Bem, abstrair a plataforma tem seu custo … O fato de carregar uma VM para rodar o programa pesa no consumo de memória, e de fato, pode ser um overhead grande para rodar um único aplicativo, mas que é bastante justificado quando se tem que rodar uma aplicação servidora por exemplo.

Há também de se considerar a possibilidade do programa em si consumir memória. Se você cria mais e mais objetos e mantêm referências para eles o consumo de memória aumenta.

Isso eh verdade… É pq NUNCA vi ninguém falar desse ponto negativo do java… Do grande consumo de memória para se rodar uma única aplicação.

Se alguém tiver algo a acrescentar, agradeço… =)

Coloca o código de sua aplicação ai.
As vezes você está fazendo algo errado.

ViniGodoy

Dê uma lida sobre como o garbage collector funciona:

Você vai ver que ele tem uma série de otimizações vizando velocidade de execução, e elas consomem para isso memória:

  1. Pré-alocar um heap, para evitar fazer chamadas ao SO;
  2. Evitar desalocação imediata de espaço de objetos de vida curta;
  3. Copiar áreas de memória para evitar gargalos entre threads;

Agora, o ganho de velocidade na alocação e desalocação no Java é impressionante. Essa otimização dá um benefício signficativo em performance, não é à toa que algumas aplicações java podem até mesmo superar a velocidade de execução do C++.

Quanto ao tamanho de memória do jogo. Cuidado que jogos não consomem tão pouca memória assim. A maioria usa dois buffers e resolução de 32 bits de cor. Isso vai ocupar alturaxlargurax8 bytes de memória, só para armazenar a tela a ser desenhada (sem contar o resto da lógica do jogo em si).

É possível fazer a instrumentação do heap com aplicativos como o visualvm, que acompanha o próprio JDK. Por lá você pode acompanhar o consumo de memória e ver exatamente onde o java está gastando.

G

Obrigado pelas informações… =)

Criado 7 de setembro de 2010
Ultima resposta 7 de set. de 2010
Respostas 5
Participantes 4