Bonjour,

me voilà aujourd'hui avec un problème qui hante pas mal de dévelopeurs... le célèbre OutOfMemoryError : PermGen Space...
Donc usage d'un profiler oblige, je traque mes objets, et découvre qu'un de mes objets (une classe hibernate pour être précis!) qui est utilisé pour remplir une Datatable se multiplie à chaque rechargement de la table... et ne désemplit jamais (même si je force le garbage collector à faire son boulot).

J'ai dans mon appli deux tables du même genre remplies avec les mêmes objets :
  • La première utilise un ExtendedDataModel pour réaliser une "vraie" pagination
  • La Seconde est simplement liée à une "List" (sans dataModel).


Après une série de tests, je constate que tout se passe normalement dans le second cas (les objets créés sont effacés par le ramasse miettes lorsque la table n'est plus affichée).
Dans le premier cas, en revanche, (celui qui fait l'objet de ma question) mes objets se multiplient à chaque rechargement de la table...

J'ai pris l'exemple fourni par richfaces (ici) qui est à peu de choses près identique à mon cas (à l'objet de ligne près en gros).

Il y a beaucoup de choses qui gravitent ici (le modèle, la table, les technos, etc.), et je ne suis pas certain que tout coller ici simplifierait la compréhension. Dans le cas contraire, je fournirai volontiers le bout de code ou l'info qui manque.

Pour résumer le problème : mes objets s'accumulent en mémoire à un ratio qui n'est même pas un multiple du nombre d'objets affichés (ou existant en base)... et ne sont pas nettoyés par le garbage collector!

Bref... si vous avez des idées ou avez déjà expérimenté un problème similaire, je suis preneur pour toute piste!


PS : il s'agit d'un problème lié à la session exclusivement puisque le fait de me déconnecter rend tous les objets concernés bons à ramasser par le GC.