StringBuffer OutOfMemory

cs_tulesais Messages postés 175 Date d'inscription mercredi 2 juin 2004 Statut Membre Dernière intervention 11 avril 2013 - 11 déc. 2008 à 15:01
cs_tulesais Messages postés 175 Date d'inscription mercredi 2 juin 2004 Statut Membre Dernière intervention 11 avril 2013 - 12 déc. 2008 à 07:58
Bonjour tout le monde !!!

lorsque j'exécute mon programme me permettant d'insérer un Fichier de 12 mo dans un StringBuffer (ne me demandez pas pourquoi ... c'est comme ca... :-) ), j'obtiens le message : OutOfMemory

StringBuffer strbuff = new StringBuffer();
Boucle :
   strbuff.append(ligne);

JVMDG217: Dump Handler is Processing OutOfMemory - Please Wait.
JVMDG315: JVM Requesting Heap dump file
JVMDG318: Heap dump file written to /heapdump1212550.1229003433.phd
JVMDG303: JVM Requesting Java core file
JVMDG304: Java core file written to /javacore1212550.1229003433.txt
JVMDG274: Dump Handler has Processed OutOfMemory.
JVMST109: Insufficient space in Javaheap to satisfy allocation request
Exception in thread "main" java.lang.OutOfMemoryError
        at java.lang.StringBuffer.append(StringBuffer.java(Compiled Code))
        at EclatSirenU.main(EclatSirenU.java(Compiled Code))

Par contre, la syntaxe suivante fonctionne :

StringBuffer strbuff = new StringBuffer(0);
Boucle :
   strbuff.append(ligne);

Ma question est donc celle ci, pourquoi en initialisant le StringBuffer à 0, le traitement s'effectue bien ???

En espérant que vous aurez une explication à me soumettre ...

Merci d'avance pour votre aide !!!

5 réponses

dvoraky Messages postés 744 Date d'inscription dimanche 1 avril 2007 Statut Membre Dernière intervention 9 mai 2010 8
11 déc. 2008 à 15:31
Salut,
J'en ai aucune idée mais j'expose simplement une hypothèse :
Une stringBuffer, c'est un sorte de cache qui va permettre de garder en mémoire tampon la string du temps qu'on la manipule, oui?
Donc si tu mets la capacité du StringBuffer à 0, ça veut dire qu'il ne conservera pas en mémoire tampon ta String mais va la traiter directement...
Tu vois ce que je veux dire?
Je ne sais pas, c'est juste une hypothèse à faire confirmer ou infirmer par quelqu'un de plus compétent que moi

<hr width="100%" size="2" />
 C'est après des heures de codage que j'ai compris pourquoi les créateurs de Java ont choisi une tasse de café comme logo...
0
cs_tulesais Messages postés 175 Date d'inscription mercredi 2 juin 2004 Statut Membre Dernière intervention 11 avril 2013 2
11 déc. 2008 à 15:58
salut dvoraky !

je vois très bien ce que tu veux dire ... ca parait plausible ...

On reste sur ca en attendant qu'un pro du StringBuffer nous en dise plus !

En tout cas Merci pour ta réponse !
0
dvoraky Messages postés 744 Date d'inscription dimanche 1 avril 2007 Statut Membre Dernière intervention 9 mai 2010 8
11 déc. 2008 à 16:02
Ouais, si un M. StringBuffer pouvait passer par là, ça serait fort gentil de nous éclairer parce que bon...

Et au fait tulesais, t'abuses un peu quand même, mettre 12Mo dans un StringBuffer... Quand même!

<hr width="100%" size="2" />
 C'est après des heures de codage que j'ai compris pourquoi les créateurs de Java ont choisi une tasse de café comme logo...
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
11 déc. 2008 à 21:39
Salut,

tu peux toujours changer les options de la jvm au lancement de ton ton app, soit les param -Xms -Xmx :
(source ICI)
* : -XmsnSpecify the initial size, in bytes, of the memory allocation pool.
This value must be a multiple of 1024 greater than 1MB. Append the
letter <tt>k</tt> or <tt>K</tt> to indicate kilobytes, or <tt>m</tt>
or <tt>M</tt> to indicate megabytes. The default value is 2MB.
Examples:
-Xms6291456
-Xms6144k
-Xms6m

* : -XmxnSpecify the maximum size, in bytes, of the memory allocation pool.
This value must a multiple of 1024 greater than 2MB. Append the letter
<tt>k</tt> or <tt>K</tt> to indicate kilobytes, or <tt>m</tt> or
<tt>M</tt> to indicate megabytes. The default value is 64MB. Examples:
-Xmx83886080
-Xmx81920k
-Xmx80m

Si rien n'y fait affiche le(s) code(s) que l'on optimise (si possible) ce que tu fais.

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

OoWORAoO
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_tulesais Messages postés 175 Date d'inscription mercredi 2 juin 2004 Statut Membre Dernière intervention 11 avril 2013 2
12 déc. 2008 à 07:58
Merci beaucoup Twinuts mais je ne veux pas toucher au code qui fonctionne très bien :
StringBuffer strbuff = new StringBuffer(0);

je souhaitais seulement savoir pourquoi cette initialisation fonctionne alors que
StringBuffer strbuff = new StringBuffer();
tombe en OutOfMemory

Merci quand même !!!
0
Rejoignez-nous