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 :

Ensemble contenant peu d'éléments


Sujet :

Langage Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 190
    Par défaut Ensemble contenant peu d'éléments
    Bonjour,

    J'ai à manipuler beaucoup d'ensembles (quelques millions) qui ont une petite taille (typiquement 2 ou 3 éléments; quelques centaines dans le pire des cas).

    Par habitude, j'ai utilisé un HashSet mais j'ai des problème de mémoire. En effet, sa capacité est initiale est de 16. Dans mon cas, j'en conclut que typiquement 13/14 espaces mémoires sont utilisés mais vide. Et 13*1 000 000, cela fait beaucoup.

    Du coup, j'ai envie de diminuer la taille par défaut. Par exemple, je peux prendre la valeur 2. J'ai du mal à évaluer les conséquence de ce choix. Avez-vous du feedback à partager?

    Y-a-t-il d'autres choix possibles?

    Merci de votre aide.

  2. #2
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 713
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 713
    Par défaut
    quelques millions ...

    Ces quantités sont habituellement plutôt traitées par une base de données.
    - Quels sont les éléments de ces ensembles ?
    - Quels types de traitements sur les éléments / ensembles ?
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 190
    Par défaut
    Merci de ton aide.

    D'abord mes ensembles contiennent des entiers.

    J'ai deux actions sur les ensembles:
    - ajouter un élément (au sens d'un ensemble i.e. je ne veux pas de doublon),
    - itérer sur tous les éléments.

    Concrètement, je représente un automate (faiblement) non déterministe. Je stocke donc des règles du style:
    état --- transition ----> ensemble d'états

  4. #4
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 713
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 713
    Par défaut
    La base de donnée peut répondre à ce problème
    (capable de refuser les doublons)
    et aussi pour l'itération.

    Il y aura un petit travail d'optimisation à prévoir mais bon ...
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

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

    Informations forums :
    Inscription : Février 2007
    Messages : 190
    Par défaut
    Merci pour ton aide.

    Je garde l'idée de la base de données sous le coude mais j'aimerai l'éviter. Elle va à contre courant que ce que nous voulons faire.

  6. #6
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 713
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 713
    Par défaut
    as-tu vu qu'en lançant ton application, tu peux demander à la JVM d'augmenter la mémoire utilisée :
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

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

    Informations forums :
    Inscription : Février 2007
    Messages : 190
    Par défaut
    Oui, je suis déjà au max de ce que mon ordi peut supporter.

  8. #8
    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
    Les traitements que tu as à effectuer ne sont pas très clair. tu pourrais peut-être imaginer faire un Graphe par toi-même ? Donc plus de HashSet avec les nombreux trous.
    Reste à voir si la vérification d'unicité se fait une fois pour toute au démarrage ou pas. Si c'est tout au long de la durée de vie du programme, il faudrait peut-être voir à stocker les données dans une liste maintenue triée avec recherche dichotomique pour savoir si une valeur existe déjà.
    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.

  9. #9
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 483
    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 483
    Par défaut
    Clairement, si t'as un million de structures généralement petites, oublie les structures complexe comme les objet. Pour chaque entier sotcké dans le set tu va créer un wrapper (Integer), tu va devoir avoir la structure du set en lui même et son espace de stockage. Un HashSet, en plus, utiliser un table de hashage et des listes chainée. Un hashset occupe donc beaucoup plus d'espace en mémoire qu'un simple tableau. Quand on regarde sur le net, on estime qu'un "grand tableau" occupe à peu près la place des données qu'il contient. Par contre, un hashset, pour y stocker des primitif, on en arrive à un facteur 20.
    Bref, un hashset avec beaucoup d'entier occupe environ 20x plus de mémoire qu'un tableau de la même quantité d'entiers.

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 190
    Par défaut
    Bref, un hashset avec beaucoup d'entier occupe environ 20x plus de mémoire qu'un tableau de la même quantité d'entiers.
    C'est une information qui m'est super utile.

    Merci pour ton aide.

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 190
    Par défaut
    Je marque le sujet comme résolu car l'idée de tchize m'a permis de faire un très grand pas en avant.

    Néanmoins, si quelqu'un a une autre idée, je continue ma veille.

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

Discussions similaires

  1. Trouver les ensembles contenant un élément
    Par nanosoft dans le forum C
    Réponses: 4
    Dernier message: 31/07/2014, 18h46
  2. Réponses: 3
    Dernier message: 03/12/2010, 16h34
  3. ResultSet ne contenant qu'un élèment comme resultat
    Par fripette dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 22/04/2008, 15h29
  4. Boucle : pour chaque élément d'un ensemble ?
    Par monstroplante dans le forum Langage
    Réponses: 7
    Dernier message: 07/11/2005, 16h45
  5. Optimisation algo permutations éléments d'1 ensemble
    Par User dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 23/10/2005, 19h29

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