Les Allergies
Alimentaires
Posez votre question Signaler

Boucle qui consomme beaucoup de memoire

pedro0077 4Messages postés 2 août 2010Date d'inscription 6 août 2011Dernière intervention - Dernière réponse le 3 août 2010 à 12:43
salut tout le monde ;
mon probleme c'est ke j'ai un programe ki marche b1 mais qui consomme beaucoup en memoire (la moitié) peut etre ke la boucle while qui cause le probleme!!!
voici les 2 classes
classe extraction qui permet de parcourir un fichier est de le lire
import javax.swing.*;
import java.awt.GridLayout;
import java.awt.event.ActionListener; 
import java.awt.event.ActionEvent;
import java.io.* ; 
public  class extraction 
 {
	 String fichierPath="";
	 String chaine="";
	
	  public String getChaine() {
          return chaine;
      }
	  
	// Méthode de choix d'un fichier
	public void choisir() {
	// Crée un panneau
	JPanel contenuFenêtre = new JPanel();
	
	// Affecte un gestionnaire de présentation à ce panneau
	GridLayout disposition = new GridLayout(4,2);
	contenuFenêtre.setLayout(disposition);
	// Crée les contrôles en mémoire

	
	// Ajoute les contrôles au panneau
	// Crée le cadre et y ajoute le panneau
	JFrame cadre = new JFrame("Boutton parcourir");
	cadre.setContentPane(contenuFenêtre);
	
	// Affecte ses dimensions à la fenêtre et la rend visible
	cadre.setSize(400,100);
	cadre.setVisible(true);
	
	JButton lancer = new JButton("parcourir");
	contenuFenêtre.add(lancer);
	//Action sur le bouton
	lancer.addActionListener( new ActionListener() {
    public void actionPerformed(ActionEvent e){
        JFileChooser chooser = new JFileChooser();
        int returnVal = chooser.showOpenDialog(chooser);
        if(returnVal == JFileChooser.APPROVE_OPTION) {
           System.out.println("Vous avez choisi le fichier : " +
                chooser.getSelectedFile().getName());
           		fichierPath = chooser.getSelectedFile().getAbsolutePath();
           	System.out.println("le lien du fichier est : "+ fichierPath);
           	String ligne="" ; 
           	System.out.println ("*** debut du fichier ***");  
           	BufferedReader entree = null;
			try {
				entree = new BufferedReader (new FileReader (fichierPath));
			} catch (FileNotFoundException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}
    		do
    			{ try {
					ligne = entree.readLine() ;
				} catch (IOException e1) {
					
					e1.printStackTrace();
				}
    				if (ligne != null) {System.out.println (ligne) ;
    				chaine+=ligne+"\n";}
    			}
    		while (ligne != null) ;
    		//System.out.println (chaine) ;
    		try {
				entree.close() ;
			} catch (IOException e1) {
				
				e1.printStackTrace();
			}
    		System.out.println ("*** fin du fichier ***");       	 
    }
 
    }
} );
	
}
		
}

classe maine qui permet de retourner des valeurs a l'aide de regex a partir du fichier
import java.util.*;
import java.util.regex.*;
import java.io.*;

public class main extends extraction {
	
		private static Pattern pattern;
		private static Matcher matcher;
		
	public static void main (String args[])
	{ 	
		String chaine2 ="";
		extraction lecture = new extraction() ;	
	    lecture.choisir();
	    while (true) {
	    	String aParser= lecture.getChaine();
			if (!aParser.equals(chaine2)) {
			chaine2=aParser;
	    Pattern p=Pattern.compile("(.*?)*#\\{(.*?)\\}#.*?");
		Matcher m=p.matcher(aParser);
		while(m.find()) 
			System.out.println(m.group(2)); 
	
	}
}
	}}

Merci d'avance pour vos aides
Lire la suite 

Boucle qui consomme beaucoup de memoire »

1 réponses
Réponse
+0
moins plus
salut,
indépendamment de ton code, tu peux limiter la consommation de mémoire lors du lancement de java :
java -Xmxn

plus d'info ici :
http://download.oracle.com/javase/6/docs/technotes/tools/windows/java.html
Ajouter un commentaire
Ce document intitulé « boucle qui consomme beaucoup de memoire » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?