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?
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?
seu eu criar 100.000 classes com membros estaticos...
classe A {
static texto = "aaaaa";
}
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.
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 ?
}
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?
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?
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.
classe A {
System.out.println('asd');
static texto = "aaaaa";
}
Assim você vai saber quando.
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ê 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?
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.
Se você quer fazer o teste, Crie as 100 classes com 1 atribute e rode uai. Faça métricas.
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ê 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?
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.
Se você quer fazer o teste, Crie as 100 classes com 1 atribute e rode uai. Faça métricas.
exato, estou unindo argumentos. um deles "pode" ser o consumo de memória.
olha montei um codigo:
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;
}
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 ?
exato, estou unindo argumentos. um deles “pode” ser o consumo de memória.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.
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.
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.
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.
Obrigado Hebert, Paulo e Rodrigo, dúvidas sanadas.