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 :

Comment augmenter le heap Java?


Sujet :

Java

  1. #1
    Nouveau membre du Club
    Inscrit en
    Juillet 2010
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 55
    Points : 35
    Points
    35
    Par défaut Comment augmenter le heap Java?
    Bonjour,
    comme le titre indique j'aimerai bien savoir comment augmenter le heap java parce que j'ai bcp de matrices dans mon logiciel et eclipse, il m'affiche un message d'erreur qui concerne le heap.
    svp pouvez vous m'indiquer (par les étapes) comment augmenter le heap?
    p.s: la machine avec 2G de ram.
    merci bcp
    cordialement

  2. #2
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Bonjour,

    Dans éclipse.ini, tu as une ligne
    -Xmx256m
    tu peux remplacer la valeur 256.
    Sinon, tu peux aussi montrer ton code pour voir si des optimisations sont envisageables.

    A+.

  3. #3
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    eclipse.ini ne concerne que la JVM faisant tourner eclipse, pas les jvms lancée pour lancer des applications développées dans eclipse. Pour ces dernier: run configuration -> arguments -> vm arguments -> -Xmx512m par exemple

  4. #4
    Nouveau membre du Club
    Inscrit en
    Juillet 2010
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 55
    Points : 35
    Points
    35
    Par défaut
    Bonjour,
    merci pour votre réponse, mais j'ai toujours le même problème malgré j'ai augmenté le heap jusqu'a 1024m.
    j'ai déclaré une matrice statique
    double [][] mat= new double[36000][36000];
    et lors de l’exécution, bien entendu lors de remplissage de cette dernière. java il m'affiche un message qui concerne le heap space et une ligne d'erreur au niveau de la déclaration de cette matrice.
    je ne sais pas est ce que la structure statique ne supporte pas la taille jusqu’à 36000??? si oui alors est ce que le ArrayList ou bien Vector me permet d'aller jusqu'à 36000? parce que vraiment il faut passer par 36000 case dans la matrice... je serai ravis de tous vos suggestions.
    merci bcp de me répondre.

  5. #5
    Membre chevronné
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Points : 1 984
    Points
    1 984
    Par défaut
    La taille d'un double est de 8 octets. Tu veux en faire 36 000 * 36 000 * 8 = 10 368 000 000 octets. Soit un peu moins de 10 Go. Bref, tu ne peux pas faire ca. Quand à utiliser Vector/ArrayList, ils utilisent un tableau interne donc au final, ca reviendra au meme.

    Le mieux, c'est d'expliquer pourquoi tu as besoin d'un tableau aussi grand, tu peux surement t'en passer

    EDIT : j'ai oublié de multiplier par 8

  6. #6
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059

  7. #7
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2008
    Messages
    1 190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 190
    Points : 2 657
    Points
    2 657
    Par défaut
    Citation Envoyé par rawasi Voir le message
    Bonjour,

    double [][] mat= new double[36000][36000];
    Tu fais une carte de l'espace?

  8. #8
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 710
    Points : 4 794
    Points
    4 794
    Par défaut
    36 000 * 36 000 * 8 = 10 368 000 000 octets. Soit un peu moins de 10 Go. Bref, tu ne peux pas faire ca
    On se dirige droit sur une base de données
    ou au moins un fichier ...
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  9. #9
    Nouveau membre du Club
    Inscrit en
    Juillet 2010
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 55
    Points : 35
    Points
    35
    Par défaut
    Bonjour,
    ma matrice est symétrique et représente le relation entre les mots(36000 mots donc 36000 lignes et 36000 colonnes) si par exemple deux mots apparaissent dans la même phrase alors je vais accéder a ma matrice et dans la ligne qui représente le premier mot et la colonne qui représente le deuxième je met 1.
    j'ai essayer avec Integer au lieu double mais tj pb de heap. est ce qu'il y a un autre moyen ?
    merci
    cordialement.

  10. #10
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 710
    Points : 4 794
    Points
    4 794
    Par défaut
    Je suppose que tu vas faire un traitement statistique avec la matrice après ?

    C'est au résultat attendu qu'il faut d'abord s'intéresser pour savoir quel est le moyen à employer pour y parvenir.

    Donc quelles sont les données que tu veux obtenir de ta matrice ?
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  11. #11
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    oui bien sur, il y a plein de moyens, mais ça nécessite de se renseigner un peu sur l'algorithmique, les matrices, la taille de données, les formats de données, etc.

    Ici t'as 36.000 mot * 36.000 mot. Déjà ta matrice est symétrique, donc tu n'a pas besoin de stocker tout. Ensuite, si l'on considère que tu as 1000 combinaisons par phrase (et là je suis généreux) et que chaque phrase a des combinaisons entièrement différentes (là je suis très très généreux), pour remplir ta matrice, il faudrait au moins 1.296.000 phrases. La bible contient 31102 verset (donc +- 30.000 phrases pour simplifier). Il faudrait donc 41 "bibles" différentes pour remplir ta matrice.

    Je te conseille donc de retourner à tes plans / croquis pour mettre en place un système où tu ne stocke que ce qui t'es utile. Au final, si un bouquin occupe 1M en mémoire, le stockage des combinaisons devrait être fait de manière à obtenir quelque chose de similaire.

    L'exemple le plus naif serait de regrouper en paire de mot (X,Y), de stocker dans une liste triée par le premier des deux par ordre alphabétique et d'y mettre un compteur. Ton empreinte mémoire serait directement liée au nombre de combinaisons réelles. Il doit surement y avoir des algo plus complexe / performants à réaliser.

  12. #12
    Membre chevronné
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Points : 1 984
    Points
    1 984
    Par défaut
    Ca ressemble quand meme bien à un truc qui devrait etre fait avec une base de données. Ce qui eviterait aussi d'avoir à se taper à la main les recherches et compagnies...

  13. #13
    Nouveau membre du Club
    Inscrit en
    Juillet 2010
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 55
    Points : 35
    Points
    35
    Par défaut
    Bonjour,
    merci bcp..., oui j'ai besoin de ma matrice pour faire autres calcules par la suite.
    j'ai une question est ce que on peut augmenter le heap on prend l'espace a partir de disque dur??
    pour ce qui ont me proposé de passer par une base de données.. ma matrice sera donc une table dans MySql ? comment je peux créer une table de 36000 colonnes?? et est ce qu'il existe un moyen pour récupérer la valeur (i, j) de la table si oui svp comment ?? parce que je l'ai besoin pour autre calcules ...
    merci bcp
    bien cordialement.

  14. #14
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Citation Envoyé par rawasi Voir le message
    Bonjour,
    merci bcp..., oui j'ai besoin de ma matrice pour faire autres calcules par la suite.
    j'ai une question est ce que on peut augmenter le heap on prend l'espace a partir de disque dur??
    Oui, ça s'appelle la swap. Tu configure ton OS avec 20G de swap, tu démarrer une version java 64 bits avec une heap de 15G. Mais ce n'est pas une bonne idée, à moins que tu aie envie d'aller faire un jogging entre chaque opération sur la matrice.
    pour ce qui ont me proposé de passer par une base de données.. ma matrice sera donc une table dans MySql ? comment je peux créer une table de 36000 colonnes??
    L'idée c'est de revoir tes algorithme pour stocker tes données autrement.
    Ta table pourrait par exemple être de trois colonnes

    mot1, mot2, occurences

Discussions similaires

  1. Réponses: 3
    Dernier message: 12/08/2005, 08h58
  2. Réponses: 17
    Dernier message: 04/08/2005, 14h49
  3. Réponses: 2
    Dernier message: 28/07/2005, 03h59
  4. Comment definir un string java en c++
    Par chelguera dans le forum C++
    Réponses: 13
    Dernier message: 31/12/2004, 12h56
  5. comment connecter VC++ et (java ou VB)
    Par Tray dans le forum Langages de programmation
    Réponses: 3
    Dernier message: 18/11/2002, 13h51

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