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 :

Désérialisation HashMap trop coûteuse en mémoire


Sujet :

Collection et Stream Java

Vue hybride

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

    Informations forums :
    Inscription : Mai 2007
    Messages : 23
    Par défaut Désérialisation HashMap trop coûteuse en mémoire
    Bonjour,

    j'ai une HashMap sérialisée dans un fichier, qui fait environ 30Mo.

    Avec Runtime.getRuntime().totalMemory();, j'ai vérifié que la HashMap ne consomme pas trop en mémoire :

    Total memory : 529465344
    Loading...
    583032 elements loaded.
    Total memory : 517013504

    Quelque chose comme 12Mo, donc...

    Pourtant, je dois lancer mon programme avec l' option -Xmx512m, avec 256 ou moins j'ai une erreur :
    Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
    at java.io.ObjectInputStream$HandleTable.grow(ObjectInputStream.java:3421)
    at java.io.ObjectInputStream$HandleTable.assign(ObjectInputStream.java:3227)
    at java.io.ObjectInputStream.readString(ObjectInputStream.java:1610)
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1320)
    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351)
    at java.util.HashMap.readObject(HashMap.java:1029)

    Et ceci même si je crée un programme qui ne fait qu'ouvrir cette HashMap...

    Avez-vous une idée d'où ça peut venir ?

    Merci d'avance

  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
    Tu stocke quoi dans cette hashmap?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 23
    Par défaut
    Une String en clé, un tableau de 3 Strings en valeur (entre 1 et ~30 caractères chaque).

  4. #4
    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
    as tu essayé avec un autre outils de serialisation/déserialisation, comme Jboss serialization?

    http://www.jboss.org/serialization/

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 23
    Par défaut
    En fait, ça ne semble pas venir de la sérialisation : j'ai exactement le même problème si je génère la HashMap (à partir de données dans un fichier texte) plutôt que de la charger à partir d'un fichier sérialisé... Je ne comprends vraiment pas pourquoi autant de mémoire est nécessaire.

    EDIT : en fait, c'est plutôt Runtime.getRuntime().freeMemory() que je devrais utiliser... Et à ce moment là, il semble en effet que la HashMap occupe plus de 250Mo en mémoire.
    C'est normal qu'elle prenne beaucoup plus de place que le fichier contenant le même objet sérialisé ?

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    338
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2008
    Messages : 338
    Par défaut
    t'a quoi comme données sur la map à part ceux chargé de ton fichier?

Discussions similaires

  1. Requête trop coûteuse
    Par fredericlb dans le forum Langage SQL
    Réponses: 6
    Dernier message: 22/03/2010, 14h01
  2. Trop de ressource mémoire
    Par Rian83 dans le forum OpenGL
    Réponses: 9
    Dernier message: 17/04/2009, 15h58
  3. Inserts trop gourmand en mémoire
    Par ledjlale dans le forum PostgreSQL
    Réponses: 6
    Dernier message: 05/11/2008, 21h51
  4. XML trop gros en mémoire : un moyen d'alléger ?
    Par rednik dans le forum Format d'échange (XML, JSON...)
    Réponses: 10
    Dernier message: 19/09/2008, 18h06
  5. Problème de trop grande consommation mémoire
    Par luckyvae dans le forum Général Java
    Réponses: 2
    Dernier message: 19/03/2008, 11h05

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