2010-09-23 5 views
1

Pardonnez la question de débutant.cause la plus fréquente d'erreurs OutOfMemory lors de l'utilisation d'Hibernate?

Mon modèle de données est très simple (deux tables, 200 lignes dans une, 10 000 dans l'autre, jointure naturelle entre les deux).

J'utilise Hibernate pour tenter une lecture/mise à jour simple sur ces tables. Cela continue à générer des erreurs OutOfMemory (1 Go affecté à ma machine virtuelle Java).

Cela semble très peu probable en raison des besoins de mémoire naturels, et plus susceptibles que je suis une étape de base omets en veille prolongée.

Je suis au point où je l'ai même remplacé la plupart de mon objet réel de mise en veille prolongée avec les accès SQL directe (absurde, je sais). Mais même getCurrentSession(). CreateSQLQuery (...) entraîne des erreurs de MOO.

Quelqu'un peut-il me diriger dans la bonne direction?

Répondre

2

cause la plus fréquente d'erreurs OutOfMemory lors de l'utilisation d'Hibernate?

Une cause commune de OOM est un manque de contrôle de la taille du cache niveau de la session (en appelant flush et clear sur le session à intervalles réguliers, idéalement, le même intervalle que la taille du lot JDBC) lorsque traiter de grandes collections d'entités. Voir le Chapter 13. Batch processing pour plus à ce sujet.

Mais votre cas n'est pas si impressionnant. Que faites-vous exactement? Et comment (même pseudo code pourrait aider)?

+0

Je n'appelle pas clear() du tout, LOL. Je vais vérifier ça, merci. –

+0

@Aaron Note que la plupart du temps, vous n'avez pas besoin de "micro-gérer" la session comme ça. Ceci n'est utile que lorsque vous commencez à traiter de grandes quantités d'entités (c'est pourquoi je voulais avoir quelques détails sur votre scénario exact). Mais la documentation vous donnera une idée. –

+0

Le code est trop volumineux pour être publié. Puis-je vous envoyer directement, d'une manière ou d'une autre? –

Questions connexes