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

Langage Java Discussion :

out of memory!


Sujet :

Langage Java

Vue hybride

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 166
    Par défaut out of memory!
    Bonjour,

    Je développe sous Java et j'ai un pb d'espace mémoire.

    J'utilise une liste chainée (LinkedList) mais elle doit contenir beaucoup trop de données car j'ai mon espace mémoire qui explose. 'Out of Memory'

    J'ai trouvé trois causes possible à cela:
    - soit c'est une limitation de java. Dans ce cas j'aimerai connaitre la taille maximale que java peut accepter pour une structure.
    - soit c'est une limitation au niveau de ma taille mémoire (qui est à 500Mo)
    - soit c'est une limitation de mon OS (je suis sous Windows)

    Merci de votre aide....

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    230
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 230
    Par défaut
    Bonjour,

    Y a-t-il possibilité de voir le code de l'alimentation de la liste ?

  3. #3
    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 défaut les applications Java n'utilisent pas plus de 64Mo...
    Pour augmenter cette valeur tu peux utiliser l'option -Xmx de Java, par exemple pour 500 Mo max :
    a++

  4. #4
    Membre Expert
    Profil pro
    Fabrication GED
    Inscrit en
    Octobre 2005
    Messages
    1 405
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Fabrication GED

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 405
    Par défaut
    Problème de conception...
    Quelles sont les données que tu mets dans ta liste ? Ne peuvent-t-elles pas être chargées à la volée depuis une base ? Ou mieux en niveau performance : chargées à la volée depuis un fichier ? Ou mieux, avec un buffer dynamique ( je bosse la dessus en ce moment, ya du potentiel ).

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    166
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 166
    Par défaut
    Merci de vos nombreuses réponses déjà,


    Bonjour,

    Y a-t-il possibilité de voir le code de l'alimentation de la liste ?


    Oui le voila, mais je ne fais que trier des données d'où l'utilisation d'une liste chaînée.

    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
    26
    27
    public void trier(Integer apid,Calendar utc,Datadateinfo info){
     
     
    	int i=donneesTriees.get(apid).size()-1;
    	boolean test_insertion = true;
    	while( test_insertion && i != -1 ){
    		if(info.utc.compareTo(donneesTriees.get(apid).get(i).utc)<0){
    			i--;
    			}
    		else{
    			test_insertion = false;
    			}
    		}
    		if(i == -1){
    			donneesTriees.get(apid).add(0,info);
    			}
    		else{
    			if( i == donneesTriees.get(apid).size()-1){
    				donneesTriees.get(apid).addLast(info);
    			}else{
    				donneesTriees.get(apid).add(i+1,info);
    			}
    		}
    		if(donneesTriees.get(apid).size()>100000){
    			ecrireUnePartie(apid);
    		}
    }

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    166
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 166
    Par défaut
    Citation Envoyé par iohack
    Problème de conception...
    Quelles sont les données que tu mets dans ta liste ? Ne peuvent-t-elles pas être chargées à la volée depuis une base ? Ou mieux en niveau performance : chargées à la volée depuis un fichier ? Ou mieux, avec un buffer dynamique ( je bosse la dessus en ce moment, ya du potentiel ).
    Dans ma liste je met des données textuelles mais une donnée est assez conséquente.
    Elles sont chargées depuis un fichier mais je suis obligé de les garder en memoire car il faut que je les trie. Et dès que ma mémoire est saturée, je l'ai estimé à 15 000 données (dans le post au dessus elle est à 100 000 données mais c'est pour un test) , je suis obligé d'écrire au moins une données.
    Le soucis est que je fais un test au moment de l'ecriture dans le fichier de sortie pour n'ecrire dans ce fichier que des données plus ancienne. Si la donnée est plus récente je perds la données. (Et j'en perd bcp!!! ).

    Le buffer dynamique je ne connais pas. Si tu pense que ça m'est utile, alors je suis preneur.

    Merci d'avance

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    166
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 166
    Par défaut
    Citation Envoyé par adiGuba
    Salut,


    Par défaut les applications Java n'utilisent pas plus de 64Mo...
    Pour augmenter cette valeur tu peux utiliser l'option -Xmx de Java, par exemple pour 500 Mo max :
    a++
    Merci je vais tester cela.

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    166
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 166
    Par défaut
    Citation Envoyé par adiGuba
    Salut,


    Par défaut les applications Java n'utilisent pas plus de 64Mo...
    Pour augmenter cette valeur tu peux utiliser l'option -Xmx de Java, par exemple pour 500 Mo max :
    a++
    Dis moi je développe sous Eclipse et je n'arrive pas à trouver comment changer les options pour prendre en compte le -Xmx500m. Tu sais si cela est possible sous Eclipse et comment.

    Merci

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    166
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 166
    Par défaut
    Bonjour,

    J'ai résolu le problème mais il me reste une question en suspend.

    Pour la résolution voilà.

    Mon problème de taille mémoire venait bien d'un limitation de java et donc la solution est bien d'utiliser l'option
    java -Xmx500m programme.jar

    Pour utiliser cette option sous eclipse il faut faire
    >Exécuter...
    >Onglet (x)=Arguments
    >et remplir le champ Arguments VM en mettant -Xmx500m



    Maintenant ma nouvelle question...

    J'ai donc utilisé cette option mais j'ai l'impression que mon programme tourne bcp, bcp, bcp plus longtemps (ceci est évidement pas dû au fait que maintenant je peux stocker bcp plus de donnée car pour m'assurer de ce constat j'ai testé le programme qui ne necessite pas l'extension de taille du processus avec l'option et sans l'option ou lancement). Le temps nécessaire est peut être doublé (sans l'option le programme tourne une journée, avec l'option le programme tourne 2 jours).

    Est ce que qun à des infos sur le fait que peut être l'option -Xmx500m peut augmenter le tps cpu???

    Merci

  10. #10
    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
    Citation Envoyé par xduris
    (sans l'option le programme tourne une journée, avec l'option le programme tourne 2 jours).
    Deux jours
    Il fait quoi ce programme exactement ?

    Citation Envoyé par xduris
    Est ce que qun à des infos sur le fait que peut être l'option -Xmx500m peut augmenter le tps cpu???
    Cela n'augmente pas le temps CPU mais seulement la mémoire utilisable ???

    Lorsque tu dis que ton programme se termine plus vite sans l'option -Xmx, est-ce qu'il se termine normalement ou est-ce qu'il plante ???

    a++

  11. #11
    Membre chevronné Avatar de Rayndell
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    289
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 289
    Par défaut
    Moi je trouve ça plutôt normal. Il y a plus de données que tu peux stocker. Comme avant tu avais un problème de mémoire, toutes les données n'étaient pas stockées. Maintenant qu'elles le sont, le temps de traitement est plus long puisqu'il y a plus de données.

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

Discussions similaires

  1. [XStream][String]out of memory
    Par Invité dans le forum Persistance des données
    Réponses: 8
    Dernier message: 10/01/2006, 14h52
  2. [C++] [gcc] out of memory
    Par fxp17 dans le forum GCC
    Réponses: 5
    Dernier message: 06/01/2006, 10h29
  3. [pb mémoire] out of memory d'eclipse
    Par Casp dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 12/05/2005, 16h39
  4. Out of memory
    Par shurato dans le forum ANT
    Réponses: 1
    Dernier message: 10/11/2004, 16h19
  5. [JBuilder 8] Out of memory problem ...
    Par keros dans le forum JBuilder
    Réponses: 2
    Dernier message: 08/09/2003, 19h03

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