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 :

Instanciation et mémoire


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Inscrit en
    Décembre 2007
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 10
    Par défaut Instanciation et mémoire
    Bonjour tous le monde,
    Je suis débutant en java, et je me permet de vous demander de l'aide.En fait quand on instancie une classe, dans ce cas la les attributs de classe ont une existence physique car java leur reserve de l'espace en mémoire, ma question est qd on instancie plusieurs fois est ce que à chaque fois on aloue de la mémoire et si c'est le cas ça posera pas de problème si on instancie un grand nombre de fois.
    Merci d'avance.

  2. #2
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    Citation Envoyé par benji35 Voir le message
    En fait quand on instancie une classe, dans ce cas la les attributs de classe ont une existence physique car java leur reserve de l'espace en mémoire,
    Oui...

    Citation Envoyé par benji35 Voir le message
    ma question est qd on instancie plusieurs fois est ce que à chaque fois on aloue de la mémoire et si c'est le cas ça posera pas de problème si on instancie un grand nombre de fois.
    Merci d'avance.
    Le probléme que tu pourras rencontrer c'est une saturation de la mémoire qui se traduira par des ralentissements, des lags, blocage etc ...

    Je ne sais pas si ca existe mais tu peux essayer d'attraper une exception signalant qu'il n'y a plus de mémoire disponible.

  3. #3
    Expert confirmé
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Par défaut
    Citation Envoyé par hegros Voir le message
    Je ne sais pas si ca existe mais tu peux essayer d'attraper une exception signalant qu'il n'y a plus de mémoire disponible.
    Oui ça existe et c'est une exception de type OutOfMemory
    http://java.developpez.com/faq/java/?page=exception

    Le truc c'est qu'en général un programme n'est pas vraiment fait pour gérer ce genre d'erreur ( de plus, il faudrait vérifier cette exception à chaque appel de méthode ) et normallement après une telle exception, qui dit que la procédure de gestion d'erreur ne va pas provoquer un nouveau débordement de mémoire ? Dans un langage comme le C++ ont peut être sur que ce n'est pas le cas mais dans un langage comme Java c'est plus complexe ( vu que les allocations de mémoire sont souvent transparentes .. ).

  4. #4
    Membre éprouvé
    Avatar de mavina
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2004
    Messages
    1 812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Chine

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 812
    Par défaut
    Citation Envoyé par smyley Voir le message
    Oui ça existe et c'est une exception de type OutOfMemory
    http://java.developpez.com/faq/java/?page=exception

    Le truc c'est qu'en général un programme n'est pas vraiment fait pour gérer ce genre d'erreur ( de plus, il faudrait vérifier cette exception à chaque appel de méthode ) et normallement après une telle exception, qui dit que la procédure de gestion d'erreur ne va pas provoquer un nouveau débordement de mémoire ? Dans un langage comme le C++ ont peut être sur que ce n'est pas le cas mais dans un langage comme Java c'est plus complexe ( vu que les allocations de mémoire sont souvent transparentes .. ).
    Surtout que ce n'est pas une erreur du programme mais de la machine virtuelle en elle même, qui n'a pas assez de mémoire pour gérer le programme que tu lui demande de gérer. En effet, c'est une VirtualMachineError, tu ne peux pas prévoire dans ton programme une situation exceptionnelle qui dépend de la machine virtuelle.

    F.

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    442
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 442
    Par défaut
    Si tu dois instancier vraiment excessivement, il faut voir quel est ton réel besoin, mais tu as aussi la possibilité de mettre en place une fabrique/pool d'objets et de faire du recyclage.

  6. #6
    Expert confirmé
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Par défaut
    Bonjour.
    Je ne sais pas si c'est bien ce que tu veux dire, mais "attribut de classe" dénote les champs static qui ne sont alloués qu'une seule fois pour une classe donnée, peut importe le nombre d'instances.
    Sinon, dans le cas général, oui, pour chaque instance, Java alloue de la mémoire pour stocker les attributs.
    Est ce que ça pose problème ? Très peu probable ... ça ne consomme pas autant que ça, surtout dans la majorité des projets qui sont pas si gros que ça. Pour d'autres où on atteint des milliers d'objets chargés, là ça peut causer des problèmes, mais pour le développement quotidien,

    Sinon, pour répondre à hegros, il est possible oui d'intercepter les erreurs de OutOfMemory, mais c'est très déconseillé de le faire, et ça ne sert pas à grand chose.

    Bonne chance.

  7. #7
    Membre habitué
    Inscrit en
    Décembre 2007
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 10
    Par défaut
    Citation Envoyé par djo.mos Voir le message
    Bonjour.
    Je ne sais pas si c'est bien ce que tu veux dire, mais "attribut de classe" dénote les champs static qui ne sont alloués qu'une seule fois pour une classe donnée, peut importe le nombre d'instances.
    Sinon, dans le cas général, oui, pour chaque instance, Java alloue de la mémoire pour stocker les attributs.
    Est ce que ça pose problème ? Très peu probable ... ça ne consomme pas autant que ça, surtout dans la majorité des projets qui sont pas si gros que ça. Pour d'autres où on atteint des milliers d'objets chargés, là ça peut causer des problèmes, mais pour le développement quotidien,

    Sinon, pour répondre à hegros, il est possible oui d'intercepter les erreurs de OutOfMemory, mais c'est très déconseillé de le faire, et ça ne sert pas à grand chose.

    Bonne chance.
    En fait je me suis trompé je voulais dire attributs d'instance et non pas de classe.En tous cas merci bcp pour vos réponses , trés sympat et en plus des réponses rapidement

  8. #8
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    Citation Envoyé par smyley
    ( de plus, il faudrait vérifier cette exception à chaque appel de méthode
    Je suis débutant en java mais est-ce qu'il n'est pas possible de la relayer par la méthode main et la traiter à ce niveau seulement ?


    Citation Envoyé par djo.mos Voir le message
    Sinon, pour répondre à hegros, il est possible oui d'intercepter les erreurs de OutOfMemory, mais c'est très déconseillé de le faire, et ça ne sert pas à grand chose.

    Bonne chance.

    Est-ce que tu as un lien qui détaille un peu plus pourquoi cela est déconseillé et pourquoi cela ne sert pas à grand chose ?


    Merci.

  9. #9
    Expert confirmé
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Par défaut
    Citation Envoyé par hegros
    Je suis débutant en java mais est-ce qu'il n'est pas possible de la relayer par la méthode main et la traiter à ce niveau seulement ?
    Oui, bien sûr tu peux le faire comme ça, mais de cette façon, une fois que tu as catché l'exception, tu as déjà perdu tout le contexte: tu n'es plus à l'endroit qui a causé l'erreur mais plutôt dans le bloc catch de la main de ton programme, alors à part afficher un message et quitter, y'a pas grande chose que tu pourras faire.

    De plus, le OutOfMemory hérite de VirtualMachineError qui hérite de Error, et d'une façon générale, il ne faut pas catcher les descendants de Error.

    Pour les liens, en voici un vite trouvé suite à un rapide googlage:
    http://www.onjava.com/pub/a/onjava/2...imization.html.

    Bonne chance.

Discussions similaires

  1. Instanciation et mémoire
    Par freud dans le forum Windows Forms
    Réponses: 21
    Dernier message: 05/11/2007, 14h37
  2. fichier mappé en mémoire
    Par WinBernardo dans le forum Delphi
    Réponses: 7
    Dernier message: 01/12/2006, 09h38
  3. Déterminer l'adresse d'une application en mémoire
    Par Gib dans le forum x86 32-bits / 64-bits
    Réponses: 9
    Dernier message: 11/06/2002, 14h27
  4. Vitesse de la mémoire vidéo
    Par Anonymous dans le forum x86 16-bits
    Réponses: 3
    Dernier message: 06/06/2002, 20h20
  5. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10

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