cs_tulesais
Messages postés175Date d'inscriptionmercredi 2 juin 2004StatutMembreDernière intervention11 avril 2013
-
11 déc. 2008 à 15:01
cs_tulesais
Messages postés175Date d'inscriptionmercredi 2 juin 2004StatutMembreDernière intervention11 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 ...
dvoraky
Messages postés744Date d'inscriptiondimanche 1 avril 2007StatutMembreDernière intervention 9 mai 20108 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...
dvoraky
Messages postés744Date d'inscriptiondimanche 1 avril 2007StatutMembreDernière intervention 9 mai 20108 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...
Twinuts
Messages postés5375Date d'inscriptiondimanche 4 mai 2003StatutModérateurDernière intervention14 juin 2023111 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
Vous n’avez pas trouvé la réponse que vous recherchez ?