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 :

Taille maximale d'une matrice


Sujet :

Java

  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Mars 2009
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations forums :
    Inscription : Mars 2009
    Messages : 28
    Par défaut Taille maximale d'une matrice
    Bonjour
    j'aimerais savoir la taille maximal d'une matrice supporter par java

    par expérience j'ai atteint 3100X3100 au delà de cette taille ça m'affiche l'erreur suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Exception in thread "AWT-EventQueue-0" java.lang.OutOfMemoryError: Java heap space

    c'est très urgent (je signale que je suis entrain de programmer l'algorithme de colonie de fourmis qui utilises beaucoup de matrice)
    merci d'avance

  2. #2
    Membre Expert
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Par défaut
    Il n'y a pas de taille maximale. Tu peux allouer autant de mémoire que la JVM en a de disponible (attention tout de meme si tu alloues presque tout, le reste du programme risque de ne plus avoir assez de mémoire pour fonctionner).
    Pour info, tu peux augmenter la taille de la mémoire allouée à la JVM avec la ligne de commande :
    java -Xms32m -Xmx64m MonProgramme

    ou 32m est la mémoire minimale allouée par la JVM et 64m le max. Bien sur, il faut adapter ces valeurs à tes besoins

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Mars 2009
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations forums :
    Inscription : Mars 2009
    Messages : 28
    Par défaut
    merci pour votre réponse, premièrement j'arrive pas a faire augmenter la machine virtuel comme vous venez de le dire pouvez vous expliquer un peut plus
    pour la taille je viens de déclarer une matrice de double qui contient 6000X6000 et il n’arrive pas de l'afficher alors que dans mon travaille je dois arriver a une matrice de 4 million X million
    je suis vraiment bloquer et je sais pas quoi faire

  4. #4
    Modérateur
    Avatar de wax78
    Homme Profil pro
    R&D - Palefrenier programmeur
    Inscrit en
    Août 2006
    Messages
    4 105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : R&D - Palefrenier programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 105
    Par défaut
    Une matrice de 4.000.000*4.000.000 de double ???

    Juste comme ca, un simple test de consommation ultra naif (juste regarder le gestionnaire de taches) pour une simple matrice de double.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    double [][] l = new double[5000][5000]; // 0.231 giga
    double [][] l = new double[10000][10000]; // 0.93 giga
    double [][] l = new double[20000][20000]; // 4.1 giga
    double [][] l = new double[40000][40000]; // 16 giga
    l'ordinateur explose :)
    Donc je sais pas de combien de giga de ram tu disposes mais j'ai un doute la ^^
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Mars 2009
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations forums :
    Inscription : Mars 2009
    Messages : 28
    Par défaut
    Bon dieux et pourtant j'ai un pc performant un processeur i7 et une ram 6 G
    malgré ça il y a toujour la meme erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Exception in thread "main" java.lang.OutOfMemoryError: Java heap space


    je signal que je travaille avec Netbeans, je vois vraiment ou est le problème

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    394
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 394
    Par défaut
    Bonjour,

    Un double c'est 8 octets en Java.

    Donc une matrice de 4 000 000 de double, ça représente environ 119209 Go (116 To)

    Bon courage

    Romain.

  7. #7
    Membre averti
    Homme Profil pro
    Inscrit en
    Mars 2009
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations forums :
    Inscription : Mars 2009
    Messages : 28
    Par défaut
    pour moi c'est pas obligatoire d'y arriver a 4million mais plus la matrice est grande mieux pour moi dans les tests, a votre avis quelle est la plus grande que je peux atteindre et comment pourrais je modifier ou agrandir la taille du JVM

  8. #8
    Modérateur
    Avatar de wax78
    Homme Profil pro
    R&D - Palefrenier programmeur
    Inscrit en
    Août 2006
    Messages
    4 105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : R&D - Palefrenier programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 105
    Par défaut
    Citation Envoyé par idirovitch Voir le message
    a votre avis quelle est la plus grande que je peux atteindre et comment pourrais je modifier ou agrandir la taille du JVM
    J'ai écrit 3 poste plus haut un +- table de mesure.

    Avec tes 6 giga tu pourras au mieux faire 25.000².

    Ensuite pour la taille de la JVM hwoarang a déja répondu.

    Utilises tu bien une machine virtuelle 64 bit au moins ?

    Et hormis pour d'eventuels test de performances (et encore), pas besoin d'aller chercher des matrices si grande a mon avis.
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  9. #9
    Membre très actif

    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    181
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2011
    Messages : 181
    Billets dans le blog
    1
    Par défaut
    Je confirme, il n'y a pas une taille maximale fixe, mais tu peut augmenter la taille permise par la JVM par la commande montrer par wax78, ou bien modifier les paramètres de ton projets : mettre -Xms1024m (1Go), j'ai testé chez moi, c'est le maximum avec NetBeans.
    Dans tous les cas, je pense que tu doit réduire la taille de tas matrice, elle va consommer beaucoup de memoire, mais il y a aussi une perte dans les performance, malgré que c'est un stockage contiguë.

  10. #10
    Membre Expert
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Par défaut
    On peut encore continuer longtemps à parler de matrices à taille improbable mais le plus simple serait que tu nous dises ce que tu cherches à faire. L'utilisation d'une matrice pour tout stocker n'est surement pas la bonne méthode. Si tu as une grande quantité de données, le mieux est de passer par une base de données.
    Bref, dis nous d'ou viennent ces données et à quoi elles servent pour voir si on ne peut pas se passer de la matrice

  11. #11
    Membre averti
    Homme Profil pro
    Inscrit en
    Mars 2009
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations forums :
    Inscription : Mars 2009
    Messages : 28
    Par défaut
    vous demandez sur quoi je travaille , ben je travaille sur la base darpa KDD qui contient 4million d'instance mais pour le moment je peux travailler sur KDD_train
    qui contient 11646 d'instance (mais le problème c'est que j'ai pas pu dépasser 3000instance, pour rappelle la taille de ma matrice c'est le nombre d'instance )
    et pour manipuler ces donnes j'utilise plusieurs matrice une pour stocker les donner lu a partir du fichier une pour calculer la distance euclidienne une autre pour le phéromone comme je travaille avec l'algorithme de colonie de fourmis et plein d'autre tableau donc je crois que une base de donné n'est pas nécessaire dans mon cas

  12. #12
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    442
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 442
    Par défaut
    Citation Envoyé par idirovitch Voir le message
    vous demandez sur quoi je travaille , ben je travaille sur la base darpa KDD qui contient 4million d'instance mais pour le moment je peux travailler sur KDD_train
    qui contient 11646 d'instance (mais le problème c'est que j'ai pas pu dépasser 3000instance, pour rappelle la taille de ma matrice c'est le nombre d'instance )
    et pour manipuler ces donnes j'utilise plusieurs matrice une pour stocker les donner lu a partir du fichier une pour calculer la distance euclidienne une autre pour le phéromone comme je travaille avec l'algorithme de colonie de fourmis et plein d'autre tableau donc je crois que une base de donné n'est pas nécessaire dans mon cas
    euh... Si, moi j'ai tendance à penser qu'une base de données est TRèS indiquée dans ton cas.

    Le Java est un langage de classes. Là, visiblement, l'essentiel de ton problème réside dans la gestion de tables (matrices). Le langage de tables par excellence, c'est SQL.

  13. #13
    Modérateur
    Avatar de wax78
    Homme Profil pro
    R&D - Palefrenier programmeur
    Inscrit en
    Août 2006
    Messages
    4 105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : R&D - Palefrenier programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 105
    Par défaut
    Ouais, et s'il doit mutliplier 2 matrices ou faire des opération matricielle, jsuis pas sur qu'il va s'en sortir avec du sql
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  14. #14
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    442
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 442
    Par défaut
    Pourquoi pas?
    http://www.devx.com/dbzone/Article/40223/0/page/4

    Par contre, c'est sûr que pour faire des multiplications de matrices de 4millions de côté...

  15. #15
    Membre averti
    Homme Profil pro
    Inscrit en
    Mars 2009
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations forums :
    Inscription : Mars 2009
    Messages : 28
    Par défaut
    je viens d'avoir une idée mais je sais que ça va me couter énormément du temps d’exécution (lire et ecrire ), l'idée c'est que je stocke la matrice plutôt les matrices de mon programme ailleurs soit dans un fichier (.txt/ .arff) ou bien dans une base de donnée (ça sera un peut compliqué ) .
    a votre avis qu'elle est la méthode la moindre gourmande en matière de temps (le temps c'est un facteur très important dans mon travaille que je dois prendre en considération), si vous avez d'autre idée a me les proposer ils seront les bienvenu.
    merciiiiiiiiiiii

  16. #16
    Membre très actif

    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    181
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2011
    Messages : 181
    Billets dans le blog
    1
    Par défaut
    Vue que les données que tu vas stocker sont a l’échelle du giga, je dirais les bases de données, mais comme la indiquée wax78, ça reste très couteux en terme de temps d’exécution, mais dans ton cas, c'est la meilleur solution, en fin, je pense

Discussions similaires

  1. taille maximale d'une base de données access
    Par boumbo73 dans le forum Access
    Réponses: 7
    Dernier message: 19/03/2008, 19h14
  2. Taille maximale d'une matrice
    Par le_lolo dans le forum MATLAB
    Réponses: 2
    Dernier message: 20/12/2007, 19h01
  3. Taille maximale d'une chaine de caractère
    Par Etanne dans le forum ASP
    Réponses: 2
    Dernier message: 08/10/2006, 11h44
  4. taille maximale d'une base mysql
    Par calla29 dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 26/07/2006, 14h59
  5. taille maximale d'une base de donnée paradox
    Par Anonymous dans le forum Paradox
    Réponses: 5
    Dernier message: 14/02/2004, 18h39

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