boaglio:
Então, mas se eu definir um cache muito grande o que pode acontecer?
Na criação do cache levar um belo OutOfMemory?
Se você instancia tudo “de uma vez só”, só corre o risco de levar OutOfMemoryError quando a aplicação carregar, repois não tem mais isso não (a não ser que a quantidade seja tão grande que não dê espaço pra aplicação utilizar memória).
Você não pode simplesmente usar ou não, vai ter que testar (inclusive com testes de carga mesmo) pra ver como a aplicação vai funcionar, não dá pra usar cache simplesmente por usar, especialmente se for interessante que a aplicação seja escalável, caches não são uma boa idéia para quem quer deixar aplicações escaláveis (a não ser que você use um cache distribuído, o que fica ainda mais complicado).
Se a coisa é simples, carregar todos os objetos no banco de dados e mais nada (eles só vão ser vistos e não alterados) basta carregar tudo em coleções e pronto, não precisa se preocupar muito com isso não. Agora se você quer carregar objetos “sob demanda” a coisa muda de figura e é bom pensar no Hibernate pra fazer a persistência (pelo menos desses objetos) ou usar um framework de cache como o EhCache, ele é bem simples de usar e entender, não tem mágica não 