Boa tarde pessoal,
Ultimamente venho me perguntando sobre o funcionamento do Class.forName, em outras palavras o carregador de classes, que vc pode utlizar para carregar classes on-the-fly na sua app. Sempre programo, além de orientado a objeto, orientado a qualidade, segurança e perfomace que é de muitissima importância tb. Pois bem, tenho uma classe FactoryConnection em uma app que estou desenvolvendo, e q foi exigido que n se utlizasse o framework hibernate mas sim o padrão DAO, nessa FactoryConnection quando o usuário precisa realizar uma consulta, inserção , update etc no banco, ele deve ir a fabrica de conexoes acessar a propriedade estatica getConnection que irá entragar a ele uma conexão, e após a consulta o usuário deverá fechar esta conexão, todos os acessos ao banco é desta forma. Pois bem, esta propriedade getConnection utiliza o metodo Class.forName(“com.mysql.jdbc.Driver”) para carrega a classe DriverManager do mysql. Minha dúvida é a seguinte: Toda vez que usuário precisar acessar o BD será carregada a classe Driver em memória? Ou o metodo Class.forName checa primeiramente se já foi carregada esta classe em memória e só carrega a classe se não houver a classe em memória? Estou questionando ,pois, não gostaria de ver a app futuramente que deverá estar com constante uso e acessos, dando erro de outOffMemory permGen, que é área permanente da seguimentação de memória feita pela JVM onde comumente esta área esta reservada para alocação do byteCodes/classes e por objetos que persistiram as diversas execuções do GC(garbage collector) e à algoritmos de marcação e copia dos objetos em memória. Alguém sabe como funciona exatamente este metodo Class.forName?
att,
Leonardo Couto Conrado.
