j'ai un petit bout de programme qui consiste en une classe View
héritant de Jframe qui doit permettre de traiter et visualiser
successivement les images d'un directory.
Après "un certain" nombre d'images ~20 j'ai une OutOfMemoryError.
Sorry, je n'ai pas de réponse directe. A ta place, j'utiliserais un profiler, histoire de suivre un peu de déroulement des histoires et de voir ce qui n'est pas libéré.
Une liste de profilers : http://pharos.inria.fr/Java/query.jsp?text=profiler
HTH Sébastien Libert.
"oliv" <o.chararas@blockhead.online.fr> a écrit dans le message de news:
bnuj4e$b1p$1@news-reader5.wanadoo.fr...
Après "un certain" nombre d'images ~20 j'ai une OutOfMemoryError.
Sorry, je n'ai pas de réponse directe. A ta place, j'utiliserais un
profiler, histoire de suivre un peu de déroulement des histoires et de voir
ce qui n'est pas libéré.
Une liste de profilers : http://pharos.inria.fr/Java/query.jsp?text=profiler
Sorry, je n'ai pas de réponse directe. A ta place, j'utiliserais un profiler, histoire de suivre un peu de déroulement des histoires et de voir ce qui n'est pas libéré.
Une liste de profilers : http://pharos.inria.fr/Java/query.jsp?text=profiler
HTH Sébastien Libert.
oliv
Libert Sébastien wrote:
Sorry, je n'ai pas de réponse directe. A ta place, j'utiliserais un profiler, histoire de suivre un peu de déroulement des histoires et de voir ce qui n'est pas libéré.
Une liste de profilers : http://pharos.inria.fr/Java/query.jsp?text=profiler
Merci pour ta réponse, je vais en effet aller voir.
Entretemps, d'après ce que j'ai pu trouver ici et là, j'ai essayé de rajouter a View :
public void dispose() { image.flush(); image = null; System.gc(); }
et de l'appeler avant chaque changement d'image, mais ça ne change rien.
-- Olivier This space for sale.
Libert Sébastien wrote:
Sorry, je n'ai pas de réponse directe. A ta place, j'utiliserais un
profiler, histoire de suivre un peu de déroulement des histoires et de voir
ce qui n'est pas libéré.
Une liste de profilers : http://pharos.inria.fr/Java/query.jsp?text=profiler
Merci pour ta réponse, je vais en effet aller voir.
Entretemps, d'après ce que j'ai pu trouver ici et là, j'ai essayé de
rajouter a View :
public void dispose() {
image.flush();
image = null;
System.gc();
}
et de l'appeler avant chaque changement d'image, mais ça ne change rien.
Sorry, je n'ai pas de réponse directe. A ta place, j'utiliserais un profiler, histoire de suivre un peu de déroulement des histoires et de voir ce qui n'est pas libéré.
Une liste de profilers : http://pharos.inria.fr/Java/query.jsp?text=profiler
Merci pour ta réponse, je vais en effet aller voir.
Entretemps, d'après ce que j'ai pu trouver ici et là, j'ai essayé de rajouter a View :
public void dispose() { image.flush(); image = null; System.gc(); }
et de l'appeler avant chaque changement d'image, mais ça ne change rien.
Je vais peut-être dire une connerie mais si ta classe View hérite de JFrame je crois qu'à chaque fois que tu fais un new JFrame tu creés effectivement une nouvelle fenêtre sans détruire le précédente car la fenêtre est crée dans un autre thread que ton main() et donc même quand tu fais view=null elle n'est pas libérée car encore référencée dans l'autre thread. Il faut peut-être que tu provoque la destruction de la fenêtre par un view.dispose() je crois.
Mais bon comme je l'ai déjà dit c'est peut-être une connerie car ça fait peu de temps que j'utilise java.
Je vais peut-être dire une connerie mais si ta classe View hérite de
JFrame je crois qu'à chaque fois que tu fais un new JFrame tu creés
effectivement une nouvelle fenêtre sans détruire le précédente car la
fenêtre est crée dans un autre thread que ton main() et donc même quand
tu fais view=null elle n'est pas libérée car encore référencée dans
l'autre thread. Il faut peut-être que tu provoque la destruction de la
fenêtre par un view.dispose() je crois.
Mais bon comme je l'ai déjà dit c'est peut-être une connerie car ça fait
peu de temps que j'utilise java.
Je vais peut-être dire une connerie mais si ta classe View hérite de JFrame je crois qu'à chaque fois que tu fais un new JFrame tu creés effectivement une nouvelle fenêtre sans détruire le précédente car la fenêtre est crée dans un autre thread que ton main() et donc même quand tu fais view=null elle n'est pas libérée car encore référencée dans l'autre thread. Il faut peut-être que tu provoque la destruction de la fenêtre par un view.dispose() je crois.
Mais bon comme je l'ai déjà dit c'est peut-être une connerie car ça fait peu de temps que j'utilise java.
-- batyann811
Libert Sébastien
Salut !
Tu trouveras sur http://mindprod.com/jgloss/dispose.html un petit résumé des bonnes habitudes pour bien libérer des (J)Frame. En gros, il conseille surtout de redéfinir dispose et de bien penser à tout libérer (listeners, etc.) De nouveau, pour ne rien oublier... hop un bon profiler ;-)
HTH Sébastien Libert.
Salut !
Tu trouveras sur http://mindprod.com/jgloss/dispose.html un petit résumé des
bonnes habitudes pour bien libérer des (J)Frame.
En gros, il conseille surtout de redéfinir dispose et de bien penser à tout
libérer (listeners, etc.)
De nouveau, pour ne rien oublier... hop un bon profiler ;-)
Tu trouveras sur http://mindprod.com/jgloss/dispose.html un petit résumé des bonnes habitudes pour bien libérer des (J)Frame. En gros, il conseille surtout de redéfinir dispose et de bien penser à tout libérer (listeners, etc.) De nouveau, pour ne rien oublier... hop un bon profiler ;-)
HTH Sébastien Libert.
oliv
batyann811 wrote:
Je vais peut-être dire une connerie mais si ta classe View hérite de JFrame je crois qu'à chaque fois que tu fais un new JFrame tu creés effectivement une nouvelle fenêtre sans détruire le précédente Non, c'est bien comme ça que je vois les choses et c'était voulu, mais
il faudra peut-être plutôt changer ce "design" car ...
Il faut peut-être que tu provoque la destruction de la fenêtre par un view.dispose() je crois. ... même en appelant dispose (et je réponds aussi à SL qui m'a orienté
Je vais regarder avec un profiler et ne pas recréer à chaque fois une JFrame.
Merci pour l'aide en tout cas.
-- Olivier This space for sale.
batyann811 wrote:
Je vais peut-être dire une connerie mais si ta classe View hérite de
JFrame je crois qu'à chaque fois que tu fais un new JFrame tu creés
effectivement une nouvelle fenêtre sans détruire le précédente
Non, c'est bien comme ça que je vois les choses et c'était voulu, mais
il faudra peut-être plutôt changer ce "design" car ...
Il faut peut-être que tu provoque la destruction de la
fenêtre par un view.dispose() je crois.
... même en appelant dispose (et je réponds aussi à SL qui m'a orienté
Je vais peut-être dire une connerie mais si ta classe View hérite de JFrame je crois qu'à chaque fois que tu fais un new JFrame tu creés effectivement une nouvelle fenêtre sans détruire le précédente Non, c'est bien comme ça que je vois les choses et c'était voulu, mais
il faudra peut-être plutôt changer ce "design" car ...
Il faut peut-être que tu provoque la destruction de la fenêtre par un view.dispose() je crois. ... même en appelant dispose (et je réponds aussi à SL qui m'a orienté
Je vais regarder avec un profiler et ne pas recréer à chaque fois une JFrame.
Merci pour l'aide en tout cas.
-- Olivier This space for sale.
oliv
Libert Sébastien wrote:
Tu trouveras sur http://mindprod.com/jgloss/dispose.html un petit résumé des bonnes habitudes pour bien libérer des (J)Frame. En gros, il conseille surtout de redéfinir dispose et de bien penser à tout libérer (listeners, etc.) Merci mais dispose() n'a pas suffi. En fait, comme les images sont
traitées successivement, j'ai laissé tomber l'approche 1 view / 1 image : je crée une seule view au début et je mets les images dedans. Et ça a l'air de marcher...
De nouveau, pour ne rien oublier... hop un bon profiler ;-) Oui, c'est l'occasion de me familiariser à ça surtout dans le contexte
d'un petit pgm tout simple.
Merci.
-- Olivier This space for sale.
Libert Sébastien wrote:
Tu trouveras sur http://mindprod.com/jgloss/dispose.html un petit résumé des
bonnes habitudes pour bien libérer des (J)Frame.
En gros, il conseille surtout de redéfinir dispose et de bien penser à tout
libérer (listeners, etc.)
Merci mais dispose() n'a pas suffi. En fait, comme les images sont
traitées successivement, j'ai laissé tomber l'approche 1 view / 1
image : je crée une seule view au début et je mets les images dedans.
Et ça a l'air de marcher...
De nouveau, pour ne rien oublier... hop un bon profiler ;-)
Oui, c'est l'occasion de me familiariser à ça surtout dans le contexte
Tu trouveras sur http://mindprod.com/jgloss/dispose.html un petit résumé des bonnes habitudes pour bien libérer des (J)Frame. En gros, il conseille surtout de redéfinir dispose et de bien penser à tout libérer (listeners, etc.) Merci mais dispose() n'a pas suffi. En fait, comme les images sont
traitées successivement, j'ai laissé tomber l'approche 1 view / 1 image : je crée une seule view au début et je mets les images dedans. Et ça a l'air de marcher...
De nouveau, pour ne rien oublier... hop un bon profiler ;-) Oui, c'est l'occasion de me familiariser à ça surtout dans le contexte