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 :

Passage de C++ à Java : Shared_ptr et Weak_ptr


Sujet :

Java

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 15
    Points : 14
    Points
    14
    Par défaut Passage de C++ à Java : Shared_ptr et Weak_ptr
    Salut tout le monde,
    je suis actuellement en train de développer une passerelle qui génère des classes java à partir de données xml, et ... je débute en Java ^^
    Heuresement, une première passerelle avait été réalisée et générait des classes C++.
    J'aimerais beaucoup m'inspirer du travail existant mais je fais face à un problème :

    Quel équivalent trouver en Java des shared_ptr et weak_ptr de la bibliothèque boost en C++ ?

    J'ai bien envie de remplacer tout par des array list (grâce au garbage collector présent dans Java) mais j'aimerais retranscrire en Java la nuance qui existe entre le weak et le shared ptr.

    Est-ce que vous savez si c'est possible ? Ou alors est-ce que vous avez des idées ?

    Merki Beaukoup d'avance !

  2. #2
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2004
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 184
    Points : 1 745
    Points
    1 745
    Par défaut
    Pour faire simple, en java il n'y a pas de notion de pointeur, mais des références sur des objets.
    C'est la jvm qui se charge de savoir si un objet est encore référencé ou non, et qui détruit l'objet si il n'est plus référencé avec le garbage collector.

    En gros tu n'aura que des shared_ptr.

    Tu n'aura pas non plus de DELETE ou de FREE.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 15
    Points : 14
    Points
    14
    Par défaut
    Merci beaucoup pour cette réponse, il y avait quelques trucs qui n'étaient pas au clair dans ma tête sur le garbage collector.

    J'ai bien compris que le garbage collector remplaçait l'utilisation des smart pointer, mais comme je l'ai dit dans el premier message, il serait intéressant pour mon programme de conserver une structure similaire au précédent programme c++. C'est pour ça que je cherche à retranscrire la nuance en java d'un shared_ptr et d'un weak_ptr.

    J'en profite juste pour préciser à ceux qui ne savent pas qu'un shared_ptr :
    soient 1, 2, 3 trois pointeurs vers un objet A.

    Si 1, 2 et 3 sont libérés, A est supprimé de la mémoire.
    Et on ne peut pas supprimer A tant que 1, 2 ou 3 pointe vers A.

    et pour un weak_ptr :

    Si 1, 2, sont des shared_ptr et 3 un weak_ptr, qui pointent vers un objet A?
    Si 1 et 2 sont libérés, mais que 3 ne l'est pas, alors A est supprimé de la mémoire et 3 pointe sur rien.


    Je ne sais pas si en jouant sur les distinction variables de classes etd 'instance il y a moyen de retranscrire cette différence ?

  4. #4
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2004
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 184
    Points : 1 745
    Points
    1 745
    Par défaut
    Et bien visiblement je me trompais, ceci devrait t’intéresser :

    http://gfx.developpez.com/tutoriel/j...rence-memoire/


    WeakReference

    SoftReference

    PhantomReference

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 15
    Points : 14
    Points
    14
    Par défaut
    Super pour le weak reference, ca remplace exactement le weak_ptr du c++.
    J'ai découvert au passage que les fuites mémoires en JAVA c'était possible, même si j'ai pas bien compris comment on fait.

    Par contre le soft reference me semble peu adapté pour restranscrire ce que fait le shared_ptr.
    Je me contenterai de référence toutes bêtes.
    Au moins j'ai pu laisser quand même visible la nuance que je voulais faire apparaître.

    Merci !!!

  6. #6
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 557
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 557
    Points : 21 616
    Points
    21 616
    Par défaut
    Citation Envoyé par malaboss Voir le message
    J'ai découvert au passage que les fuites mémoires en JAVA c'était possible, même si j'ai pas bien compris comment on fait.
    C'est pas vraiment la même chose que ce qu'on appelle "fuite mémoire" d'habitude.
    D'habitude on appelle "fuite mémoire" le fait de réserver un bout de mémoire, et de perdre l'information permettant de la libérer (perdre le pointeur avant de le libérer.)

    En Java c'est impossible, un objet "perdu" sera libéré par le garbage collector en temps et en heure.
    Par contre, un objet gardé quelque part, alors qu'il ne sert plus à rien, sans raison, va empêcher le garbage collector de le libérer, et donc consommer de la mémoire inutilement.
    C'est l'erreur inverse, mais c'est le même effet.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Custom Tags 2.0] Tag imbriqué, passage de valeur java
    Par ohyes dans le forum Taglibs
    Réponses: 5
    Dernier message: 20/01/2009, 13h09
  2. passage d'arguments java
    Par k-eisti dans le forum Graphisme
    Réponses: 1
    Dernier message: 07/09/2007, 15h08
  3. [Struts][Javascript] Passage d'objet JAVA ou Onclick
    Par zybay dans le forum Struts 1
    Réponses: 8
    Dernier message: 22/05/2007, 15h24
  4. Passage de C++ à Java (mot clef extern)
    Par grodwar dans le forum Langage
    Réponses: 5
    Dernier message: 05/05/2007, 13h06

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