2010-11-16 13 views
0

Salut Je rencontre un phénomène étrange.Gestion de la mémoire JVM sous Unix/Linux

J'ai une application Java qui interroge la base de données au moyen de Hibernate ORM.

Dans HP-UX sgx842 B.11.11 U 9000/800 888281448 unlimited-user license après avoir démarré le serveur et effectué quelques requêtes de quelques milliers d'enregistrements, la taille du segment se stabilise à 800 Mo.

Dans Linux sglx481.amk.st.com 2.6.9-34.ELsmp #1 SMP Fri Feb 24 16:56:28 EST 2006 x86_64 x86_64 x86_64 GNU/Linux la mémoire explose jusqu'à la mémoire JVM maximale (définie par l'option -Xmx). Cependant, le système ne ralentit pas et peut toujours exécuter des requêtes. Il n'y a pas d'exception OutOfMemoryError. Il n'y a pas de baisse apparente de performance visuellement, même si je n'ai pas utilisé d'outil.

Il n'y a pas non plus de problème sous Windows.

En veille prolongée, je n'utilise pas d'annotations mais j'ouvre et ferme manuellement la session et la traduction.

sessionFactory = new Configuration().configure(CONFIG_FILE_LOCATION).buildSessionFactory(); 
session = sessionFactory.getSessionFactory().openSession(); 


session.beginTransaction(); 
... 
session.close(); 

Répondre

1

Voici à quoi ressemble un temps d'exécution collecté. La mémoire est rapide, mais la collecte des ordures ralentit les choses, il n'y a donc aucune raison de ne pas utiliser toute la mémoire disponible, et d'éviter de ramasser des ordures à moins que vous n'en ayez réellement besoin.