2009-05-06 7 views

Répondre

5

Vous pouvez essayer le détecteur de fuite de mémoire fourni avec JRockit Mission Control et Eclipse MAT. C'est une combinaison puissante. Les deux outils sont libres d'utiliser pour le développement. Avec JRockit Mission Control, vous pouvez inspecter le tas en ligne et voir le nombre exact d'objets d'un certain type qui sont en direct, sans avoir besoin de prendre d'instantanés. Vous pouvez directement voir si vous avez un objet Editeur, Vue ou écouteur laissé sur le tas après avoir fermé la vue/l'éditeur. C'est généralement un écouteur de framework qui tient dans votre vue/éditeur. Rappelez-vous, vous devez aller à Windows-> Préférences-> Détecteur de fuite de mémoire-> Tendance et définir Utilisation du tas le plus bas pour signaler à 0.0 pour voir toutes les instances d'objet.

alt text http://download.oracle.com/docs/cd/E11035_01/jrockit/intro/wwimages/memleak2.gif

Avec MAT vous pouvez alors utiliser le chemin le plus court pour enfiler la racine pour trouver la chaîne qui tient à l'objet de fuite.Voir ci-dessous

alt text http://dev.eclipse.org/blogs/memoryanalyzer/files/2008/04/path2gc_all.png

Modifier votre code et vérifier avec le détecteur de fuite de mémoire que l'objet est nettoyé lorsque vous fermez l'éditeur/vue.

3

Vous avez besoin d'un outil de profilage. Il existe un projet Memory Analyzer à eclipse (wiki, blog).

En outre, il semble que TPTP effectue également le profilage.

0

Si vous êtes sur Windows, la manière la plus simple est simplement de surveiller, par ex. eclipse.exe processus dans le Gestionnaire des tâches lors de l'utilisation de l'outil. Si votre exécutable RCP a un nom différent, alors c'est ce que vous aurez besoin de surveiller. Sur Unix, vous pouvez utiliser un outil analogue (proc peut-être?). Effectuer les tâches les plus intensives disponibles (ou si vous pensez que certaines fonctions causent le problème, utilisez celles-ci). SI la quantité de mémoire utilisée par eclipse.exe augmente ne diminue pas finalement après que vos tâches intensives ont terminé alors vous avez probablement une fuite. Cela entraînera éventuellement une erreur de mémoire insuffisante.

Vous pouvez accélérer une erreur de mémoire insuffisante en réduisant la quantité de mémoire disponible pour l'application via le paramètre "-Xmx" dans eclipse.ini (ou .ini). Par exemple. -Xmx256m signifie qu'un maximum de 256 mégaoctets est disponible. Évidemment, ce paramètre doit toujours être suffisant pour exécuter votre application, mais un paramètre inférieur forcera la collecte plus fréquente des ordures et rendra les fuites plus apparentes.

0

Vous avez besoin d'un profileur de mémoire (comme d'autres l'ont mentionné.) Une fois que vous avez un bon outil, vous pouvez trouver les problèmes assez facilement.

Nous utilisons: http://www.yourkit.com/

pour nos tests, il fonctionne très bien, a des licences flottantes afin devs peuvent l'utiliser localement sur leurs machines. Fondamentalement, vous prenez un instantané des actions que vous prenez, puis regardez les éléments qui ont été alloués et non libérés.

Editer: J'ai oublié d'ajouter, cet outil s'intègre directement à Eclipse.