Bonjour à tous,
je travail sur une application de dessin en Java/Swing qui permet, entre autres, d'exporter en PDF (grâce à iText) le canevas réalisé. Mais j'ai des difficultés à gérer efficacement ma mémoire.
Déjà, voilà ce que je comprends de la mémoire. Arrêtez-moi si je me trompe. Pour chaque zone de la mémoire (Eden and Tenured) il y a :
- La mémoire utilisée (used) réellement consommée par la JVM ;
- La mémoire réservée (comitted) elle est extensible et empiète au besoin sur la partie "virtual". C'est la mémoire que semble voir le gestionnaire de tâches sous windows par exemple ;
- La mémoire maximale (max) pouvant être utilisée. Au délà => Java Heap Space error :-)
Le problème que je rencontre concerne la mémoire réservée "committed" parce qu'elle s'étend si j'en besoin, mais ne se réduit pas quand on je n'en ai plus besoin.
En temps normal mon application consomme peu de mémoire, mais ponctuellement lors de l'export en PDF, la mémoire réservé peut atteindre 300 ou 400Mo et ne redescend pas une fois l'action terminée, bien que la mémoire utilisée (used) retombe à moins de 10Mo :
Ce qui fait que, dans le gestionnaire de tâches de Windows, mon appli commence à 10Mo de RAM et se termine à 450Mo... Pas terrible !
Savez-vous comment gérer la mémoire de manière à ce que la partie réservée de l'Eden ou du Tenured s'étende et se réduise en fonction des besoins de l'appli ?
De manière général, c'est un topic de discussion sur la gestion et l'optimisation de la mémoire avec Java.
Merci de vos avis éclairés
Partager