2008-09-20 10 views
6

Je travaille sur une application volumineuse (300K LOC) qui provoque une fuite de mémoire dans la JVM 1.6 de Sun 1.6 (1.6_05). Le profilage du Java ne montre aucune fuite. Y a-t-il des diagnostics disponibles auprès de la JVM qui pourraient détecter la cause de la fuite?
Je n'ai pas été capable de créer un cas de test Java simple et isolé. Est le seul moyen de comprendre cela en utilisant un analyseur de tas C sur la JVM?
L'application crée un pool de sockets et effectue une quantité importante d'E/S réseau.Comment diagnostiquer une fuite dans la mémoire C causée par un programme Java?

Répondre

2

Certains profileurs comme profiler4j peuvent afficher la mémoire gérée et non gérée (courbe dynamique). Ensuite, vous pouvez voir si vous avez une fuite et quand la fuite se produit. Mais vous ne trouvez pas plus d'informations.

Après cela, il y a 2 solutions possibles:

  1. Vous pouvez la courbe en temps réel isoler le problème et créer un test plus simple jusqu'à ce que vous avez trouver la cause du problème.
  2. Vous recherchez votre code pour les problèmes typiques tels que:
    1. Les instances de la classe Thread qui ne sont jamais commencer.
    2. images ou des graphiques qui ne sont Éliminez
    3. pont ODBC objets qui ne sont jamais près
0

I love valgrind (http://valgrind.org/), si vous exécutez sur un système prend en charge. Ça berce vraiment!