Un de nos programmes obtient parfois une erreur OutOfMemory
sur la machine d'un utilisateur, mais bien sûr pas quand je la teste. Je l'ai juste couru avec JProfiler (sur une licence d'évaluation de 10 jours parce que je ne l'avais jamais utilisée), et en filtrant sur notre préfixe de code, le plus grand bloc en taille totale et nombre d'instances est de 8000+ instances d'une classe simple particulière .Comment puis-je savoir ce qui se passe sur des objets non-traités?
J'ai cliqué sur le bouton "Garbage Collect" sur JProfiler, et la plupart des instances de nos autres classes ont disparu, mais pas celles-ci en particulier. J'ai recommencé le test, toujours dans le même cas, et cela a créé plus de 4000 instances de la classe, mais quand j'ai cliqué sur "Garbage Collect", ceux-ci sont partis laissant les plus de 8000 originaux.
Ces instances sont bloquées dans diverses collections à différentes étapes. Je suppose que le fait qu'ils ne soient pas collectés doit signifier que quelque chose garde une référence à l'une des collections afin de conserver une référence aux objets.
Des suggestions comment je peux comprendre ce qui tient sur la référence? Je suis à la recherche de suggestions sur ce qu'il faut rechercher dans le code, ainsi que sur les moyens de le trouver dans JProfiler, le cas échéant.
Si vous recherchez un profileur gratuit, je vous suggère de regarder http://jiprof.sourceforge.net/. Peut-être un peu démodé, pas de gui de fantaisie et ainsi de suite, mais travaillant pour la plupart des cas. – dhiller