2010-05-05 4 views
2

Dans mon application Java SE, j'ai utilisé Hibernate 3.3.2 et la création de SessionFactory a pris environ 5 secondes.Comment la création de SessionFactory peut-elle devenir lente après la mise à jour d'Hibernate?

Aujourd'hui, j'ai mis à jour vers Hibernate 3.5.1 et tout à coup cela prend plus d'une minute.

Quelle peut être la cause d'un tel effet dramatique?

J'ai essayé différentes choses de la meilleure partie de la journée et je n'ai pas la moindre idée ...

Certaines données Je collectionnais

  • Selon le profileur le plus de temps est consacré à PersisterFactory.createClassPersister et dans cette méthode ProxyFactory.createClass prend le plus de temps.
  • Le journal montre rien d'inhabituel
  • Changer hibernate.bytecode.use_reflection_optimizer ne fait aucune différence
+0

activer le débogage pour org.hibernate et voir si quelque chose de suspect se pose – Bozho

+0

Je l'ai fait, j'ai oublié de le mentionner. –

Répondre

1

OK, c'était absolument stupide et ça n'avait rien à voir avec Hibernate, mais je vais quand même répondre à cette question, car ça pourrait empêcher les autres de faire les mêmes erreurs. .

  1. Création du SessionFactory Hibernate 3.5 est pas plus lent.
  2. Lors de la création de SessionFactory, des milliers d'appels de méthodes sont nécessaires pour initialiser Hibernate.
  3. Chacun de ces appels de méthode semble produire une petite surcharge pour le profileur et le débogueur. Le compilateur JIT est également désactivé pendant le débogage.
  4. La première fois que j'ai remarqué la lenteur, je passais à travers le code et tous les tests suivants ont été effectués en utilisant un profileur.
  5. J'ai seulement remarqué cela parce que dans la frustration je viens de courir l'application sans aucune intention de poursuivre le problème.
0

Er n'y a jamais eu Hibernate 3.4. Hibernate 3.3.2 était la dernière version publique avant Hibernate 3.5

+2

Ahhhh, c'est pourquoi l'OP rencontre ce problème;) –

+0

J'ai re-vérifié et oui c'était 3.3.2 –

+0

Essayez de réduire le nombre de classes mappées en ressources pour voir si vous pouvez isoler le problème. Par exemple, mappez uniquement une classe et une heure et comparez-la à l'ancien code. – MJB

Questions connexes