Otimização de Memória

Boa Tarde pessoal,

Estou fazendo manutenção em um código onde me deparei com varias maneiras de fazer
a mesma coisa, mas no decorrer desta, me surgiram algumas dúvidas qual é a melhor
maneira de se fazer está codificação.

E qual é a maneira que utiliza a melhor pratica e beneficio para a programação.

// Maneira 1

public class MemoriaTeste {
      for(int i = 0 ; i < 100 ; i++) {
            Aluno aluno = new Aluno();
            aluno.fazAlgo();
      }
}
// Maneira 2

public class MemoriaTeste {
      Aluno aluno = new Aluno();

      for(int i = 0 ; i < 100 ; i++) {
            aluno.fazAlgo();
      }
}

[code]
// Maneira 3

public class MemoriaTeste {
Aluno aluno = null;

  for(int i = 0 ; i < 100 ; i++) {
        aluno = new Aluno();
        aluno.fazAlgo();
  }

}[/code]

Dos tres trechos de código, qual é a que possui melhor performance para a JVM,
e melhor pratica deodificação.

Este código e uma situação hipotetica, sabendo que pode ocorrer em situações
maiores e bem mais complexas.

Obrigado pela atenção.

A maneira 1 e 3 são a mesma coisa; a 2 não é.

A 1 e a 3 criam 100 objetos Aluno; a 2 cria apenas 1.

Se o objeto Aluno não tiver atributos ou se os atributos não precisarem ser inicializados, não há tanto problema assim em criar 100 objetos Aluno.

O objeto tem atributos distintos, a única coisa e que estou com a suspeita de que seu criar 100 vezes o objetos,
possa fazer com que a JVM não aguente.

Ou eu estou me preocupando a toa. Este processo que foi descrito aqui está sendo utilizando junto ao quartz.

acho que vc está confundido recursividade com criação de objetos vc pode criar quantos objetos achar necessario… que isso é diferente de recursividade… por exemplo a jvm nao suporte isso

void metodo(){
metodo();
}

estouro de pilha na certa…

Bom esse seu exemplo nao reflete no desempenho da jvm, se nao to equivocado o que vai refletir mesmo sao as classes que utilizar, a comunicacao de seu sistema como outro… entre outras coisas… o que pode afetar apenas é o tempo q leva para percorrer… mais dizer que a jvm vai ficar lenta ou mais rapida… isso acho que n rola…

  Obrigado pela resposta, a questão não e recursividade, e que estou passando por um problema, 

pois estou utilizando o Quartz em uma aplicação, só que por algum motivo a aplicação, trava por algum
motivo, e após um determinado tempo ela volta a funcionar do nada.

Eu estava desconfiando que ocorre-se algum problema referente a queda da jvm, mas infelizmente eu
não estou conseguindo comprovar o motivo real. Este sistema possui muita geração de arquivo, e roda
muita procedures.

  Você tem alguma idéia do caminho que eu poderei seguir.

[quote=hugov] Obrigado pela resposta, a questão não e recursividade, e que estou passando por um problema,
pois estou utilizando o Quartz em uma aplicação, só que por algum motivo a aplicação, trava por algum
motivo, e após um determinado tempo ela volta a funcionar do nada.

Eu estava desconfiando que ocorre-se algum problema referente a queda da jvm, mas infelizmente eu
não estou conseguindo comprovar o motivo real. Este sistema possui muita geração de arquivo, e roda
muita procedures.

  Você tem alguma idéia do caminho que eu poderei seguir. [/quote]

hmmmm…

tvz uma ferramenta de profile de banco te ajude!!

Isso tem cara de lock de banco! Quando as procedures rodam elas lockam o banco e a aplicação para, e quando terminam de executar
soltam, e a aplicação volta a funcionar.

Acho que é um caminho…

   Obrigado pela ajuda, acho que você tocou em um ponto crucial, pois está aplicação tem 

30 jobs agendados no quartz, onde todos eles executam ou uma consulta no banco de dados,
ou uma procedure.

   Agora fiquei com outra dúvida, dentro do PL/SQL tem como debugar quando uma determinada 

procedure for chamada pelo java, ou este profile apenas me indicara quanto tempo, a procedure
precisa para ser executada.

Se você precisar criar um aluno diferente a cada vez, a melhor maneira é a maneira 1.

Por dois motivos:

  1. As otimizações do compilador deixarão ela com performance igual a maneira 3;
  2. A variável aluno fica com o menor escopo possível;

Se você só precisa criar um aluno e chamar sem vezes o método fazAlgo() dele, a melhor maneira é a 2.
Todas as outras criam mais de uma vez o Aluno.

  A colocação das suas idéias foram legais, fiz alguns teste que comprovou o que

você disse. Mas ainda estou verificando a questão do lock do banco de dados.