out of mem - Java - Programmation
Marsh Posté le 13-06-2007 à 10:48:58
verifie que tes objets ne sont plus referencés du tout , a la limite, force l'appel du rammasse miette ( system.gc il me semble )
Marsh Posté le 13-06-2007 à 10:56:11
Cet appel ne garantit pas que tous les objets inutiles seront supprimés de la mémoire, je cherche quelque chose de vraiment bourrin, un commando d'elite, un truc qui efface tout
Marsh Posté le 13-06-2007 à 11:44:05
le rm pointe sur un repertoire???
je peut lancer cette commande a partir de mon code java??
un rm ca semble quand même extrem na???
Marsh Posté le 13-06-2007 à 11:46:57
ah ouai c sympa comme commande.... desolé de pas avoir capté la blague plus tot....
Marsh Posté le 13-06-2007 à 12:02:20
ben le garbage collector
tu veux quoi de plus ? qu'il vire les objets encore utilisés ?
le garbage collector vire tous les objets qui ne sont plus referencé
apres, il faut peut etre te poser des questions sur ton code
Marsh Posté le 13-06-2007 à 12:05:24
flo850 a écrit : verifie que tes objets ne sont plus referencés du tout |
+++++
envisage l'usage de weak references
vérifie la quantité de mémoire autorisée pour ta JVM
Le problème ne viens PAS du GC selon 99% de vraissemblance, toute recherche en ce sens est vaine.
Marsh Posté le 13-06-2007 à 12:06:00
mon system.gc marche parfois
j'ai des system.gc un peu partout
j'affiche la memoire utilisé a chaque iteration et elle ne cesse d'augmenter jusqu'a saturation du serveur...
Marsh Posté le 13-06-2007 à 12:08:00
j'ai pensé a un truk de ce genre la :
java -Xms128m -Xmx256m
mais ca ne change rien ca met simplement plus de temps à se remplir
Marsh Posté le 13-06-2007 à 12:09:50
c'est donc bien ton code qui continent des fuites de mémoire
Marsh Posté le 13-06-2007 à 12:10:54
vashkiry a écrit : mon system.gc marche parfois |
ça sert à rien ça.
vérifie que tu ne reférence pas trop d'objets. Si tu ne peux pas faire autrement, apprends la notion de WeakReference
http://java.sun.com/j2se/1.4.2/doc [...] rence.html
Marsh Posté le 13-06-2007 à 13:38:38
Code :
|
WeakReference m'aime pas trop
Marsh Posté le 13-06-2007 à 13:39:44
c'est la méthode principale de ma classe, elle apelle différentes autres methodes . c'est le code MIDP qui appelle cette methode sur le serveur
Marsh Posté le 13-06-2007 à 13:48:15
je peux me tromper, mais appeler system.gc à tout bout de champ, a me semble pas être un signe de grande qualité du code.
tu peux peut-être utiliser un profiler et voir quels sont les objets qui s'amoncèlent, ça te donnerai la voie vers où chercher.
Marsh Posté le 13-06-2007 à 13:58:51
ouai mais comment je test ca avec mon .class qui sexecute sur un serveur?
Marsh Posté le 13-06-2007 à 14:31:29
ah bah bien sur ! suis je bete....
profilons nos serveurs, pendant ce temps je vais chercher une corde
Marsh Posté le 13-06-2007 à 14:35:43
deja , quand je vois ca
Code :
|
je me demande pourquoi tu appelle imageIconToByteArray(img3) deux fois, pourquoi tu instancie img3 ( un imageIconToByteArray(new ImageIcon(img2))) fera pas de mal
Marsh Posté le 13-06-2007 à 14:47:50
euh ouai, mais c'est un choix de programmeur je part du princip que si je l'appelle plusieurs fois et bien c'est plus simple de manipuler img3 que new ImageIcon(img2)
Marsh Posté le 13-06-2007 à 15:07:29
vashkiry a écrit : euh ouai, mais c'est un choix de programmeur je part du princip que si je l'appelle plusieurs fois et bien c'est plus simple de manipuler img3 que new ImageIcon(img2) |
sauf que dans ce contexte, tu ne l'appelle qu'une fois , c'est transition que tu appelle deux fois
Marsh Posté le 13-06-2007 à 15:13:33
vashkiry a écrit : ah bah bien sur ! suis je bete.... |
tu découvres le travail ?
quand tu profiles ton serveur, tu exclus les classes de ton serveur.
vu la quantité de topics que tu crées depuis 15jours, tu pourrais être plus coopératif...
Marsh Posté le 13-06-2007 à 15:20:53
la variété et la quantité de mes topics est bien la preuve que j'essaie de travailler. j'aprecie vraiment votre aide mais mes competences et mon temps n'étant pas infini il n'est pas toujours possible de tout essayer....surtout quand c'est lourd.
Flo>> exact j'ai parlé trop vite
Marsh Posté le 13-06-2007 à 15:24:21
le but, c'est aps non plus qu'on fasse le taf a ta place, mais qu'on te donne des pistes
Marsh Posté le 13-06-2007 à 15:30:03
oui, j'aime le ski mais unikement les pistes vertes et bleues
Marsh Posté le 13-06-2007 à 15:42:00
ok , merci , va continuer a pondre tes merdes gangrénées et a ne pas vouloir changer tes pratiques
Marsh Posté le 13-06-2007 à 15:50:42
le terme pratique est un peu vaste.. si tu parle de mon code html effectivement ce n'est pas mon fort mais je ne risque pas d'en refaire de si tot. mon taff est tres varié et j'essaie d'optimiser au mieu mon temps de travail. je suis donc desolé de ne pouvoir tester tous vos conseils faute de temps.
Marsh Posté le 17-06-2007 à 13:51:50
Appeler System.gc() n'empêche en rien les OutOfMemoryError, pour la bonne et simple raison que la JVM appelle System.gc() avant de lancer une OutOfMemoryError.
Soit il y a une memory leak quelque part, soit tu utilises plus de mémoire que tu n'en as alloué à ta JVM.
Passe l'option -Xmx<MEMSIZE>M pour spécifier une valeur plus grande que celle par défaut (64M je pense). Si ca continue de planter, même si tu rajoutes toujours plus de mémoire, il y a fort à parier que tu fais quelque chose de paaaabien et que ça provoque une memory leak.
Marsh Posté le 18-06-2007 à 09:46:24
quelque chose de pas bien ouai merci j'en étais à ce point du raisonnement.
Marsh Posté le 13-06-2007 à 10:45:19
bonjour,
j'ai une classe ImageManager qui gere différents types d'image ( Image, BufferedImage , ImageIcon etc etc )
je passe d'un type à l'autre dans chaque fonction qui travail sur ces images ( redimensionnement , rotation , recherche ...)
ces images sont envoyé ensuite sur du MIDP (peut importe...)
le probleme que j'ai avec cette classe est le suivant : j'ai un out of memorie sur le serveur ou est cette classe apres l'envoi de plusieurs centaines d'images, ces putin d'images sont allouées et le ramasse miette ne fonctionne pas ce qui blinde la ram du serveur en 2-2...
avez vous une solution ???
merci
guigui