Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
952 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  Allocation mémoire

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Allocation mémoire

n°1328661
zedar
Posté le 20-03-2006 à 10:30:31  profilanswer
 

Bonjour,
 
J'ai un problème de libération de mémoire en ce moment sur une appli Java/Struts/Weblogic et je me pose des questions sur le fonctionnement de l'allocation mémoire et de sa libération.
 
Par exemple, que se passe-t-il dans le cas d'une déclaration de tableau de String[] dans une boucle de x occurences ?
A chaque occurence, l'ancienne variable est-elle bien supprimée pour laisser de la place à la nouvelle ? (en gros, le GC fait-il bien son boulot?) Ou y a-t-il un gain réel à sortir l'allocation de la boucle, et réutiliser la même variable à l'intérieur ?
 
Merci d'avance

mood
Publicité
Posté le 20-03-2006 à 10:30:31  profilanswer
 

n°1328710
zedar
Posté le 20-03-2006 à 11:48:33  profilanswer
 

Up
 
personne pour m'aider svp ? mes questions sont pas claires peut être ?

n°1328733
Smanux
Posté le 20-03-2006 à 12:50:31  profilanswer
 

Que tu écrive
 

Code :
  1. String[] strings;
  2. for (...)
  3. {
  4.     strings = new String[123];
  5. }


 
ou
 

Code :
  1. for (...)
  2. {
  3.     String[] strings = new String[123];
  4. }


 
ne change rien, le tableau est toujours créé dans le boucle. Si tu veux limiter la création d'objets, tu peux sortir l'instanciation du tableau en dehors de la boucle et le reinitialiser en début de chaque itération avec Arrays.fill(strings, null) si nécessaire.


---------------
Commons Configuration - http://jakarta.apache.org/commons/configuration
n°1328741
zedar
Posté le 20-03-2006 à 12:58:50  profilanswer
 

Ok merci c'est bien ce que je pensais.
L'instanciation en dehors de la boucle a un réel intérêt ? Il me semble qu'elle n'en a que si le GC ne fait pas son boulot, il devrait normalement libérer tout comme il faut non ?
 
Par contre au niveau performances, ça améliore peut être...

n°1328796
Smanux
Posté le 20-03-2006 à 14:03:18  profilanswer
 

L'instanciation c'est quand tu appelles new. Le fait d'écrire "String strings" ne crée pas d'objet, mais une référence vers un objet. Déclarer la variable en dehors de la boucle n'apporte pas de gain significatif, dans ce cas la portée de la référence étant plus large le dernier objet créé dans ta boucle ne sera pas déréférencés et sera donc potentiellement collecté plus tard par le GC.


---------------
Commons Configuration - http://jakarta.apache.org/commons/configuration
n°1328803
zedar
Posté le 20-03-2006 à 14:13:09  profilanswer
 

Oui oui je parlais bien d'instanciation, dans le sens de faire le new à l'extérieur de la boucle, puis vider ma variable à l'intérieur :)
 
Effectivement j'avais pas pensé à la portée de la variable... ça ne devrait pas poser de problème dans mon cas, mes méthodes étant assez courtes en général, mais je vais garder ce point à l'esprit quand même.
 
Merci :jap:


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  Allocation mémoire

 

Sujets relatifs
allocation de mémoire alignéeprobleme allocation memoire
[Class] Constructeur et allocation de mémoire.[java] Question de gros noob sur l'allocation mémoire.
[debutant] Probleme d'allocation memoire pour de grands tableauxMmap probleme d allocation memoire d un tableau double entrée
(D6) Serveur COM (DLL) et allocation de mémoire[C++] Probleme d'allocation memoire avec new
Pb d'"allocation mémoire avec STL string[C] Listes chainées et allocation mémoire
Plus de sujets relatifs à : Allocation mémoire


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR