Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2424 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  [Résolu] OutOfMemoryException et programmation multi-threads

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Résolu] OutOfMemoryException et programmation multi-threads

n°1476615
D@RKWoodiu​s
Posté le 16-11-2006 à 16:10:39  profilanswer
 

Bonjour,
 
Je suis en train d'implémenter un serveur web sous java où je crée un thread par socket cliente...
 
Le problème est que au bout de X connexions (environ 100) les unes après les autres (meme pas concurrentes), la JVM me renvoie un OutOfMemoryException : java heap size... Que faire?
 
Je ferme pourtant bien tous mes flux d'entrées/sorties et mes sockets à la fin de chaque Thread et (sauf si Exception) et j'ai vérifié, tous mes threads finis sont en état TERMINATED, donc je comprends pas pourquoi -à priori- la JVM ne désalloue pas la mémoire qu'a occupé ces threads...
 
Merci de m'éclairer et si je suis pas assez clair dans la description de mon problème de me demander où je pourrai apporter des explications...
++


Message édité par D@RKWoodius le 20-11-2006 à 18:01:31
mood
Publicité
Posté le 16-11-2006 à 16:10:39  profilanswer
 

n°1476624
Taz
bisounours-codeur
Posté le 16-11-2006 à 16:15:55  profilanswer
 

tu join bien tes threads ?

n°1476631
D@RKWoodiu​s
Posté le 16-11-2006 à 16:20:37  profilanswer
 

joindre mes threads? qu'est ce que ca veut dire?
 
++

n°1476644
Taz
bisounours-codeur
Posté le 16-11-2006 à 16:29:21  profilanswer
 

RTFM

n°1476648
D@RKWoodiu​s
Posté le 16-11-2006 à 16:32:08  profilanswer
 

hein???

n°1476654
Taz
bisounours-codeur
Posté le 16-11-2006 à 16:35:34  profilanswer
 

STFW

n°1476658
D@RKWoodiu​s
Posté le 16-11-2006 à 16:38:55  profilanswer
 

oki, quel manuel? "joindre des threads" d'après google ca veut rien dire...

n°1476663
D@RKWoodiu​s
Posté le 16-11-2006 à 16:44:58  profilanswer
 

si tu veux parler de la méthode join(), non, mes threads sont totalements indépendants, il y en a un par connexion, et je ne garde pas de référence vers chaque thread dans ma classe principale...
 
ce que je comprends pas, c'est que lorsque mes threads se terminent (fin de la méthode run()), leur contenu ne semble pas libéré

Message cité 1 fois
Message édité par D@RKWoodius le 16-11-2006 à 16:46:44
n°1476692
sircam
I Like Trains
Posté le 16-11-2006 à 17:02:42  profilanswer
 

D@RKWoodius a écrit :

si tu veux parler de la méthode join(), non, mes threads sont totalements indépendants, il y en a un par connexion, et je ne garde pas de référence vers chaque thread dans ma classe principale...


 
Tu vois, avec un petit effort...   [:pingouino]  
 

D@RKWoodius a écrit :

ce que je comprends pas, c'est que lorsque mes threads se terminent (fin de la méthode run()), leur contenu ne semble pas libéré


Beh, est-ce que tu libères effectivement les resources?  [:airforceone]  


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
n°1476958
Taz
bisounours-codeur
Posté le 17-11-2006 à 08:40:04  profilanswer
 

pas de join, pas de terminaison de thread.

mood
Publicité
Posté le 17-11-2006 à 08:40:04  profilanswer
 

n°1477543
D@RKWoodiu​s
Posté le 17-11-2006 à 17:19:05  profilanswer
 

Taz a écrit :

pas de join, pas de terminaison de thread.


Pourtant, l'état du thread est "Terminated", et je n'ai aucune raison de le "joindre", vu que je veux qu'ils aient une existence autonome du thread principal...
 
Comment faire?

n°1477817
Taz
bisounours-codeur
Posté le 18-11-2006 à 16:24:58  profilanswer
 

si tu vois le thread, c'est bien qu'il existe ... il est terminé mais pas détruit/recyclé tant que tu ne join pas.
 
Comment faire ? RTFM

n°1477837
benou
Posté le 18-11-2006 à 18:10:27  profilanswer
 

Taz a écrit :

pas de join, pas de terminaison de thread.


 :heink: qu'est ce que tu racontes ??
va le lire toi même le fucking manuel ... et donne un lien vers ce que tu avances si c'est réel parce que là ça sent bon le n'importe quoi.
 
 
D@RKWoodius> si ta mémoire explose, c'est forcément que tu gardes des références quelques part sur des objets ... C'est pas forcément les threads qui sont en cause, c'est peut être des objets alloué et non relachés quelque part dans l'execution du thread.
 
regarde notament du côté des List ou Map static : c'est une erreur assez courante quand on débute ...
 
Par exemple, cmme dis Taz, si tu est capable de demander l'état des threads, c'ets bien que tu as encore une référence vers eux ...

Message cité 1 fois
Message édité par benou le 18-11-2006 à 18:11:31
n°1478212
D@RKWoodiu​s
Posté le 19-11-2006 à 22:24:06  profilanswer
 

Taz a écrit :

si tu vois le thread, c'est bien qu'il existe ... il est terminé mais pas détruit/recyclé tant que tu ne join pas.


Normal qu'il existe, quand je lis son état j'ai encore une variable qui pointe dessus, mais après la variable pointe vers le dernier thread créé... Et dans la javadoc il est dit que le thread mourait lorsque la fonction run() terminait... Et je veux pas faire de join() car l'existence de mon thread principal ne doit pas dépendre des threads fils...
 

benou a écrit :

si ta mémoire explose, c'est forcément que tu gardes des références quelques part sur des objets ... C'est pas forcément les threads qui sont en cause, c'est peut être des objets alloué et non relachés quelque part dans l'execution du thread.
 
regarde notament du côté des List ou Map static : c'est une erreur assez courante quand on débute ...
 
Par exemple, cmme dis Taz, si tu est capable de demander l'état des threads, c'ets bien que tu as encore une référence vers eux ...


Comme dit ci dessus, la seule variable qui référence le thread ne pointe que vers le dernier thread (après ils ont une vie qui leur est propre), je ne les stocke pas tous dans une collection...  
 
Et j'ai rien de static ni de collections dans les threads... Et je ferme tous mes descripteurs avant la fin du run(), donc je vois pas ce qui pourrait etre encore alloué. Et puis tout de facon quand le thread termine, toutes les références qui sont dedans sont "garbagecollectables" nan?

n°1478713
D@RKWoodiu​s
Posté le 20-11-2006 à 18:04:46  profilanswer
 

J'ai réussi à résoudre mon problème, en fait, j'affichais dans une JFrame le contenu de mes requetes et des réponses...
 
Du coup l'attribut String text de la Textarea pesait super lourd et c'est ca qui saturait la mémoire...
 
En tous cas merci pour votre aide
 
PS. Taz, tu peux aller RTFM car il n'y a aucune obligation de faire join pour que le thread puisse se terminer...


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  [Résolu] OutOfMemoryException et programmation multi-threads

 

Sujets relatifs
[resolu]problème avec une fonction[RESOLU] Balise alt contenu dans variable php
[resolu] installation framework .net 2.0 sur pocket pc[resolu] Valeur de pointeur en assembleur
Programmation I2C[résolu] comment récupérer le nom de la table correspondant [...]
[Resolu] JScrollPane et JTextAreaListe multi ple
[resolu] Probleme de requete sur deux tables[C#/résolu] type template avec méthodes connues par avance
Plus de sujets relatifs à : [Résolu] OutOfMemoryException et programmation multi-threads


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR