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 :

Problème de trop grande consommation mémoire


Sujet :

Java

  1. #1
    Membre actif
    Profil pro
    Étudiant
    Inscrit en
    Février 2005
    Messages
    263
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2005
    Messages : 263
    Points : 255
    Points
    255
    Par défaut Problème de trop grande consommation mémoire
    Bonjour,

    Dans le cadre d'un projet pour mes cours, je dois faire avec un ami un petit moteur de recherche. Nous avons donc travaillé, rendu nos étapes en temps et en heures et nous avons toujours obtenu des notes satisfaisantes ( pour l'instant, une moyenne de 17/20)

    Lors de la dernière étape, nous devions faire des test de plus grande envergure que précédemment et indexer beaucoup plus de pages web que pour les étapes précédentes, et là, c'est le drame. On utilise beaucoup trop de mémoire...
    Là ou certains groupes ne consomment jamais plus de 512M de mémoire, notre travail en consomme plus d'un giga et demi.

    Et donc, j'en viens à la raison de ce post. Serait-ce possible que quelqu'un jette un coup d'œil sur notre code afin de tenter de trouver là ou se trouverais notre erreur?
    Le travail en question à déjà été remis, mais, ça m'agace de ne pas savoir ou notre erreur réside. J'en ai parlé à l'assistant et il est d'accord pour que je demande de l'aide, mais bien entendu, c'est à mon coéquipier et moi de corriger l'erreur


    Un peu d'explication sur comment on a géré notre code.
    Pour faire une recherche sur un site donné, cela se passe en deux temps: l'indexation puis ensuite la recherche. Ce qui pose problème, c'est la création de l'index.
    La structure utilisée pour l'index est une HashMap qui contient comme clé un mot, et comme valeur un arbre dans lequel on met une référence vers chaque url contenant ce mot, ainsi que le nombre de fois que ce mot est présent dans la page. ( Avant, nous utilisions une hashmap à la place d'arbres, mais en changeant de cette manière (remplacement hashmap -> arbre) on a gagné de l'espace mémoire )
    Tout ceci est gardé en mémoire centrale, car c'est une demande explicite du professeur.

    Le parcours du web est effectué par différents robots (thread). Chacun d'entre eux possède sa propre file d'attente d'url à traiter. (La distribution des charges entre les différents robots n'est pas optimale).
    On parcourt le web en fonction de trois paramètres: une page de départ, un domaine de restriction (par exemple: ".com") et une profondeur maximale.
    Pour vérifier que l'on ne parcourt pas plusieurs fois la même page, un hashSet est créé contenant chaque URL parcourue.

    Les énoncés sont disponibles à cette adresse

    Bon, je pense avoir expliqué le principal, si vous avez d'autres questions, je suis à votre disposition.

    D'avance, merci
    Fichiers attachés Fichiers attachés

  2. #2
    Membre chevronné
    Avatar de CheryBen
    Inscrit en
    Mai 2005
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 599
    Points : 2 197
    Points
    2 197
    Par défaut
    Bonjour, je te conseille de te tourner vers des outils tels que JProfiler ou TPTP qui permettent de voir en temps réel la consommation mémoire et le nombre d'instances de chaque classe, pendant que l'application tourne.

  3. #3
    Membre actif
    Profil pro
    Étudiant
    Inscrit en
    Février 2005
    Messages
    263
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2005
    Messages : 263
    Points : 255
    Points
    255
    Par défaut
    Merci pour ton conseil,

    j'ai utilisé le profiler intégré à Netbeans, et j'ai pu grâce à l'enregistrement de la création d'objet pu optimiser certains passages. Voici un peu les résultat que j'ai obtenu:
    Au départ, pour une exécution, je créais +200.000 char[]. Ensuite, après deux trois optimisations, je suis passé à 170.00, puis 132.00, 85.000 et pour l'instant je suis à 36.000.

    Je suppose que grâce à cette baisse d'allocations, je pourrais gagner en mémoire, mais ce qui est sur, c'est que je vais de toute façon gagner en temps d'exécution

    Je continue à essayer d'optimiser par-ci, par-là et je vous tient au courant

Discussions similaires

  1. Débutant, problème tableaux trop grands, mémoire
    Par Sabrina0021 dans le forum C
    Réponses: 2
    Dernier message: 24/07/2011, 00h26
  2. Réponses: 1
    Dernier message: 06/09/2009, 19h32
  3. Réponses: 12
    Dernier message: 07/08/2008, 10h06
  4. Souci de mémoire : tableaux trop grands
    Par driss80 dans le forum Fortran
    Réponses: 8
    Dernier message: 13/03/2008, 14h42
  5. Gros problème de consommation mémoire.
    Par Nyphel dans le forum Langage
    Réponses: 8
    Dernier message: 14/02/2007, 14h35

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