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

NetBeans Java Discussion :

erreur java : java heap space


Sujet :

NetBeans Java

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 264
    Par défaut erreur java : java heap space
    Bonjour, alors le titre l'indique j'ai une erreur du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    run:
    Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
    Java Result: 1
    BUILD SUCCESSFUL (total time: 3 seconds)
    je travaille sur Win XP et la version 6.5 de netbeans (tomcat + profiler sont à jour).

    Alors j'ai essayé de cherché un peu la cause de cette erreur mais j'ai trouvé l'explication un peu compliqué.
    mais d'aprés ce que j'ai compris : Sous Xp la quantité de mémoire alloué est de 2 Mo, et qu'il fallait changer cette donnée là. Mais je ne comprends pas deja pourquoi j'ai ce probléme là !

    Ensuite j'ai essayé d'exécuter mon main avec un compilateur sous linux et sa me met la meme erreur ?

    Donc est ce que qqun pourrait me dire un peu c'est quoi ce probléme !

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 24
    Par défaut
    La mémoire de la jvm est plaine.

    Alors si ton programme n'est pas censé utiliser beaucoup de ressource, tu as surement du faire une boucle de remplissage infini, ou une relation cyclique...
    Sinon tu peux tenter d'augmenter la taille de ta jvm avec cet argument :

    -Xmx1024M
    Pour 1024 mo.

    Tetar

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 264
    Par défaut
    Oui j'ai fait cette manip mais j'ai toujours la meme erreur !

    j'ai recompiler sous Linux et netbeans: et j'ai la meme erreur qu'au début !

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 24
    Par défaut
    Donc il y a forcement un problème dans ton code.

    Peux-tu montrer ton code. Au moins les points pouvant être sensible.
    Vérifie qu'un helloword ne pose aucun souci d'exécution pour être sur que ceci soit un problème de code.

    Tetar

  5. #5
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par bdptaki Voir le message
    Oui j'ai fait cette manip mais j'ai toujours la meme erreur !

    j'ai recompiler sous Linux et netbeans: et j'ai la meme erreur qu'au début !

    Salut,

    peux-tu également taper dans un terminal linux la commande free -m pour connaître la quantité de mémoire physique disponible.

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 264
    Par défaut
    le free -m me donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
                 total       used       free     shared    buffers     cached
    Mem:          3526       1500       2025          0        273        518
    -/+ buffers/cache:        709       2817
    Swap:         4353          0       4353

    Avec d'autre projet sa fonctionne , donc il devrai y avoir un probléme dans mon code.

    Mon programme est un jeu de 32 carte ==> une bataille : celui qui a la couleur et la valeur la plus forte gagne la carte en gros .

    J'ai une 3 classes

    - une classe Carte : qui défint une carte. elle implement une interface DonneeCarte (information sur la carte valeur + couleur)

    - une asse PaquetCartesListe : qui définit les maniére de jouer ,elle implément l'interface PaquetCartes ( service sur la maniére de jouer).

    - une classe bataille : qui créer un jeu de carte , distribut le jeux à 2 mains, et déruole je joue :
    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    public class Bataille implements DonneeCarte{
     
        private PaquetCartes mainA ;
        private PaquetCartes mainB ;
     
        public Bataille() {
     
          this.mainA = new PaquetCartesListe () ;
          this.mainB = new PaquetCartesListe () ;
        }
     
        private static PaquetCartes creerJeuCartes(){
     
            PaquetCartes MonJeu = new PaquetCartesListe () ;
     
            for(int i = 0; i < NB_couleurs ; i++) {
     
     
                for (int j = 0; j <NB_Valeurs ; j++){
     
                    Carte c = new Carte(Valeurs[j] ,Couleurs[i] ) ;
     
                    MonJeu.insererCarteDessus(c);
                }
     
            }
            return MonJeu ;
        }
     
        private void distribuerCartes(PaquetCartes unJeu){
     
          boolean temoin = true ;
     
         while( ! unJeu.estVide()){
     
             Carte c = unJeu.retirerCarteDessus() ;
              if(temoin == true) { // On commence la distribution avec la main A
                  this.mainA.insererCarteDessus(c);
                  temoin = false ;
              }
              else{
                 this.mainB.insererCarteDessus(c);
                 temoin = true ;
              }
          }
     
        }
     
        public void jouer(){
     
            PaquetCartes PC = Bataille.creerJeuCartes() ;
     
            this.distribuerCartes(PC);
     
     
            while( !this.mainA.estVide() || ! this.mainB.estVide() ){
     
                Carte cA = this.mainA.retirerCarteDessus() ;
                System.out.println("La carte tirer pour A est : " + cA.toString());
                Carte cB = this.mainB.retirerCarteDessus() ;
                System.out.println("La carte tirer pour B est : " + cB.toString());
     
                if( cA.compareTo(cB) == -1){
     
                    System.out.println("La main A gagne");
                    this.mainB.insererCarteDessous(cA);
                    this.mainB.insererCarteDessous(cB);
     
                }
     
                if(cA.compareTo(cB) == 0){
     
                    System.out.println("Il y a égalité ");
                    this.mainA.insererCarteDessous(cA);
                    this.mainB.insererCarteDessous(cB);
                }
     
                if(cA.compareTo(cB) == 1){
     
                    System.out.println("La main B gagne");
                    this.mainA.insererCarteDessous(cA);
                    this.mainA.insererCarteDessous(cB);
                }
     
     
            }
     
            if( this.mainA.estVide() == true)
                System.out.println("A à perdu, c'est B qui gagne");
     
            if(this.mainB.estVide() == true)
                System.out.println("B à perdu, c'est A qui gagne");
     
     
        }
     
    }

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 24
    Par défaut
    Autre chose :

    tu peut essayer d'executer pas a pas avec le debuger afin de voir ou intervient l'erreur.

    tetar

  8. #8
    Expert confirmé

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 823
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Fabricant et casseur d'avions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 823
    Par défaut
    Salut,

    Un truc simple à faire pour débugguer ton application, c'est de mettre des System.out.println un peu partout, pour signaler que l'application est bien passée par ici. Genre en entrée de méthode, en sortie, et entre les deux quand il y a des calculs "complexes". Ca permet de repérer où se déclenche l'erreur.

    Là, ça permettrait de voir si la création du jeu de carte et la distribution se déroulent bien, ou si c'est pendant ces deux phases que tu bouffes toute la mémoire.
    "Errare humanum est, sed perseverare diabolicum"

    Ma page sur DVP.com

  9. #9
    Membre averti
    Inscrit en
    Février 2008
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 18
    Par défaut
    je crois que ta condition n'est jamais realisee sauf en cas d'egalite :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while( !this.mainA.estVide() || ! this.mainB.estVide() ){
    parce que elle tu sors de cette boucle si A est vide ET B est vide, tu devrais peut etre essayer de mettre un && au lieu de ||

Discussions similaires

  1. Réponses: 12
    Dernier message: 03/12/2008, 17h35
  2. ImageIO.read erreur Java Heap Space
    Par GrooveRage dans le forum Graphisme
    Réponses: 1
    Dernier message: 12/03/2008, 21h33
  3. Réponses: 3
    Dernier message: 04/12/2007, 22h32
  4. Eclipse erreur : java.lang.OutOfMemoryError: Java heap space
    Par sderecourt dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 14/04/2006, 11h28

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