Bonsoir,
Nous modifions une application qui fait de l'openGL dans du JAVA (JOGL c'est donc du JNI) et l'application à une grosse fuite mémoire.
Nous avons bien essayé de profiler la mémoire du point de vue JAVA mais une quantité trés faible de mémoire semble 'visible' (50MBytes profilé alors que le process consomme 2GBytes) du point de vue JAVA ce que j'ai l'impression de comprendre.
Quels outils connaissez-vous ? Quels conseils pour s'attaquer à ça ?
Nous avons audité tout le code plusieurs fois, caractérisé la fuite et cherché quelles parties du code pourraient être responsable sans succès pour l'instant...
J'ai trouvé sur une page web une suggestion de trouver une librairie de remplacement pour malloc, mais j'ai pas trop envie de débugger la JVM ?
# jvm / jni
Posté par steph1978 . Évalué à 3.
Tu as profilé le heap java, c'est ça ?
Et ça parait ok : 50MB d'objets.
Comme tu le suggère, cela peut venir d'un fuite mémoire au niveau JNI, qui n'utilise pas le heap java, comme tu dois le savoir.
Si tu utilises une bibliothèque opengl connu, il y a peu de chance que cela vienne directement de là ; mais à investiguer quand même en furetant sur les forum qui en parle.
Donc cela peut venir de la JVM.
Est ce que tu as essayer de pousser les dernières versions de toutes les briques logicielles que tu utilises ? Est ce que tu as le moyen de tester une autre JVM (Sun JDK, Jrockit, IBM, etc) ?
[^] # Re: jvm / jni
Posté par EraZerg . Évalué à 0.
oui, on a profilé le HEAP java,
nous utilisons JOGL comme librairie....
merci pour le conseil de changer de machine virtuelle JAVA. On va essayer ça.
# destruction d'objet
Posté par bibitte . Évalué à 4.
le truc complexe avec JNI c'est que coté java les objets non référencé sont détruit par le garbage collector.
coté système il faut le faire de façon explicite. j'ai déjà eu de fuite mémoire en faisant du JNI car mes objets étaient bien détruis coté java mais pas coté système (dans mon cas c'était du C++).
Voila c'est pas une grande aide mais ca peu être une piste a creuser.
[^] # Re: destruction d'objet
Posté par EraZerg . Évalué à 0.
merci pour ta réponse.
on a quatre coupables potentiels:
1) notre code JAVA: improbable vu le profil JAVA
2) la JVM elle même: improbable, vérifiable en changeant de JVM (suggestion précédent commentaire)
3) le code natif JOGL
4) l'implémentation opengl (drivers/librairies bas niveau...)
pas façile de prouver 3 ou 4.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.