Por que os aplicativos java consomem tanta memória?
5 respostas
G
gabrielost
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
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
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… =)
S
Ssalgado
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:
Pré-alocar um heap, para evitar fazer chamadas ao SO;
Evitar desalocação imediata de espaço de objetos de vida curta;
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.