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

avec Java Discussion :

grande quantité de textes, problème de mémoire, API SGDB native?


Sujet :

avec Java

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 17
    Par défaut grande quantité de textes, problème de mémoire, API SGDB native?
    Bonjour,

    je dois travailler avec une grande quantité de documents textuels, que je stocke dans mon programme écrit en java au moyen de 2 classes:

    Corpus, qui représente l'ensemble des documents, et ne contient pas grand chose de plus qu'un vecteur de Documents
    Document, qui représente un document et qui contient deux champs: id et text

    les documents que j'importe sont répartis dans un ensemble de fichiers zip contenant chacun des fichiers XML. Donc j'utilise la classe ZipFile pour dézipper et créer un InputStream de chac fichier contenu dans l'archive, cet InputStream est alors analysée grâce à un parser SAX. A chaque fichier un nouveau document est créé et a jouté au corpus.

    Le problème c'est qu'après environ 17000 documents mon programme s'arrête et me signale un java.lang.outOfMemoryError. A ce moment, le programme prend à peut près 100Mb en mémoire, et le nombre de charactères stockés est à peut près de 24,6 millions. A la base, le programme, quoique très simple, prend 25Mb en mémoire (lancé à partir d'eclipse, et je regarde l'évolution du programme javaw.exe, car c'est celui qui commence à grossir lorsque je clique sur importer les documents).

    J'ai ajouté un System.gc() après chaque lecture de fichier zip, mais cela ne change rien, et j'ai lu sur Internet que ça n'était même pas certain que cela puisse fonctionner.

    Première question: quelle est la quantité maximale de mémoire que java peut utiliser?

    Je voudrais donc être en mesure d'importer tous mes documents (qui à la base tiennent sur 2 CD). Je me rend compte qu'il me faut créer une base de données. Mais j'aimerais que mon programme soit facilement portable, donc je cherche une API de gestion de base de données SANS SERVEUR, et écrite en Java (pas besoin de dll sous windows ou d'installer un package sous linux). Un peu à la SQLite sauf que SQLite requiert l'installation d'un composant sur le système.

    Quelqu'un a une idée?

  2. #2
    Modérateur
    Avatar de Alkhan
    Homme Profil pro
    ingénieur full stack
    Inscrit en
    Octobre 2006
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur full stack

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 232
    Par défaut
    bonjour

    Pour ce qui est de la mémoire de la jvm elle est limitée par rapport a la mémoire disponible sur la machine ! pour la changer tu as deux paramètres -Xms64M (taille minimum au démarrage) -Xmx512M (taille maximum en cours de traitement). 64 et 512 étant des exemples a remplacer par les bonnes valeurs.

    Si toutefois tu as besoins d'une base de données embarquée je te conseil H2 qui est une base écrite en java et utilisable via jdbc.
    Il n'y a pas de problème, il n'y a que des solutions.
    Cependant, comme le disaient les shadoks, s'il n'y a pas de solution, c'est qu'il n'y a pas de problème.
    Si toutefois le problème persiste, la seule solution restante est de changer le périphérique qui se trouve entre la chaise et l'écran

    Mes Articles : Mon premier article est sur le language D
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 17
    Par défaut merci
    merci, ça a l'air pas mal. Entre temps j'avais trouvé BerkeleyDB, mais c'est pas plus mal si je peux changer de JDBC en cours de route.

    merci encore

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 252
    Par défaut
    Plusieurs remarques...

    1. On ne change pas de JDBC : JDBC est un connecteur générique aux bases de données. Donc, tu peux changer le SGBC derrière JDBC, mais pas JDBC.
    2. Il existe entre autres comme DB embarquée : SQLite et HSQ. D'autres existent, bien entendu, mais celles-ci sont les plus répandues dans le monde Java.
    3. Si ta mémoire prend tant de place, n'utiliserais-tu pas un répertoire temporaire de la machine pour y stocker tes documents ? File.createTempDir() et File.deleteOnExit() existen pour cela. Java s'assure alors que le répertoire soit bien supprimé à la fermeture de la machine virtuelle.
    4. Si ta mémoire prend tant de place, t'assures-tu de bien flusher tous les documents quand nécessaire ? As-tu réellement besoin de tous les garder en mémoire ? Ne ferais-tu pas un système qui vide complètement un document de la mémoire et qui n'y accède que lorsque c'est réellement nécessaire ?

    Avec 128Mo de mémoire alloués par Java, tu devrais t'en sortir, je crois. Vraiment rares sont les applications qui ont réellement besoin de davantage.

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 06/11/2009, 21h38
  2. [GD] Problème de mémoire avec les grandes images en PHP
    Par bodysplash007 dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 12/04/2007, 17h02
  3. Problème de mémoire avec BDE
    Par Machuet dans le forum Bases de données
    Réponses: 3
    Dernier message: 13/07/2004, 10h11
  4. Problème de mémoire Affichage images
    Par Repti dans le forum C++Builder
    Réponses: 6
    Dernier message: 29/03/2004, 20h06

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