Usar mais estático ou de instância?

Olá pessoal gostaria de saber qual ocuparia menos na mémoria métodos estáticos ou da instância.
E como funcionaria garbage collector para estáticos, pois vejo diferenças no consumo de memoria.

Bom, sobre mémoria, todos vão ocupar a mesma coisa, porém deve analisar sua estratégia.

Exemplo, se você precisar criar muitas instancias de uma classe, talvez seja interessante deixa-la com estática, assim você vai é economizar mémoria.

E objetos estáticos duram enquanto a sua aplicação estiver viva.

Boa sorte

[quote=Murilo_Ferreira]Bom, sobre mémoria, todos vão ocupar a mesma coisa, porém deve analisar sua estratégia.

Exemplo, se você precisar criar muitas instancias de uma classe, talvez seja interessante deixa-la com estática, assim você vai é economizar mémoria.

E objetos estáticos duram enquanto a sua aplicação estiver viva.

Boa sorte[/quote]

Concordo em partes quando voce comeca trabalhar muito com objetos estaticos, sua programação começa a ficar meio estrutural, para esses caso o padrao Singleton talvez seria melhor

Não é questão de ocupar e o recurso estatico não tem esse fim

  • Coisas staticas tem o objetivo de ser alocado apenas 1 vez na solução toda. Ou seja, não existe a necessidade de cada processo recriar e liberar memoria com isso. Na solução com static, todos compartilham estes recursos. OBS -cuidado com os acesso simultaneo.
  • Coisas de instancia tem o objetivo de ser aloca 1 para cada processo, usuario etc. Ou seja, existe a necessidade de cada processo, usaurio etc, criar aquela determinada recurso para si proprio, não podendo ser compartilhada entre eles.

Depende…existem 3 tipos dentro JVM.
O padrão é o de sempre…quando sua memoria começa chegar na altura de 70%, GC ja pode se apurar para desalocar os objetos em referencias…

[quote=leonardobhbr][quote=Murilo_Ferreira]Bom, sobre mémoria, todos vão ocupar a mesma coisa, porém deve analisar sua estratégia.

Exemplo, se você precisar criar muitas instancias de uma classe, talvez seja interessante deixa-la com estática, assim você vai é economizar mémoria.

E objetos estáticos duram enquanto a sua aplicação estiver viva.

Boa sorte[/quote]

Concordo em partes quando voce comeca trabalhar muito com objetos estaticos, sua programação começa a ficar meio estrutural, para esses caso o padrao Singleton talvez seria melhor[/quote]

É mesmo, e quando você tem uma classe Utilitária que você usa em muitos lugares na sua aplicação, você prefere instanciar um zilhão de vezes, ou deixar a classe com metos estáticos ?

[quote=Murilo_Ferreira][quote=leonardobhbr][quote=Murilo_Ferreira]Bom, sobre mémoria, todos vão ocupar a mesma coisa, porém deve analisar sua estratégia.

Exemplo, se você precisar criar muitas instancias de uma classe, talvez seja interessante deixa-la com estática, assim você vai é economizar mémoria.

E objetos estáticos duram enquanto a sua aplicação estiver viva.

Boa sorte[/quote]

Concordo em partes quando voce comeca trabalhar muito com objetos estaticos, sua programação começa a ficar meio estrutural, para esses caso o padrao Singleton talvez seria melhor[/quote]

É mesmo, e quando você tem uma classe Utilitária que você usa em muitos lugares na sua aplicação, você prefere instanciar um zilhão de vezes, ou deixar a classe com metos estáticos ?[/quote]

Volto a dizer padrao Singleton apenas uma instancia na aplicação inteira e quem controla a instancia seria a propria classe

Então pessoal, aqui tenho 2 sistemas, 1 com 100% apenas com variaveis e metodos de instância e outra misturada.
Ambos são aplicações WEB e o de instância trabalha no singleton para chamada de metodos com propositos genéricos e todos objetos em ambos sistemas para fins de reuso guardo os na sessão.
O porém vem quando dou invalidade, o sistema 100% com instância libera muita mémoria quando dou invalidade e em outro sistema não diminui nada e praticamente apenas aumenta, diminuindo um pouco depois de muito tempo, acho que é quando garbage collector passou.
Isso foi o que me fez pensar no que está acontecendo e priorizar o uso de instancias.

Servidor: Tomcat 6.029, JSF 2.0.

e os seus beans tem qual escopo?

Alguns desses atributos de sessão não teria como jogar para aplicação ?

Esta é questão critica em todo sistemas web, definir o que deve ficar na sessão, aplicação, ou utilizar por demanda a cada execução.

[quote=leonardobhbr][quote=Murilo_Ferreira][quote=leonardobhbr][quote=Murilo_Ferreira]Bom, sobre mémoria, todos vão ocupar a mesma coisa, porém deve analisar sua estratégia.

Exemplo, se você precisar criar muitas instancias de uma classe, talvez seja interessante deixa-la com estática, assim você vai é economizar mémoria.

E objetos estáticos duram enquanto a sua aplicação estiver viva.

Boa sorte[/quote]

Concordo em partes quando voce comeca trabalhar muito com objetos estaticos, sua programação começa a ficar meio estrutural, para esses caso o padrao Singleton talvez seria melhor[/quote]

É mesmo, e quando você tem uma classe Utilitária que você usa em muitos lugares na sua aplicação, você prefere instanciar um zilhão de vezes, ou deixar a classe com metos estáticos ?[/quote]

Volto a dizer padrao Singleton apenas uma instancia na aplicação inteira e quem controla a instancia seria a propria classe[/quote]

oops, não tinha entendido o que você falow antes, foi mal.

[quote=leonardobhbr]e os seus beans tem qual escopo?

Alguns desses atributos de sessão não teria como jogar para aplicação ?

Esta é questão critica em todo sistemas web, definir o que deve ficar na sessão, aplicação, ou utilizar por demanda a cada execução. [/quote]

Sim, tinha esquecido mesmo do application, vou experimentar pra ver no que vai dar. :slight_smile:
Mas, posso concluir então que métodos estáticos não interfere no desempenho e no uso da memória?

[quote=tsunemisan]Então pessoal, aqui tenho 2 sistemas, 1 com 100% apenas com variaveis e metodos de instância e outra misturada.
Ambos são aplicações WEB e o de instância trabalha no singleton para chamada de metodos com propositos genéricos e todos objetos em ambos sistemas para fins de reuso guardo os na sessão.
O porém vem quando dou invalidade, o sistema 100% com instância libera muita mémoria quando dou invalidade e em outro sistema não diminui nada e praticamente apenas aumenta, diminuindo um pouco depois de muito tempo, acho que é quando garbage collector passou.
Isso foi o que me fez pensar no que está acontecendo e priorizar o uso de instancias.
Servidor: Tomcat 6.029, JSF 2.0.
[/quote]
Sim…totalmente normal…
Static sobe na memoria no primeira referencia e fica la até o System.exist do programa. Ou seja, se for web com tomcat…nunca sera coletada…

A diretriz é…
Use o statico para recursos compartilhados da solução…ou seja é mais barato gastar 1 vez e compartilhar para todos…do que ficar repetitivamente alocando e desalocando a mesma coisa duplicadamente para cada um…em termos de performence é pior…
O erro do programador é deixar static oq não é…e não deixar estatico oq deveria ser…

Vlw pessoal, já deu pra ter umas idéias e agora vou experimentar umas coisas pra me convencer mesmo.