OutOfMemoryError: Java heap space + org.postgresql.util.PGbytea.toBytes

Boa tarde a todos.

Estou com esse estouro de memória da minha VM.

Do nada apareceu…
E o pior, é que eu já ajustei as configurações de memória no netbeans, no tomcat, e não vai nem por decreto… O estranho, é que ele me retorna essa exeption:

[code]javax.servlet.ServletException: Java heap space
javax.faces.webapp.FacesServlet.service(FacesServlet.java:606)
org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)
root cause

java.lang.OutOfMemoryError: Java heap space
org.postgresql.util.PGbytea.toBytes(PGbytea.java:53)
org.postgresql.jdbc2.AbstractJdbc2ResultSet.getBytes(AbstractJdbc2ResultSet.java:2271)
org.postgresql.jdbc2.AbstractJdbc2ResultSet.getBytes(AbstractJdbc2ResultSet.java:2451)
com.mchange.v2.c3p0.impl.NewProxyResultSet.getBytes(NewProxyResultSet.java:2634)
org.hibernate.type.descriptor.sql.VarbinaryTypeDescriptor$2.doExtract(VarbinaryTypeDescriptor.java:61)
org.hibernate.type.descriptor.sql.BasicExtractor.extract(BasicExtractor.java:64)
org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:254)
org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:250)
org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:230)
org.hibernate.type.AbstractStandardBasicType.hydrate(AbstractStandardBasicType.java:331)
org.hibernate.persister.entity.AbstractEntityPersister.hydrate(AbstractEntityPersister.java:2283)
org.hibernate.loader.Loader.loadFromResultSet(Loader.java:1527)
org.hibernate.loader.Loader.instanceNotYetLoaded(Loader.java:1455)
org.hibernate.loader.Loader.getRow(Loader.java:1355)
org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:611)
org.hibernate.loader.Loader.doQuery(Loader.java:829)
org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:274)
org.hibernate.loader.Loader.doList(Loader.java:2533)
org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2276)
org.hibernate.loader.Loader.list(Loader.java:2271)
org.hibernate.loader.criteria.CriteriaLoader.list(CriteriaLoader.java:119)
org.hibernate.impl.SessionImpl.list(SessionImpl.java:1716)
org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:347)
org.hibernate.impl.CriteriaImpl.uniqueResult(CriteriaImpl.java:369)
br.gov.rr.setrabes.bolsa.dao.DaoUsuarioImpl.usuarioPorNome(DaoUsuarioImpl.java:23)
br.gov.rr.setrabes.bolsa.autenticacao.AutenticadorBean.autentica(AutenticadorBean.java:115)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
java.lang.reflect.Method.invoke(Method.java:601)
org.apache.el.parser.AstValue.invoke(AstValue.java:278)
org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:274)[/code]

Como eu disse, ele funcionava normal. DO NADA, simplemente, DO NADA deu esse pau. No sistema em funcionamento (produção).

Faça um debug das suas classes envolvidas. Não pode ser do nada, veja se o banco está correto, se você não mudou a entidade, se a entidade não tem uma lista que tem muitos valores…
O erro acontece na linha 23 da class DaoUsuarioImpl.

br.gov.rr.setrabes.bolsa.dao.DaoUsuarioImpl.usuarioPorNome(DaoUsuarioImpl.java:23)

Cara, eu tinha implementado a alguns dias a captura de imagens via webcam e gravação no banco postgres (apenas o endereço da imagem), mas isso já estava sendo usado a alguns dias. Reiniciei o postgres e o tomcat e voltou ao normal… (q ainda não é normal pra mim)…
Vou gastar mais um tempo aqui e rever a metodologia de armazenamento e exibição de imagens na aplicação.

Por enquanto, está resolvido. Obrigado.

Observe direitinho, pois campos bytea[] no postgres, são carregados integralmente quando são lidos, diretamente em suas entidades.

Se você for lidar com blobs realmente grandes, vai ter que tomar alguma medida, usar alguma API nativa do driver JDBC para conectar um Stream Lazy, se não, você terá problemas como este mesmo.

[quote=EduFrazao]Observe direitinho, pois campos bytea[] no postgres, são carregados integralmente quando são lidos, diretamente em suas entidades.

Se você for lidar com blobs realmente grandes, vai ter que tomar alguma medida, usar alguma API nativa do driver JDBC para conectar um Stream Lazy, se não, você terá problemas como este mesmo.[/quote]

Sei disso, por isso gravo as imagens em uma pasta no servidor e o acesso a elas é atraves de caminho.