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?
Partager