#1 Le 20/08/2007, à 18:50
- alexduf
[Résolu] [Java] [openGL] Fuite de mémoire
Bonjour,
Je développe un petit soft, et je suis actuellement confronté à un problème fâcheux.
Lors d'une première version, j'avais développé un moteur graphique à la va-vite, qui avait le mérite de fonctionner ^^ (et de décharger correctement mes textures)
J'ai depuis intégralement reprogrammé la partie graphique, et je constate une (grosse) fuite de mémoire.
je m'explique : le soft que je développe charge des pochettes d'album en fonction des besoins (max 20 pochettes de chargées)
Pour mieux voir l'utilité du soft, c'est par là : moobu.free.fr/wiki
Grosso modo, a chaque mouvement de la part de l'utilisateur, on charge une image, et on en décharge une. Le problème c'est que j'ai beau décharger mes textures, la mémoire reste allouée, ce qui fait qu'au fur et à mesure des actions de l'utilisateur la mémoire se charge comme une mule (je suis monté facilement à 300Mo !! alors qu'avec l'ancienne version je montait grand max à 60Mo)
je sais donc que c'est possible, vu que j'y suis déjà arrivé, mais je n'arrive pas à voir d'où vient mon problème.
Ma question est donc la suivante : existe-t-il un moyen d'examiner une JVM pour connaître le nombre d'objets de tel ou tel type?
Un peu d'aide serait bienvenue, là je sais plus vraiment par quel bout examiner mon problème
Dernière modification par alexduf (Le 21/08/2007, à 19:18)
Hors ligne
#2 Le 20/08/2007, à 20:05
- LarTicK
Re : [Résolu] [Java] [openGL] Fuite de mémoire
Salut,
Tu as essayé de déclencher manuellement le garbage collector ? C'est peut être idiot comme suggestion, je ne m'y connais pas trop en gestion mémoire. Surtout en java qui pour moi gère ça tout seul comme un grand. Mais il me semble que c'est le GC qui devrait libérer la mémoire dans ces cas là.
Hors ligne
#3 Le 20/08/2007, à 20:14
- alexduf
Re : [Résolu] [Java] [openGL] Fuite de mémoire
oui oui j'ai essayé de le déclancher à divers moments, sans succès :-(
Hors ligne
#4 Le 20/08/2007, à 23:08
- obiwankennedy
Re : [Résolu] [Java] [openGL] Fuite de mémoire
regarde du coté des "profiler" java. Il analyse les programmes java en execution sinon il y a moyen de dire à la JVM de sortir un fichier d'analyse qui décrit le fonctionnement l'option si ma mémoire est bonne (sans mauvais jeu de mots)
il y a peut être des erreurs:
java -Xrunhprof;cpu=sample,deth=15,file=prof0.txt ma_classe
enfin voilà j'espère que ça va t'aider.
Dans mes logiciels, j'écris ton nom.
SGNGD: SvgGd is Not GD
Rolisteam
Hors ligne
#5 Le 21/08/2007, à 08:18
- highflyer
Re : [Résolu] [Java] [openGL] Fuite de mémoire
Une solution est d'utiliser jconsole (outil en mode graphique fourni avec le jdk 1.5+, pas tout a fait un profileur mais bien utile) pour surveiller entre autre la consommation mémoire. Il faut ajouter l'argument -Dcom.sun.management.jmxremote au lancement de la jvm. Tu peux demander un GC en appuyant sur un bouton.
Le GC ne peut pas libérer de la mémoire s'il reste des références non null vers des objects. Sauf en utilisant des references de type SoftReference, WeakReference et PhantomReference qui peuvent (selon des conditions differentes pour chacunes) etre GC. Ces references sont typiquement utilisees dans des caches memoire qui permettent de liberer des objects automatiquement en cas de manque de memoire. Il existe aussi des libraries comme JCS ou OSCache qui permettent de gerer un cache memoire/disque et de swapper automatiquement.
#6 Le 21/08/2007, à 19:20
- alexduf
Re : [Résolu] [Java] [openGL] Fuite de mémoire
Yesss
Avec Tijmp j'ai pu trouver ma fuite. (je ne savais pas ce qu'était un profiler avant ces posts)
une bête erreur de logique de ma part ^^, comme toujours hein, l'origine des bugs c'est l'homme.
Merci !
Hors ligne