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

Collection et Stream Java Discussion :

probleme de remplissage d'une arraylist


Sujet :

Collection et Stream Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2013
    Messages : 6
    Par défaut probleme de remplissage d'une arraylist
    bonjour

    j'ai un probleme lors du remplissage de ma arraylist depuis un gros fichier (4000000 lignes) quand j'ateint environ 2300000 lignes sa plante
    donc voici mon code:
    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
    21
    22
    23
    24
    25
     
    public  void lireLesDonnees(ArrayList<String> listeDonnees){  
         // Ouvrir le fichier en lecture
         this.ouvrirEnLecture("kddcup");
         String chaine ="";
         // tant que ...
         do { 	 
             try {
                 // Lire la ligne courante et la retourner au  programme appelant
            	 //chaine=fR.readLine();
            	 if ((chaine=fR.readLine()) != null){
            	           /// Ajouter la chaine à liste des donnees de type ArrayList
            	           listeDonnees.add(chaine);
            	           System.out.println(listeDonnees.size());
     
            	         }
                   }
                   // Si une erreur est détéctée (le fichier n'est pas ouvert en lecture, ...)
            	catch (IOException err) {
                            // afficher le message d'erreur
            		System.out.println("Donnees.txt"+" : Erreur  de lecture ");}
         // ... la chaine lue n'est pas null (fin de fichier)
         } while (chaine != null);
         fermer();
     }
    et voici ce que dit le compilateur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Exception in thread "main" java.lang.OutOfMemoryError: GC overhead limit exceeded
    	at java.util.Arrays.copyOfRange(Arrays.java:3664)
    	at java.lang.String.<init>(String.java:207)
    	at java.io.BufferedReader.readLine(BufferedReader.java:356)
    	at java.io.BufferedReader.readLine(BufferedReader.java:389)
    	at projet.Fichier.lireLesDonnees(Fichier.java:89)
    	at projet.test.main(test.java:11)
    Votre contribution me serait précieuse.

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Citation Envoyé par wwwdz Voir le message
    bonjour

    j'ai un probleme lors du remplissage de ma arraylist depuis un gros fichier (4000000 lignes)
    Et à ton avis, ça occupe combien de mémoire dans ton programme 4 millions de lignes? Indice ça dépends le taille de tes lignes, elle ont quelle taille tes lignes?

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2013
    Messages : 6
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    Et à ton avis, ça occupe combien de mémoire dans ton programme 4 millions de lignes? Indice ça dépends le taille de tes lignes, elle ont quelle taille tes lignes?
    une ligne a une taille d'environ 147 octets .
    mon fichiers s'est kddcup 1999 dataset des données déjà classifier utiliser pour des heuristique de classification.

  4. #4
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2013
    Messages : 6
    Par défaut
    je me casse le tête a contourner le problème de mémoire mais sans succès.
    je pense que mon dernier recours sera spliter(diviser) mon fichier de 740mb.

  5. #5
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Citation Envoyé par wwwdz Voir le message
    une ligne a une taille d'environ 147 octets .
    Tu veux dire, 147 caractère, ce qui aboutit à environ 1.4G ((147*2+réf tableau+int taille tableau+ref classe+ref classe tableau+des poussières)*4.000.000) de string. Si tu es sur un OS 32 bits, tu t'approche dangereusement de la limite de ce que la JVM peut adresser. Ca varie entre 1.2 et 1.6G suivant les circonstances.

  6. #6
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2013
    Messages : 6
    Par défaut
    je suis sous linux 14.04 64 bits, mon arraylist de type String s'arrete a 2300000 lignes.
    svp proposer moi des solution autre que de spliter mon fichier.

  7. #7
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Quelle est la taille de la mémoire occupée par la jvm quand ça plante? Quelle version de la jvm? Le mieux serait de traiter ton fichier au fur et à mesure, plutot que de tout mettre en mémoire et traiter après.

Discussions similaires

  1. probleme de remplissage d'une fenêtre
    Par LouPython dans le forum Général Python
    Réponses: 1
    Dernier message: 18/06/2015, 22h00
  2. Actualiser un JTable au remplissage d'une ArrayList
    Par teribilis dans le forum Composants
    Réponses: 0
    Dernier message: 02/12/2012, 16h08
  3. [XL-2007] probleme de remplissage d'une listview
    Par chris09300 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 07/11/2011, 17h39
  4. Probleme interface iterator dans une ArrayList
    Par inzagi dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 25/02/2008, 19h05
  5. Probleme de remplissage d'une liste déroulante
    Par kodo dans le forum Struts 1
    Réponses: 3
    Dernier message: 23/08/2007, 16h13

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