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

Langage Java Discussion :

[Stratégie]Allocation/Desallocation mémoire


Sujet :

Langage Java

  1. #1
    Futur Membre du Club
    Inscrit en
    Avril 2003
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 13
    Points : 8
    Points
    8
    Par défaut [Stratégie]Allocation/Desallocation mémoire
    Bonjour,

    j'ai besoin d'utilisr ces données volumineuses et de faire de gros traitements dessus. Un des problèmes, outre la charge CPU est la consommation mémoire.

    J'utilise des objets et des types primitifs. Que faut-il faire pour limiter la consommation mémoire ?

    Si j'ai besoin de modifier un tableau (comme agrandir sa taille), je suis obligé de faire un new TYPE[nouvelle_taille].
    Cependant j'ai l'impression que l'ancien contenu reste en mémoire ce qui conduit fatalement à une erreur out of memory.

    En C, je desallourais les données inutiles. Dans mon cas, que dois-je faire ?

    Par exemple avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    int [] tab1 = new int[1000000];
    int [] tab2 = new int[100000]
    //init des données
     
    //j'ai besoin de regrouper deux tableaux dans tab1
    int [] tmp = new int[tab1.length+tab2.length];
    System.arraycopy(tab1, 0, tmp, 0, tab1.length);
    System.arraycopy(tab2, 0, tmp, tab1.length, tab2.length);
     
    // maintenant qu'est-ce que je fais ?
     
    // 1 : solution de base
    tab1 = tmp;
     
    // 2 : solution nulle
    tab1 = null;
    tab2 = null;
    tab1 = tmp;
     
    // 3 : solution de boeuf
    tab1 = null;
    tab2 = null;
    System.runFinalisation();
    System.gc();
    //sleep et on recommence une fois.
    tab1 = tmp;
     
    // 4 : obiwan kénobi
     
    tab1 = obiwanKenobi;

  2. #2
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    111
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 111
    Points : 119
    Points
    119
    Par défaut
    En java, les objets sont automatiquement desalloué a la fin de la fonction.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    int [] Concat()
    {
      int [] tab1 = new int[1000000];
      int [] tab2 = new int[100000]
      //init des données
     
      //j'ai besoin de regrouper deux tableaux dans tab1
      int [] tmp = new int[tab1.length+tab2.length]; 
      System.arraycopy(tab1, 0, tmp, 0, tab1.length); 
      System.arraycopy(tab2, 0, tmp, tab1.length, tab2.length); 
     
      return tmp;
    }
    Un petit nuage blanc dans un ciel tout bleu, c'est le paradis. Un petit message blanc dans un ecran tout bleu, c'est l'enfer.

Discussions similaires

  1. Allocation/Desallocation de mémoire
    Par Myth_Titans dans le forum C++
    Réponses: 19
    Dernier message: 17/05/2006, 17h41
  2. Problème d'allocation de mémoire dans la pile
    Par prophet666 dans le forum x86 32-bits / 64-bits
    Réponses: 6
    Dernier message: 19/01/2006, 02h22
  3. [Debutant]Allocation de mémoire
    Par gwendal84 dans le forum C
    Réponses: 6
    Dernier message: 07/12/2005, 19h04
  4. Double allocation de mémoire
    Par hunter001 dans le forum C++
    Réponses: 16
    Dernier message: 25/08/2005, 13h53
  5. pb d'allocation de mémoire
    Par shura dans le forum C
    Réponses: 7
    Dernier message: 17/04/2005, 21h10

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