um objeto com membros estáticos só é criado no primeiro acesso à um membro estático ou no momento da compilação ?
Obrigado.
um objeto com membros estáticos só é criado no primeiro acesso à um membro estático ou no momento da compilação ?
Obrigado.
Tente elaborar um pouco melhor porque ficou meio confuso 
Em uma pergunta conceitual assim misturar objeto com estáticos gera muitas possibilidades, o que exatamente você quis dizer?
[quote=Rodrigo Sasaki]Tente elaborar um pouco melhor porque ficou meio confuso 
Em uma pergunta conceitual assim misturar objeto com estáticos gera muitas possibilidades, o que exatamente você quis dizer?[/quote]
seu eu criar 100.000 classes com membros estaticos…
[code]classe A {
static texto = “aaaaa”;
}[/code]
após eu compilar o projeto, e executar o programa todas elas seram criadas e ficaram disponiveis na memória, ou a JVM criará essas instancias após o 1° acesso de cada classe
obrigado.
[code]main(){
System.out.println(A.texto) // o objeto A é criado neste momento, ou ja havia sido criado antes na hora da execução do programa ?
}[/code]
Se você criar 100.000 instâncias da classe A, você só vai ter 1 atributo texto pois ele está relacionado à classe e não à instância em si.
Ele será carregado quando for criada a primeira instância de A. Em tempo de compilação, você não terá nada na memória.
Era isso que você estava perguntando?
[quote=Rodrigo Sasaki]Se você criar 100.000 instâncias da classe A, você só vai ter 1 atributo texto pois ele está relacionado à classe e não à instância em si.
Ele será carregado quando for criada a primeira instância de A. Em tempo de compilação, você não terá nada na memória.
Era isso que você estava perguntando?[/quote]
na verdade estou querendo provar uma teoria de que quanto menor uma classe com atributos estáticos, menor será o consumo de memória.
então se eu tenho 1 classe com 1000 atributos estáticos, é mais performático eu dividir esta em 100 classes diferentes, pois a criação do objeto na memória só ocorrerá quando 1 dos atributos da classe for acessada.
ou caso ocorra na execução então quer dizer que o consumo de memória seria o mesmo.
Pq vc não faz?
[code] classe A {
System.out.println(‘asd’);
static texto = “aaaaa”;
} [/code]
Assim você vai saber quando.
[quote=douglaskd][quote=Rodrigo Sasaki]Se você criar 100.000 instâncias da classe A, você só vai ter 1 atributo texto pois ele está relacionado à classe e não à instância em si.
Ele será carregado quando for criada a primeira instância de A. Em tempo de compilação, você não terá nada na memória.
Era isso que você estava perguntando?[/quote]
na verdade estou querendo provar uma teoria de que quanto menor uma classe com atributos estáticos, menor será o consumo de memória.
então se eu tenho 1 classe com 1000 atributos estáticos, é mais performático eu dividir esta em 100 classes diferentes, pois a criação do objeto na memória só ocorrerá quando 1 dos atributos da classe for acessada.
ou caso ocorra na execução então quer dizer que o consumo de memória seria o mesmo.
[/quote]Cara, vc ta matando orientação a objeto. Não importa se uma classe com 1000 estáticos é mais rápido que 100 classes com 1 atributo. Seu projeto vai ser uma @(&#@(#. Vc deve programar primeiramente OO e depois ver a questão da performance.
Se você quer fazer o teste, Crie as 100 classes com 1 atribute e rode uai. Faça métricas.
[quote=Hebert Coelho][quote=douglaskd][quote=Rodrigo Sasaki]Se você criar 100.000 instâncias da classe A, você só vai ter 1 atributo texto pois ele está relacionado à classe e não à instância em si.
Ele será carregado quando for criada a primeira instância de A. Em tempo de compilação, você não terá nada na memória.
Era isso que você estava perguntando?[/quote]
na verdade estou querendo provar uma teoria de que quanto menor uma classe com atributos estáticos, menor será o consumo de memória.
então se eu tenho 1 classe com 1000 atributos estáticos, é mais performático eu dividir esta em 100 classes diferentes, pois a criação do objeto na memória só ocorrerá quando 1 dos atributos da classe for acessada.
ou caso ocorra na execução então quer dizer que o consumo de memória seria o mesmo.
[/quote]Cara, vc ta matando orientação a objeto. Não importa se uma classe com 1000 estáticos é mais rápido que 100 classes com 1 atributo. Seu projeto vai ser uma @(&#@(#. Vc deve programar primeiramente OO e depois ver a questão da performance.
Se você quer fazer o teste, Crie as 100 classes com 1 atribute e rode uai. Faça métricas.[/quote]
exato, estou unindo argumentos. um deles “pode” ser o consumo de memória.
olha montei um codigo:
[code]public class Propagation {
public static void main(String[] args) {
System.out.println("a classe com membros statics ainda não foi criada ? ");
System.out.println(poil.z);
}
}
class poil{
static {
System.out.println("static block");
}
static int z = 8;
static int y = 9;
}[/code]
eu queria saber algumas coisas ?
1 - a classe foi criada assim que eu chamei um de seus atributos ?
2 - todos os atributos foram parar na memória no momento da execução, ou na chamada ao atributo z ?
3 - quando acessei z, y foi criado e foi parar na memória, ou somente z ?
[quote=douglaskd]exato, estou unindo argumentos. um deles “pode” ser o consumo de memória.[/quote]Sempre que vi problemas relacionados a performance com java foi por causa de loops, banco de dados, acessos externos, etc.
Nada ligado a ‘momento de criação’. Cara, vc ta procurando no lugar errado.
Boa sorte ai.
Concordo com o Herbert, por favor não mate a OO tentando fazer otimização antes da hora.
Mas de qualquer forma, um atributo estático será carregado no primeiro uso da classe que o contém - qualquer tipo de uso, independente de acessar ou não o tal atributo.
[quote=jcranky]Concordo com o Herbert, por favor não mate a OO tentando fazer otimização antes da hora.
Mas de qualquer forma, um atributo estático será carregado no primeiro uso da classe que o contém - qualquer tipo de uso, independente de acessar ou não o tal atributo.[/quote]
será carregado somente o atributo acessado, ou todos os outros atributos da classe ?
[EDIT]
opa… li direito sua resposta.
então se eu usar de qualquer forma a classe, todos os atributos vão parar na memória…
então mesmo que não tão importante , é + um argumento para a divisão de responsabilidades de uma classe ou um Enum.
Todos. Simplesmente declarar uma variável daquela classe já se classifica como “uso” dela.
Aluno aluno;
Isso já faria com que todos os atributos estáticos fossem carregados.
[quote=jcranky]Todos. Simplesmente declarar uma variável daquela classe já se classifica como “uso” dela.
Aluno aluno;
Isso já faria com que todos os atributos estáticos fossem carregados.[/quote]
Obrigado Hebert, Paulo e Rodrigo, dúvidas sanadas.