GC - Muitas instâncias do mesmo objeto ou apenas uma?  XML
Índice dos Fóruns » Arquitetura de Sistemas
Autor Mensagem
vinicius_roc
JavaEvangelist

Membro desde: 12/06/2009 14:18:31
Mensagens: 365
Offline

Boa tarde amigos,

Estou lendo o livro de Introdução à Arquitetura e Design de software e fiquei com uma dúvida em relação a criar ou não varias instâncias de um objeto.

Aqui no livro diz que "segurar objetos em memória estressa demais o GC baseado em cópia de objetos. A boa pratica de OO já diz que devemos criar pequenos objetos encapsulados, sem muitos dados estáticos, originando instãncias sem nos preocuparmos com caches e outros alegadas otimizações." e tambem que "devemos adequar nossa aplicação a hipótese de gerações".

Mas eu vejo por ai, inclusive na empresa onde trabalho, as classes chamadas de Core, que contém varios objetos e funcionalidades comuns a todas as classes do sistemas, e esse Core é iniciado assim que a aplicação é iniciada, criando várias instâncias dos objetos e disponibilizando-os para o resto da aplicação.

A minha dúvida é: É bom fazer assim? Ou seria melhor criar o objeto, desde que não seja pesado, toda vez que invocarmos um método get?

Um exemplo na minha aplicação é uma classe responsável por armazenar todos os repositórios (40). Esses repositórios que são instânciados assim que a classe é instanciada mesmo sendo uma classe bem simples, que recebe apenas um objeto no construtor e se serve apenas dele. Nesse caso não seria melhor guardar só a classe e criar a instância apenas quando dão um get?

Muito Obrigado

Att,

Vinicius Roberto
icarocd
JavaBaby
[Avatar]

Membro desde: 12/04/2006 21:46:54
Mensagens: 92
Offline

a resposta à sua pergunta depende que voce analise os seguintes pontos abaixo, alem de outros especificos que houver:
-> o recurso que estou instanciando uma vez para toda a aplicacao é 'pesado', ou deve ser unico necessariamente para toda a aplicacao? ex: algum pool de conexoes
-> faz sentido eu instanciar o recurso x na inicializacao da aplicacao, ou na primeira vez que vier a ser utilizado? é um recurso muito demorado de ser preparado? é bastante utilizado ou é algo que é pouco utilizado?

ou seja, nao tem uma resposta pronta. minha recomendacao geral é: faça e matenha uma arquitetura sempre tao simples quanto possivel, evite a "generalidade especulativa" que martin fowler comenta, e evolua à medida que for (realmente) necessario.
fazer coisas a mais traz complicacoes que tendem a se mostrar desnecessarias e confusas com o decorrer da evolucao do seu projeto.

Engenheiro de Computação com ênfase em Engenharia de Software pela UEFS/BA
SCJP & SCWCD certified
Desenvolvedor com ênfase Java/JEE/JSE/Grails
[Email] [WWW] [MSN]
FernandoFranzini
GUJ Master
[Avatar]

Membro desde: 24/04/2009 12:58:16
Mensagens: 1541
Offline

"segurar objetos em memória estressa demais o GC baseado em cópia de objetos. A boa pratica de OO já diz que devemos criar pequenos objetos encapsulados, sem muitos dados estáticos, originando instãncias sem nos preocuparmos com caches e outros alegadas otimizações." e tambem que "devemos adequar nossa aplicação a hipótese de gerações".

Muitos livros falam coisas lindas e maravilhosas do mundo conceitual desejável, mas na pratica vemos que as coisas funcionam bem diferentes....
Segue um material no qual eu ja abordei o assunto:
- http://fernandofranzini.wordpress.com/2009/12/16/praticas-de-aplicativos-web/
- http://fernandofranzini.wordpress.com/2011/12/13/a-famosa-falta-de-memoria-java-lang-outofmemoryerror/

This message was edited 1 time. Last update was at 28/12/2011 08:11:17


Fernando Franzini
[Email] [WWW]
vinicius_roc
JavaEvangelist

Membro desde: 12/06/2009 14:18:31
Mensagens: 365
Offline

Muito obrigado pelos esclarecimentos, vou ler o material e analisar a situação para decidir oque fazer.

Abss




Att,

Vinicius Roberto
 
Índice dos Fóruns » Arquitetura de Sistemas
Ir para:   
Powered by JForum 2.1.8 © JForum Team