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

Eclipse Java Discussion :

Erreur "OutOfMemoryError: Java heap space"


Sujet :

Eclipse Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de mouss4rs
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    884
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 884
    Par défaut Erreur "OutOfMemoryError: Java heap space"
    Bonsoir,

    Je rencontre cette erreur ci:
    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
     
    Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
    	at org.apache.xmlbeans.impl.store.Cur$CurLoadContext.attr(Cur.java:3039)
    	at org.apache.xmlbeans.impl.store.Cur$CurLoadContext.attr(Cur.java:3060)
    	at org.apache.xmlbeans.impl.store.Locale$SaxHandler.startElement(Locale.java:3250)
    	at org.apache.xmlbeans.impl.piccolo.xml.Piccolo.reportStartTag(Piccolo.java:1082)
    	at org.apache.xmlbeans.impl.piccolo.xml.PiccoloLexer.parseAttributesNS(PiccoloLexer.java:1822)
    	at org.apache.xmlbeans.impl.piccolo.xml.PiccoloLexer.parseOpenTagNS(PiccoloLexer.java:1521)
    	at org.apache.xmlbeans.impl.piccolo.xml.PiccoloLexer.parseTagNS(PiccoloLexer.java:1362)
    	at org.apache.xmlbeans.impl.piccolo.xml.PiccoloLexer.parseXMLNS(PiccoloLexer.java:1293)
    	at org.apache.xmlbeans.impl.piccolo.xml.PiccoloLexer.parseXML(PiccoloLexer.java:1261)
    	at org.apache.xmlbeans.impl.piccolo.xml.PiccoloLexer.yylex(PiccoloLexer.java:4808)
    	at org.apache.xmlbeans.impl.piccolo.xml.Piccolo.yylex(Piccolo.java:1290)
    	at org.apache.xmlbeans.impl.piccolo.xml.Piccolo.yyparse(Piccolo.java:1400)
    	at org.apache.xmlbeans.impl.piccolo.xml.Piccolo.parse(Piccolo.java:714)
    	at org.apache.xmlbeans.impl.store.Locale$SaxLoader.load(Locale.java:3439)
    	at org.apache.xmlbeans.impl.store.Locale.parseToXmlObject(Locale.java:1270)
    	at org.apache.xmlbeans.impl.store.Locale.parseToXmlObject(Locale.java:1257)
    	at org.apache.xmlbeans.impl.schema.SchemaTypeLoaderBase.parse(SchemaTypeLoaderBase.java:345)
    	at org.openxmlformats.schemas.spreadsheetml.x2006.main.WorksheetDocument$Factory.parse(Unknown Source)
    	at org.apache.poi.xssf.usermodel.XSSFSheet.read(XSSFSheet.java:142)
    	at org.apache.poi.xssf.usermodel.XSSFSheet.onDocumentRead(XSSFSheet.java:134)
    	at org.apache.poi.xssf.usermodel.XSSFWorkbook.onDocumentRead(XSSFWorkbook.java:235)
    	at org.apache.poi.POIXMLDocument.load(POIXMLDocument.java:190)
    	at org.apache.poi.xssf.usermodel.XSSFWorkbook.<init>(XSSFWorkbook.java:182)
    	at Extraction2.main(Extraction2.java:138)
    Lorsque j'execute mon programme (l'erreur provient de la ligne rouge):
    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
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    //But: écrire dans le fichier 'Quimper2_AS_OE_1erT_2012.xlsx' et récupérer pour chaque feuille de semaine (ex:'S04') les agents avec leur heures effectués.
    			// 
    			System.out.println("----> on extrait les prénoms des agents avec leur heures effectués dans la semaine pour chaque prenom égale dans la colonne correspondante à la semaine travaillé.");
    			String prenom_recup = null;
    			String prenom_agent = null;
    			String semaineQuimper;
    			int semaineQ[][] = new int[100][100];
    			InputStream ist = new FileInputStream("C:/Donnees/Aide_Manager/Quimper2_AS_OE_2012.xlsx");
    			OPCPackage opc=OPCPackage.open(ist);
    		    XSSFWorkbook wb2= new XSSFWorkbook(opc);		    
    		    XSSFSheet sheet2 = (XSSFSheet)wb2.getSheet("heures");
    			XSSFRow row2 = null;
    			XSSFCell cell2 = null;
    			//pour ouvrir un .xlsx
    		    FormulaEvaluator evaluator = wb.getCreationHelper().createFormulaEvaluator();
    		    evaluator.evaluate(cell2);
    		    XSSFCellStyle cellStyle = null;
    			XSSFDataFormat fmt = wb2.createDataFormat(); //version .xlsx
    		    
    			//on récupère toutes les semaines trouvée ds le fichier 'Quimper...' de la ligne 1 colonne par colonne 
    		    //lis toutes les colonnes de la ligne 1(ou se trouve les semaines)
    		    System.out.println("-> on récupère toutes les semaines trouvée ds le fichier 'Quimper...' de la ligne 1 colonne par colonne.");
    		    for(int i=2;i<=66;i++){//jusqu'au totaux de décembre
    		    	row2 = sheet2.getRow(1);//récupère la ligne 1
    		    	semaineQuimper = row2.getCell(i).getStringCellValue();// récupère la chaine de la colonne en cours
    				if(semaineQuimper.startsWith("S") && !semaineQuimper.equals("Septembre")){//si ca commence par s et ne commence pas par Septembre
    					semaineQ[0][k]=Integer.parseInt(semaineQuimper.substring(1));//on récupère la semaine
    					semaineQ[1][k]=row2.getCell(i).getColumnIndex();//et aussi la colonne ou elle est présente dans le fichier
    					System.out.println("semaineQ: "+semaineQ[0][k]+" à la colonne: "+semaineQ[1][k]);
    				}
    				k++;
    			}
    		    
    		    System.out.println("");
    	    	System.out.println("## Récupération des prénoms seulement + la ligne où il se trouve dans le fichier 'Quimper2...'. ##");
    	    	int g = 0;//compteur pour le tableau
    		    for(int i=2;i<=17;i++){
    				row2 = sheet2.getRow(i);
    				cell2 = row2.getCell(1);
    				Agent a = new Agent();
    				if(cell2 != null){
    					prenom_agent=row2.getCell(1).getStringCellValue();//on récupère le nom+prénom de l'agent
    					String[] prenom=prenom_agent.split(" ");
    					int ligne_prenom;
    					if(prenom.length==2){//ex: [nom]espace[prenom]
    						prenom_recup=prenom[1];//recup du prénom
    						ligne_prenom= row2.getRowNum();// récup de la ligne (pour écrire l'heure dans la bonne colonne)
    						a.setAgent(prenom_recup);
    						a.setNum_ligne_agent(ligne_prenom);//recup de la ligne ou il est ds la fichier final
    						//System.out.println("sans un espace ds le nom: "+prenom_recup+" ligne_du_nom: "+ligne_prenom);
    						listAgent.add(a);
    						tabPrenomQ[0][g]=prenom_recup;
    						System.out.println("Avec Nom seul: "+tabPrenomQ[0][g]+"index: "+g);
    						tabPrenomQ[1][g]=String.valueOf(ligne_prenom);
    						g++;
    					}
    					if(prenom.length==3){//ex: [nom]espace[nom]espace[prenom]
    						prenom_recup=prenom[2];
    						ligne_prenom= row2.getRowNum();// récupération de la ligne
    						a.setAgent(prenom_recup);
    						a.setNum_ligne_agent(ligne_prenom);
    						//System.out.println("avec un espace ds le nom: "+prenom_recup+" ligne_du_nom: "+ligne_prenom);
    						listAgent.add(a);
    						tabPrenomQ[0][g]=prenom_recup;
    						System.out.println("Avec un Nom composé de 2 mots: "+tabPrenomQ[0][g]+"index: "+g);
    						tabPrenomQ[1][g]=String.valueOf(ligne_prenom);
    						g++;
    					}
    				}
    		    }
    		    System.out.println("");
    		    System.out.println("Liste des prénoms du fichier Quimper.xlsx");
    		    //pour voir tous les prénoms de mon tableau récupérer de Quimper
    		    for (int d=0; d<tabPrenomQ.length;d++){
    				if(tabPrenomQ[0][d] != null || tabPrenomQ[1][d]!=null){//si l'une des cellules n'est pas null
    					//afficher l'agent + la validation
    					System.out.println("Prénom: "+tabPrenomQ[0][d]+" se trouvant à la ligne: "+tabPrenomQ[1][d]);
    				}
    			}
    		    System.out.println("");
    		    System.out.println("Prénom par semaine de Projection.xlsx");
    		    //pour voir tous les prénoms de mon tableau récupérer de Quimper
    		    for (int d=0; d<tabPrenomP.length;d++){
    				if(tabPrenomP[0][d] != null ){//si l'une des cellules n'est pas null
    					//afficher l'agent + la validation
    					System.out.println("Semaine: "+semaineP[1][d]+"Prénom: "+tabPrenomP[0][d]);
    				}
    			}
    		    //^^^^^^^^^^^^^^
    		    System.out.println("");
    		    System.out.println("*******************SEMAINE 1*********************");
    		    int nbPrenomsP = tabPrenomP.length;
    		    int nbPrenomsQ = tabPrenomQ.length;
    		    
    		    //pour ecrire chaque heure pour chaque agent dans le fichier Quimper
    		    System.out.println("tabPrenomQ |  tabPrenomP");
    		    for (int y=0; y<nbPrenomsQ; y++){//pour chaque prénom de Quimper
    		    	if(tabPrenomQ[0][y]!=null){
    		    		int z, f=0;
    		    		repet :for(z = 0; z<nbPrenomsP; z++){//et pour chaque prenom du fichier Projection
    		    			if(tabPrenomP[0][z]!=null){
    		    				if(semaineP[1][f]==1){// si la semaine de l'agent en cours trouvée est = 1
    		    					//System.out.println("semaineP après le if"+semaineP[1][f]);
    		    					System.out.println(tabPrenomQ[0][y]+y+"   =   "+tabPrenomP[0][z]+z);
    		    					if(tabPrenomQ[0][y].equals(tabPrenomP[0][z])){//si le prénom du 1er fichier = prénom du 2ème fichier
    		    						//écrire ds "Quimper2_AS_OE_2012.xlsx", les heure de "Projection"/onglet dans les bonnes colonnes
    		    						row2 = sheet2.getRow(Integer.parseInt(tabPrenomQ[1][z]));
    		    						cell2 = row2.createCell(2);//on l'écrit à la colonne 2 (semaine 51)
    		    						cell2.setCellValue(tabheures[1][y]/24.0);
    		    						cellStyle = wb2.createCellStyle();
    		    						cellStyle.setDataFormat(fmt.getFormat("hh:MM"));
    		    						cell2.setCellStyle(cellStyle);
    		    						System.out.println("on écrit l'heure trouvée ");
    		    						
    		    						System.out.println("SEMAINE 1: "+tabPrenomQ[0][y]+y+"   =   "+tabPrenomP[0][z]+z+"a fait: "+tabheures[1][z]);
    		    						z=0;//POUR RETESTER LES AGENT DE LA SEMAINE 1
    		    						break repet;
    		    					}
    		    				}
    		    			}
    		    			// si la semaine de l'agent en cours trouvée n'est pas = 1: on passe au prénom suivant de Quimper
    		    			f++;
    		    		}//2eme for
    		    		z=0;
    		    	}//1er if
    		    }//2ème for
    		    System.out.println("*******************SEMAINE 4*********************");
    		    System.out.println("tabPrenomQ |  tabPrenomP");
    		    for (int y=0; y<nbPrenomsQ; y++){//pour chaque prénom de Quimper
    		    	if(tabPrenomQ[0][y]!=null){
    		    		int z, f=0;
    		    		repet :for(z = 0; z<nbPrenomsP; z++){//et pour chaque prenom du fichier Projection
    		    			if(tabPrenomP[0][z]!=null){
    		    				if(semaineP[1][f]==4){// si la semaine de l'agent en cours trouvée est = 1
    		    					//System.out.println("semaineP après le if"+semaineP[1][f]);
    		    					System.out.println(tabPrenomQ[0][y]+y+"   =   "+tabPrenomP[0][z]+z);
    		    					if(tabPrenomQ[0][y].equals(tabPrenomP[0][z])){//si le prénom du 1er fichier = prénom du 2ème fichier
    		    						//
    		    						System.out.println("SEMAINE 4: "+tabPrenomQ[0][y]+y+"   =   "+tabPrenomP[0][z]+z+"a fait: "+tabheures[1][z]);
    		    						z=0;//POUR RETESTER LES AGENT DE LA SEMAINE 1
    		    						break repet;
    		    					}
    		    				}
    		    			}
    		    			// si la semaine de l'agent en cours trouvée n'est pas = 1: on passe au prénom suivant de Quimper
    		    			f++;
    		    		}//2eme for
    		    		z=0;
    		    	}//1er if
    		    }//2ème for
    		   
    		    // Write the output to a file
    			FileOutputStream fileOut = new FileOutputStream("C:/Donnees/Aide_Manager/Quimper2_AS_OE_1erT 2012.xlsx");
    			wb2.write(fileOut);
    			fileOut.close();
    			//System.out.println("écrire à la bonne ligne l'heure que l'agent à effectué dans Projection");
    			
    			    	
    	} catch (FileNotFoundException e){
    		e.printStackTrace();
    	} catch (IOException e) {
    		e.printStackTrace();
    	} catch (InvalidFormatException e) {
    		// TODO Auto-generated catch block
    		e.printStackTrace();
    	}
    	}

    D'après mes recherche, j'ai modifié mon eclipse.ini comme suit:
    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
    -startup
    plugins/org.eclipse.equinox.launcher_1.2.0.v20110502.jar
    --launcher.library
    plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.1.100.v20110502
    -product
    org.eclipse.epp.package.jee.product
    --launcher.defaultAction
    openFile
    --launcher.XXMaxPermSize
    256M
    -showsplash
    org.eclipse.platform
    --launcher.XXMaxPermSize
    256M
    --launcher.defaultAction
    openFile
    -vmargs
    -Dosgi.requiredJavaVersion=1.5
    -Xms512m
    -Xmx1024m
    Quand je met eclipse.ini:
    -Xmx1024m

    Quand je redémarre eclipse, j'ai:
    "failed to create the java virtual machine"

    du coup, je suis repasser a 1024.

    je comprend pas, ce qu'il faut faire j'ai terminé mon programme mais il marche pas.

    Quelqu'un sait-il ce que je dois faire svp ?
    merci

  2. #2
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Ce n'est pas dans le fichier ini que se paramètre la taille de la VM affectée au lancement de tes programmes à l'intérieur d'éclipse, mais dans le option du run de ta classe. Tu obtiens celà en allant dans le menu Run->Run Configurations.

    Dans la partie gauche de la popup développe la partie Java Applications et sélectionne ta classe.

    Dans l'onglet arguments, dans la textarea VM Arguments, tu pourras ajouter l'argument VM qui va bien pour définir la taille max (par exemple -Xmx 512M).

  3. #3
    Membre éclairé Avatar de mouss4rs
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    884
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 884
    Par défaut
    Oui, mais pour l'export en .jar ce n'est pas pris en compte.

    Comment dire au .jar de s'executé avec 512 sans passer par la console windows?

  4. #4
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Tu ne peux pas.

    Les paramètre de la VM ne peuvent pas être précisés dans le jar.

    Tu dois définir un lanceur qui va lancer le jar avec les paramètres adéquats dans la commande java.

    exemple:

    java -Xmx512M -jar monAppli.jar

    Ce lanceur va varier suivant les OS:

    un script shell sous les différents d'UNIX/Linux, éventuellement couplés à un fichier .desktop.
    Sous MacOS un script shell ou une véritable application MacOS: http://java.sun.com/developer/techni...LP/JavaToMac3/

    Sous windows tu peux créer un bat responsable du lancement de ta commande, ou encore utiliser un wrapper tel que Launch4j.

  5. #5
    Membre éclairé Avatar de mouss4rs
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    884
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 884
    Par défaut
    Je suis sous windows.
    Le .bat doit-être plus facile à faire que launch4j.
    non ?

  6. #6
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    C'est à toi de voir.

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

Discussions similaires

  1. Erreur "java.lang.OutOfMemoryError: Java heap space"
    Par Mysticaddict dans le forum Java EE
    Réponses: 3
    Dernier message: 14/08/2013, 12h04
  2. Erreur "java.lang.outofmemoryerror java heap space"
    Par iliass001 dans le forum Général Java
    Réponses: 10
    Dernier message: 18/02/2013, 15h22
  3. Erreur "java.lang.OutOfMemoryError: Java heap space"
    Par djanahana dans le forum Langage
    Réponses: 5
    Dernier message: 05/06/2012, 14h40
  4. Réponses: 3
    Dernier message: 04/12/2007, 22h32
  5. 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