Java.lang.OutOfMemoryError: Java heap space [Résolu/Fermé]

Signaler
Messages postés
84
Date d'inscription
dimanche 30 octobre 2011
Statut
Membre
Dernière intervention
7 février 2015
-
Messages postés
15932
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
9 juillet 2020
-
Bonjour tout le monde,

je rencontre un probleme lors de l'affichage d'un grand nombre d'enregistrements dans jtable.

l'erreur rencontré est la suivante :

Exception in thread "Thread-3" java.lang.OutOfMemoryError: Java heap space

at java.util.Vector.<init>(Vector.java:111)
at java.util.Vector.<init>(Vector.java:124)
at java.util.Vector.<init>(Vector.java:133)
..........
..........
..........

Veuillez m'aider svp.

2 réponses

Messages postés
15932
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
9 juillet 2020
2 629
Ta machine virtuelle n'a pas suffisamment d'espace pour toutes les données que tu rentres, cela peut-être dû à une mauvaise configuration.
Tu peux utiliser l'option -Xmx pour définir la taille maximale à donner à la JVM.
Par exemple -Xmx256m lui attribuera 256 Mo de mémoire.

Si tu as toujours des problèmes, il va falloir optimiser ton programme pour limiter l'espace perdu, mais là ça va être une autre paire de manches !
13
Merci

Heureux de vous avoir aidé ! Vous nous appréciez ? Donnez votre avis sur nous ! Evaluez Comment Ça Marche

CCM 61921 internautes nous ont dit merci ce mois-ci

Messages postés
84
Date d'inscription
dimanche 30 octobre 2011
Statut
Membre
Dernière intervention
7 février 2015
2
Ce que je fais est tres simple, je recupere les données depuis une base de données et les afficher dans un jtable, il s'agit des données d'une année toute entiere qui doivent etre affiché pour l'utilisateur et qu'il peut les exporter sous un format excel.
Ce que je comprend depuis ton intervention que :
1 - je dois mettre en place un affichage en page
2 - exporter les données pt importe l'affichage dans la base de données.

La choses un peu etrange aussi que lorsque je travail sous Sql developer (outil d'oracle) ca me permet d'extraire un maximum de données (mais il a aussi des limite) il est aussi developpé avec java.

Merci bcp KX. (et si t'as un exemple de l'une de tes appli qui fonctionne en page ca se sera tres interessant).
Messages postés
15932
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
9 juillet 2020
2 629 >
Messages postés
84
Date d'inscription
dimanche 30 octobre 2011
Statut
Membre
Dernière intervention
7 février 2015

Si tu as une base de données, pourquoi est-ce que tu stockes tes résultats dans un vecteur ?
J'avoue que question BDD je suis un peu rouillé mais ne pourrais-tu pas directement stoker les résultats de ta recherche dans ta base de données pour ensuite aller chercher 100 par 100 à l'affichage (rajoute juste un bouton plus et un bouton moins pour te déplacer d'une page à la suivante) ou la consulter itérativement pour l'enregistrement du fichier CSV mais sans avoir à copier tes 800000 résultats dans ton programme Java...
Messages postés
84
Date d'inscription
dimanche 30 octobre 2011
Statut
Membre
Dernière intervention
7 février 2015
2
J reformule ta réponse, j'interorge la base de données je recupere mon resultSet qui contient tous les enregistrements (800 000) j'ajoute au fur et à mesure les 100 enregistrements dans un vector tant que l'utilisateur le demande(bouton plus). c'est exactement ce que tu propose ?
Messages postés
15932
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
9 juillet 2020
2 629 >
Messages postés
84
Date d'inscription
dimanche 30 octobre 2011
Statut
Membre
Dernière intervention
7 février 2015

Je ne sais pas trop comment fonctionne le ResultSet, savoir si il copie tous les résultats où si ça ne fait que pointer vers la base de données, mais dans ce cas oui c'est ce que je dis. À partir de ton resultSet n'en afficher qu'une petite partie à chaque fois (100 par exemple), et à la demande afficher les 100 suivants ou les 100 précédents. Et pour le fichier CSV prendre le resultSet dans son intégralité mais sans restocker tout dans un vector pour autant, directement de la base de donnée au CSV.
Messages postés
84
Date d'inscription
dimanche 30 octobre 2011
Statut
Membre
Dernière intervention
7 février 2015
2
Merci infiniment KX, pour l'objet resultSet : il contient le jeu d'enregistrement ramené par l'interogation SQL, il contient l'integralité des enregistrements.

Ca me reste qu'implementer un code qui correspond à ta suggestion.
je te souhaite une tres bonne journée.
Je comprend désormais ce qui ne vas pas mais comment aller sur -Xmx
Messages postés
15932
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
9 juillet 2020
2 629
C'est un paramètre à fournir dans la ligne de commande qui démarre le programme.
java -Xmx256m ClasseAvecMethodeMain

Voir la documentation : https://docs.oracle.com/en/java/javase/11/tools/java.html