Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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 roll

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 big_smile

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