Boucle qui consomme beaucoup de memoire

Fermé
pedro0077 Messages postés 4 Date d'inscription lundi 2 août 2010 Statut Membre Dernière intervention 6 août 2011 - 3 août 2010 à 12:07
 Jean-Marie - 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
A voir également:

1 réponse

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 :
https://docs.oracle.com/javase/6/docs/technotes/tools/windows/java.html
0