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

  FORUM HardWare.fr
  Programmation
  Java

  Set, Map et Java heap space

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Set, Map et Java heap space

n°2004040
ffomnislas​h
Posté le 23-06-2010 à 10:55:40  profilanswer
 

Bonjour,
 
 
J'ai un programme qui utilise beaucoup de mémoires, c'est normal mais depuis peu je rencontre un problème que j'ai du mal à cerner. J'ai quelques pistes ais un expert pourra peut être m'aider.
 

Citation :

java.lang.OutOfMemoryError: Java heap space
    at java.util.HashMap.resize(HashMap.java:462)
    at java.util.HashMap.addEntry(HashMap.java:755)
    at java.util.HashMap.put(HashMap.java:385)
    at java.util.HashSet.add(HashSet.java:200)
    at java.util.AbstractCollection.addAll(AbstractCollection.java:305)
    at MON_SOURCE(file.java:116)


 
En gros la ligne 116 c'est :
 

Code :
  1. Set<String> set;
  2. Set<String> set2;
  3. ....
  4. set.addAll(set2);


 
Apparemment le Set utilise une hash pour gérer l'unicité des données. Lors de l'ajout d'un élément la hash est redimensionnée, elle doit être trop petite.
 
J'ai quelques idées :
- initialiser la hash table du set avec une plus grande valeur pour éviter le redimensionnement
- utiliser mon propre set -> cette idée n'est pas génial, on doit pouvoir s'en sortir avec le Set java
- augmenter la taille max du heap est hors de questions, elle est déjà bien grande.
 
Je vais continuer mes investigations mais si vous avez des idées merci de m'en faire part :)
 
 
edi ---  
arg je suis bête, je viens de voir que mon Set est construit avec "new HashSet<String>();"   :)


Message édité par ffomnislash le 23-06-2010 à 11:00:04
mood
Publicité
Posté le 23-06-2010 à 10:55:40  profilanswer
 

n°2004065
Deamon
Posté le 23-06-2010 à 11:23:51  profilanswer
 

Ta 1ere idée (initialiser la hash table du set avec une plus grande valeur pour éviter le redimensionnement) ne changera rien, ton problème vient du fait que tu prend trop de mémoire pour Java. Donc soit tu augmentes le heap space soit tu te débrouilles pour compresser/limiter tes données en mémoire.

n°2004124
ffomnislas​h
Posté le 23-06-2010 à 14:00:36  profilanswer
 

Deamon a écrit :

Ta 1ere idée (initialiser la hash table du set avec une plus grande valeur pour éviter le redimensionnement) ne changera rien, ton problème vient du fait que tu prend trop de mémoire pour Java. Donc soit tu augmentes le heap space soit tu te débrouilles pour compresser/limiter tes données en mémoire.


 
Le redimensionnement ne résout pas mon problème effectivement (après test). Mon idée était d'éviter le redimensionnement qui je pense doit consommer un surplus de mémoire pendant l'opération.
 
Je vais essayer d'utiliser un autre set pour voir.

n°2004126
Deamon
Posté le 23-06-2010 à 14:02:58  profilanswer
 

Je vois pas bien pourquoi un autre Set règlerait le problème. Tout au mieux tu pourras insérer quelques éléments de plus mais tu vas vite arriver à la même chose.

n°2004130
ffomnislas​h
Posté le 23-06-2010 à 14:08:53  profilanswer
 

Deamon a écrit :

Je vois pas bien pourquoi un autre Set règlerait le problème. Tout au mieux tu pourras insérer quelques éléments de plus mais tu vas vite arriver à la même chose.


 
 
Un peu d'éléments en plus peut devenir beaucoup lorsque la JVM consomme 2go. Et je test le plus simple en premier.

n°2004152
phnatomass
Je m'empare de ton esprit !!
Posté le 23-06-2010 à 14:29:31  profilanswer
 

Par curiosité t'as quoi dans ta Collection qui pourrait consommer tant d'espace mémoire ?

n°2004159
ffomnislas​h
Posté le 23-06-2010 à 14:50:52  profilanswer
 

des String :)
 
je travail sur les logs de gros site bancaires certains jour ca explose.

n°2004160
Deamon
Posté le 23-06-2010 à 14:52:25  profilanswer
 

Et t'es obligé de stocker ça dans des objets Java ? Tu peux pas les écrire dans des fichiers ?

n°2004163
phnatomass
Je m'empare de ton esprit !!
Posté le 23-06-2010 à 14:55:49  profilanswer
 

Et filtrer en amont selon certain critères

n°2004175
ffomnislas​h
Posté le 23-06-2010 à 15:27:49  profilanswer
 

non mais il y a plein de filtres déjà. L'application est relativement bien foute.
 
Mais depuis quelque temps certains jours ca ne passe pas lors du calcul des visites ... pour lesquelles il est nécessaire de charger pas mal de choses.
 
Ceci dit je pense qu'il y a une problème quelque part.


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

  Set, Map et Java heap space

 

Sujets relatifs
Chargement d'un fichier .emx en JAVA sous Eclipsesdk java
Problème d'authentification en JAVA/J2EEjava
Reverse debugging en Java (avec Eclipse)java Regex : Je recherche le moyen d'extraire des lettres
recuperation des jcheckbox javaPasser d'une simulation JAVA sous Excel
changement dynamique des images java[resolu] GWT et image
Plus de sujets relatifs à : Set, Map et Java heap space


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