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

Java Discussion :

Serialization erreur OutOfMemory


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 40
    Par défaut Serialization erreur OutOfMemory
    Bonjour
    Je suis en train de voir si la serialization pourrait m'aider dans mon application. En fait je fait des tests pour le moment, où j'enregistre un objet (un type d'arbre) de taille conséquente, dans un fichier par la serialization, puis je recréé un arbre que je rempli et ainsi de suite.
    Mais ou bout de la deuxième serialization j'ai le droit à un OutOfMemory :

    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
    Exception in thread "AWT-EventQueue-0" java.lang.OutOfMemoryError: Java heap space
    	at java.io.ObjectOutputStream$HandleTable.growEntries(Unknown Source)
    	at java.io.ObjectOutputStream$HandleTable.assign(Unknown Source)
    	at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)
    	at java.io.ObjectOutputStream.writeObject0(Unknown Source)
    	at java.io.ObjectOutputStream.writeArray(Unknown Source)
    	at java.io.ObjectOutputStream.writeObject0(Unknown Source)
    	at java.io.ObjectOutputStream.defaultWriteFields(Unknown Source)
    	at java.io.ObjectOutputStream.defaultWriteObject(Unknown Source)
    	at java.util.Vector.writeObject(Unknown Source)
    	at sun.reflect.GeneratedMethodAccessor10.invoke(Unknown Source)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    	at java.lang.reflect.Method.invoke(Unknown Source)
    	at java.io.ObjectStreamClass.invokeWriteObject(Unknown Source)
    	at java.io.ObjectOutputStream.writeSerialData(Unknown Source)
    	at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)
    	at java.io.ObjectOutputStream.writeObject0(Unknown Source)
    	at java.io.ObjectOutputStream.defaultWriteFields(Unknown Source)
    	at java.io.ObjectOutputStream.writeSerialData(Unknown Source)
    	at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)
    	at java.io.ObjectOutputStream.writeObject0(Unknown Source)
    	at java.io.ObjectOutputStream.writeArray(Unknown Source)
    	at java.io.ObjectOutputStream.writeObject0(Unknown Source)
    	at java.io.ObjectOutputStream.defaultWriteFields(Unknown Source)
    	at java.io.ObjectOutputStream.defaultWriteObject(Unknown Source)
    	at java.util.Vector.writeObject(Unknown Source)
    	at sun.reflect.GeneratedMethodAccessor10.invoke(Unknown Source)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    	at java.lang.reflect.Method.invoke(Unknown Source)
    	at java.io.ObjectStreamClass.invokeWriteObject(Unknown Source)
    	at java.io.ObjectOutputStream.writeSerialData(Unknown Source)
    	at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)
    	at java.io.ObjectOutputStream.writeObject0(Unknown Source)
    J'ai ajouté :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Runtime.getRuntime().gc();
    Mais rien ne change. Merci de votre aide

  2. #2
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    Fais voir ton code de sérialization.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  3. #3
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 40
    Par défaut
    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
    	public void serialization()
    	{
    		try 
    		{
    			// ouverture d'un flux de sortie vers le fichier "AT_.serial"
    			FileOutputStream fos = new FileOutputStream(Global.fileBurstSortFolder()+"AT_"+this.nbOfFiles+".serial");
     
    			// création d'un "flux objet" avec le flux fichier
    			ObjectOutputStream oos= new ObjectOutputStream(fos);
    			try 
    			{
    				// sérialisation : écriture de l'objet dans le flux de sortie
    				oos.writeObject(this.sicAT); 
    				// on vide le tampon
    				System.out.println("Object écrit dans "+"AT_"+this.nbOfFiles+".serial");
    				oos.flush();
     
    			} 
    			finally
    			{
    				//fermeture des flux
    				try 
    				{
    					oos.close();
    				} 
    				finally 
    				{
    					fos.close();
    				}
    			}
    		} 
    		catch(IOException ioe) 
    		{
    			ioe.printStackTrace();
    		}
    		finally
    		{
    			this.sicAT = new AccessTrie();//Déclare un nouvel arbre
    			Runtime.getRuntime().gc();
    			this.nbRecords =0;
    		}
    	}

  4. #4
    Membre chevronné Avatar de djsnipe
    Inscrit en
    Mai 2008
    Messages
    440
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 440
    Par défaut
    Bonjour,

    Sans entrer dans le détail de ton code, une erreur OutOfMemoryError signifie que ta VM n'a plus assez de mémoire disponible par rapport à tes besoins. Le fait de forcer le Garbage ne sert à rien car pour en arriver à ce point, la VM à déjà fait son maximum pour libérer de la mémoire.
    Deux causes possibles :
    1) Fuite mémoire, expliquant l'erreur ==> donc à traquer.
    2) Besoin mémoire trop important ==> il faut tailler la VM au démarrage, avec l'option -Xmx en ligne de commande

  5. #5
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 40
    Par défaut
    Et comment on traque la fuite mémoire?

    Parce que le Xmx je l'ai déjà configuré.

  6. #6
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 40
    Par défaut
    Je me suis tromper, j'avais supprimé ma configuration avec le Xmx, je viens seulement de le remettre et en effet ça marche.
    Mais j'aimerais quand même savoir comment traquer les fuites de mémoire
    Je vous remercie.

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

Discussions similaires

  1. Erreur OutOfMemory incomprise
    Par Ceubex dans le forum Général Java
    Réponses: 2
    Dernier message: 19/08/2011, 09h24
  2. Serialization Policy erreur
    Par piltrafeta dans le forum GWT et Vaadin
    Réponses: 10
    Dernier message: 12/05/2010, 13h31
  3. ASP.net 1.1 : Erreur OutOfMemory
    Par morgiou dans le forum ASP.NET
    Réponses: 1
    Dernier message: 08/12/2008, 13h53
  4. Erreur TStringList OutofMemory
    Par jonckers dans le forum C++Builder
    Réponses: 1
    Dernier message: 26/04/2007, 10h25
  5. [C#] Comment serializer l'écriture des erreurs dans un fichier
    Par LE NEINDRE dans le forum Windows Forms
    Réponses: 9
    Dernier message: 17/11/2006, 14h54

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