IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Entrée/Sortie Java Discussion :

Parser un fichier de 2Mo = Java heap space


Sujet :

Entrée/Sortie Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 31
    Par défaut Parser un fichier de 2Mo = Java heap space
    Voila, je suis entrain de développer une application qui me parse un fichier Text d'environ 2Mo, ma fonction d'extraction du contenu du fichier texte est réalisé de cette facon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    	public static StringBuffer readFile(String fileName){
    		StringBuffer recoverTotalLine = new StringBuffer();
    		try{
    			File file = new File(fileName);
    			InputStream ips=new FileInputStream(file); 
    			InputStreamReader ipsr=new InputStreamReader(ips);
    			BufferedReader br=new BufferedReader(ipsr);
    			String ligne;
    			while ((ligne=br.readLine())!=null){
    				recoverTotalLine.append(ligne).toString();
    			}
    			br.close(); 
    		}
    		catch (Exception e){
    			System.out.println(e.toString());
    		}
     
    		return recoverTotalLine;
    	}
    vous l'aurez compris, je concactène avec mon StringBuffer toutes les lignes trouvées du fichier.
    Tout se passe bien pour les fichiers telques 50/150/350/500 ko mais quand je passe à une taille "classique" de l'ordre de 2mo, ca me dit :"Java heap space"; j'ai dans un premiere temps augmenté l'allocation de mémoire dans éclipse (-Xmx512M) mais rien n'y fait ... .
    est ce que qqun aurait une petite idée pour allèger ce code??
    il faut savoir aussi que l'extraction du contenu du fichier Text est quasiment instantanné sur des fichiers de 100/150/350 ko... je ne comprend pas :'(

  2. #2
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    Par curiosité quel version de Java tu utilises ? Car tu ne devrait pas avoir une tel erreur sur ce code !

    Par contre dans ta boucle tu fais des appels inutiles à toString() ce qui provoquer à chaque itération une copie de la chaine courante... Bref cela revient à allouer un très grand nombre d'objet et donc à surcharger le GC !

    Je comprendrais que ce code soit vraiment très lent (création d'un très grand nombre d'objet temporaire) mais le "Java heap space" est surprenant je trouve...

    Penses également à utiliser un try/finally pour fermer ton flux :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    	public static StringBuffer readFile(String fileName){
    		StringBuffer recoverTotalLine = new StringBuffer();
    		try{
    			BufferedReader br = new BufferedReader(new FileReader(fileName));
    			try {
    				String ligne;
    				while ((ligne=br.readLine())!=null){
    					recoverTotalLine.append(ligne);
    				}
    			} finally {
    				br.close();
    			}
    		}
    		catch (Exception e){
    			System.out.println(e.toString());
    		}
    		return recoverTotalLine;
    	}
    a++

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 31
    Par défaut
    aaah
    Je crois que tout était lié au .toString() en trop parceque la rapidité extraction à considérablement augmenté
    Un grand merci à toi

    PS : désolé adiGuba j'ai vraiment du mal à trouver les bonnes sections

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Intercepter les OutOfMemory, Java heap Space dans le fichier logs_file.txt
    Par Thomas_07 dans le forum Développement de jobs
    Réponses: 1
    Dernier message: 05/01/2011, 14h12
  2. Eclipse erreur : java.lang.OutOfMemoryError: Java heap space
    Par sderecourt dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 14/04/2006, 11h28
  3. [XML] Comment parser ce fichier XML avec java !
    Par jlassira dans le forum Format d'échange (XML, JSON...)
    Réponses: 7
    Dernier message: 13/03/2006, 12h56
  4. [ memoire ] Java Heap Space
    Par natha dans le forum Général Java
    Réponses: 10
    Dernier message: 23/01/2006, 11h15
  5. [SAX] parser un fichier xml en Java
    Par royou dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 10/02/2005, 17h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo