Pessoal, eu sempre tive esta duvida, ja procurei algo q a solucionasse e n encontrei nd d concreto. Mas o uso do “STATIC” nos metodos/propriedades de uma classe, torna a app mais lenta (pesada) ou n influi em nd? Queria respostas certas e nao “eu acho…”. Pq eu acho q nao fica, mas n tenho ctz absoluta, por isso so uso qnd vejo realmente necessario. E ai? Vlw…
Tipo, qnd vc declara um variavel (propriedade) statica, ela torna-se variavel de classe e está acessível independente de instanciamento de classe (criacao de objeto). Para esta propriedade “já está pronta para uso” nao eh necessario algum carregamento inicial, tornado a app 1 pouco mais lenta? Essas duvidas bestas q tenho e nunca tirei, hehehe
Olá
Fica um quinquilhonésimo mais rápida porém sacrifica o encapsulamento. O ganho de desempenho não compensa. A gente usa quando precisa mas não por questões de performance.
[]s
Luca
É isso que o Luca disse.
Só complementando a gente realmente usa quando precisa, mas a gente raramente precisa.
Além do mais, não se preocupe muito com performance até que isso seja um problema. Preocupe-se em usar algoritmos eficientes, mas não com otimizações desse tipo.
Depois, quando se tornar um problema, use um profiler para localizar os pontos em seu programa onde existem gargalos. Você vai notar que são poucos pontos, e geralmente é suficiente corrigi-los.
Em 90% das aplicações só fazer isso algumas vezes já deve ser suficiente. Entretanto, se você está naqueles 10% que está desenvolvendo uma aplicação para vídeo, ou um algoritmo para calcular previsões metereológicas ou temperatura e movimentação dos liquidos numa caldeira, onde otimizações como essa que você descreveu podem vir a ser uma preocupação, então, talvez o java não seja a linguagem mais indicada para você.
Se seu objetivo é investir tanto em performance, use uma linguagem que te dê subsídios para isso, como o C++. Mas esteja preparado para encarar código ilegível e estudar profundamente o hardware e se familiarizar com termos como “cache alignment”, “cache friendly”, etc…
ok, vlw ai o esclarecimento…
so mais 1 duvidazinha:
public class HibernateUtil {
private static final SessionFactory sessionFactory;
static { ***
try {
// Create the SessionFactory from hibernate.cfg.xml
sessionFactory = new Configuration().configure().buildSessionFactory();
} catch (Throwable ex) {
// Make sure you log the exception, as it might be swallowed
System.err.println("Initial SessionFactory creation failed." + ex);
throw new ExceptionInInitializerError(ex);
}
} ***
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
}
esse static marcado com ***, ele eh executado qnd se carrega a app ou apenas qnd a classe HibernateUtil eh chamada?
esse “static { }” (bloco estático) é chamado quando essa classe é carregada na jvm
e só é executado uma só vez…
até
[quote=Deh]esse “static { }” (bloco estático) é chamado quando essa classe é carregada na jvm
e só é executado uma só vez…
até[/quote]
ok blz, mas a classe eh carregada na jvm qnd se inicia a aplicacao ou quando se faz necessaria a utilizacao da classe durante a execucao da aplicacao?
opção 2.
Ooops, falha minha, correção feita.
(editado)
opcao 1???
Não, é a opção 2. A classe normalmente é carregada em seu primeiro uso.