Message java.lang.OutOfMemoryError

ulysse00 Messages postés 291 Date d'inscription lundi 6 novembre 2006 Statut Membre Dernière intervention 12 mai 2013 - 2 févr. 2007 à 00:49
cs_Dadou09 Messages postés 2 Date d'inscription lundi 8 juin 2009 Statut Membre Dernière intervention 4 décembre 2009 - 4 déc. 2009 à 20:27
salut je voulais afficher mes enrgistrement  sur Jtable alors  j'ai ce  message

java.lang.OutOfMemoryError
Exception in thread "main"

j'ai une table avec 100212 lignes
mais si je vais afficher une table avec une disaine de ligne  alorsj'ia créé une table avec 11 enregistrement i y a pas de souci àa marche trés bien
voici mon code :
package aa;

import java.awt.*;
import java.io.*;
import java.sql.*;
import java.util.*;
import javax.swing.*;
import javax.swing.table.*;

public class TableFromDatabase extends JFrame
{
    public TableFromDatabase()
    {
        Vector columnNames = new Vector();
        Vector data = new Vector();
        Connection conn = null;
        String url = "jdbc:mysql://localhost/matable";
        String userName = "root";
        String password = "3876605";

        try
        {
          Class.forName("org.gjt.mm.mysql.Driver").newInstance();
              conn = DriverManager.getConnection(url, userName, password);
              System.out.println("Connected");

              Statement instruction = conn.createStatement();
                          String sql="select *  from matable";
                         ResultSet resultat = instruction.executeQuery(sql);
                         ResultSetMetaData md = resultat.getMetaData();
                                     int columns = md.getColumnCount();
                                    
                                     //  Get column names

                                     for (int i = 1; i <= columns; i++)
                                     {
                                         columnNames.addElement( md.getColumnName(i) );
                                     }

                                     //  Get row data

                                     while (resultat.next())
                                     {
                                         Vector row = new Vector(columns);

                                         for (int i = 1; i <= columns; i++)
                                         {
                                             row.addElement( resultat.getObject(i) );
                                         }

                                         data.addElement( row );
                                     }

                                     resultat.close();
                                     instruction.close();
                                 }
                                 catch(Exception e)
                                 {
                                     System.out.println( e );
                                 }

                                 //  Create table with database data

                                 JTable table = new JTable(data, columnNames);

                                 JScrollPane scrollPane = new JScrollPane( table );
                                 getContentPane().add( scrollPane );

                                 
                             }

                             public static void main(String[] args)
                             {
                                 TableFromDatabase frame = new TableFromDatabase();
                                 frame.setDefaultCloseOperation( EXIT_ON_CLOSE );
                                 frame.pack();
                                 frame.setVisible(true);

                             }
                         }

merci d'avance

10 réponses

cs_le_totophe Messages postés 51 Date d'inscription samedi 3 janvier 2004 Statut Membre Dernière intervention 26 mai 2007 2
2 févr. 2007 à 01:48
Salut,
j'ai eu le même problème et je ne me souviens plus précisement d'ou venait le problème mais je sais que contrairement à ce que pouvait laisser penser le message ce n'était pas la taille des données à mettre dans la table qui était en cause (quoique dans on cas, + de 100.000 lignes, ça fait pas mal).

Afin de m'éclairer pour savoir s'il faut que je cherche d'où venait mon erreur, est-ce que le problème se produit toujours si:
<li>tu n'affiche pas le résultat dans une JTable mais que tu le stockes dans un tableau[][] ? (pour éviter les problèmes pouvant être dus à la JTable même)</li><li>si tu scindes ta requete en plusieurs requetes du type: for(...) { executerRequete("SELECT *  FROM matable LIMIT " + x + ", 200"); }</li>Tiens-moi au courant car si dans ta boucle, alors que tu récupère les données par 200 lignes (ou éventuellement moins) et que tu ne les ajoutes pas à la JTable, ça bug encore, je me repencherai sur mon ancien problème pour mieux t'aider.
Si ça ne bug plus, pourquoi, tu risques de devoir t'adapter aux limitations de tonn système ...
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
2 févr. 2007 à 09:31
Salut,

Pour des traitement aussi important il faut buffuriser les donner dans le JTable et n'y ranger que le contenu visible à l'instant 't'.

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
0
shaiulud Messages postés 404 Date d'inscription mardi 18 décembre 2001 Statut Membre Dernière intervention 15 juillet 2014 22
2 févr. 2007 à 13:20
sinon si tu as assez de RAM, tu fais -Xms4096M -Xmx8192M sur ta JVM
mais twinuts à raison, tu n'as en pratique que 30 à 50 ligne visible.
0
ulysse00 Messages postés 291 Date d'inscription lundi 6 novembre 2006 Statut Membre Dernière intervention 12 mai 2013 1
2 févr. 2007 à 15:21
merci mes amis
j'ai tenté de limité le nombre de ligne par
 select *from matable limit 0,10000 j'ai un affichage mais si j'au gmente le nombre 100000  j'aurais toujours un message d'erreur
comment je dois faire -Xms4096M -Xmx8192M sur ta JVM
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
shaiulud Messages postés 404 Date d'inscription mardi 18 décembre 2001 Statut Membre Dernière intervention 15 juillet 2014 22
2 févr. 2007 à 17:14
une taille pareille était une boutade, il ta faudrait 8Go de RAM uniquement pour ta JVM.

pour info, tu fais java -Xms128M -Xmx 256M  pour allouer 128Mo au minimum et 256Mo au maximum.

mais surtout je te conseille de n'instancier que ce que tu dois affichier.
10000 lignes ne servent pas vraiement à grand chose...
0
ulysse00 Messages postés 291 Date d'inscription lundi 6 novembre 2006 Statut Membre Dernière intervention 12 mai 2013 1
2 févr. 2007 à 17:23
je n'ai pas encore fait -Xms128M -Xmx 256M  pour allouer 128Mo au minimum et 256Mo au maximum.
j'igore comment je dois faire tu peux me montrer comment je vais faire et je cherche un lien pour mieux me comprendr le probleme de jvm
0
cs_le_totophe Messages postés 51 Date d'inscription samedi 3 janvier 2004 Statut Membre Dernière intervention 26 mai 2007 2
2 févr. 2007 à 23:15
Yep, tu m'interesses Twinuts, comment tu fais ça pour bufferiser les donner et ne laisser en mémoire que celle visible à l'instant t ???

Merci d'avance
0
ulysse00 Messages postés 291 Date d'inscription lundi 6 novembre 2006 Statut Membre Dernière intervention 12 mai 2013 1
2 févr. 2007 à 23:51
désolé ami je n'ai pas compris ta question
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
3 févr. 2007 à 00:07
Salut,

ba simplement en ne mettant que ce qui est nessaisiaire à la vue de l'utilisateur (chose que tu peux controler avec les notifications de scroll d'un user sur les barres d'un jscrollpane) et ainsi tu anticipe exemple :
tu affiche 50 lignes visibles donc tu load 100 lignes soit 25 lignes pour un scroll up, 50 ligne pour la vue et 25 lignes pour le scroll down et ainsi de suite... ainsi tu ne load jamais 100 000 lignes dans ton jtable. les chiffres ne sont pas représentatif de la réalitée mais ils sont la pour donner une idée.

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
0
cs_Dadou09 Messages postés 2 Date d'inscription lundi 8 juin 2009 Statut Membre Dernière intervention 4 décembre 2009
4 déc. 2009 à 20:27
salut
moi je travail sur un projet java 3d et lorsque je compile j'ai l' exeception java.lang.OutOfMemoryError java heap space
bon j'ai comprit que c'est un probléme de taille de memoire jvm mais je sait pas comment je doit l'augmanter es que avec la commande java -Xmsn
si oui ou je l'execute es que au mode commande .et merci
0
Rejoignez-nous