Partage
  • Partager sur Facebook
  • Partager sur Twitter

Java - Enregistrement des objets dans la mémoire

    25 novembre 2021 à 11:54:26

    Bonjour,

    Je me tourne vers vous car je n'ai pas réussi à trouver de réponse à ma question sur internet. 

    J'ai envie de comprendre l'envers du décor sur le stockage des objets java dans la mémoire de l'ordinateur.

    Par exemple pour les tableaux, si j'ai bien compris il y a une case de la mémoire dans laquelle est enregistrée la référence du tableau qui permet d'accéder à l'espace (constitué de cases mémoire consécutives) où sont enregistrés les différents éléments de notre tableau. 

    Je me demandais comment cela se passait pour l'enregistrement d'un objet en mémoire. En effet, je crois qu'il y a aussi cette notion d'une case contenant une référence mais je n'en suis pas sûr. Mais ensuite comment cela se passe-t-il ? J'ai par exemple imaginé la possibilité que la première référence renvoie vers un tableau qui contient les références des différents attributs et méthodes de notre objet. 

    J'espère que j'ai réussir à faire comprendre mon interrogation.

    Je suis preneur de vos sources si vous en avez. 

    Un grand merci d'avance pour toute l'aide que vous m'apporterez.

    Cordialement,

    Louis

    • Partager sur Facebook
    • Partager sur Twitter
      25 novembre 2021 à 12:24:03

      En fait, il y a deux types de langages de programmation.

      1. Ceux (C, C++, Pascal, Fortran,Cobol, ...Rust) pour qui une variable est un nom pour un emplacement mémoire contenant les données (informations codées en binaire, etc, je vous fait pas le sketch).

      Dans ces langages, une structure c'est un emplacement qui contient, mis bout à bout (à des questions d'alignement près), les champs codés. Pareil pour un tableau. Un tableau de 10 structures de 100 octets chacun occupe un bout de mémoire de 1000 octets

      2. Les autres (Java, C#, php, python, javascript, etc), une variable est une nom pour une référence à une donnée codée dans un emplacement etc.. La donnée n'est pas "contenue dans" la variable, la variable y fait référence, c'est tout.

      Ce qui fait qu'une affectation a = b a un sens différent :

      - dans le premier cas, effectuer une copie (duplication) dans a de la donnée contenue dans b

      - dans le second, a fait référence à la même donnée que b.

      Concrètement, si en C j'ai deux structures d1 et d2 de type Date, et que je fais d1 = d2, j'ai deux informations indépendantes. Deux copies de la même information.

      Si je fais la même chose en Java, si ensuite je change l'année dans d1, ça va la changer dans d2 aussi. Parce que d1 et d2 se réfèrent au même objet.

      ---

      La vision en terme de référence, ça marche aussi pour les types natifs (entiers, flottants etc) si vous considérez que dans int  n = 3;  n contient une référence à la constante 3.  Si si , ça marche, quand fait n = n+1,  n contient ensuite la référence au résultat de 3+1 (la valeur exacte est laissée en exercice). On n'a pas changé la valeur de la constante 3, on fait référence à une autre.

      J'explique comme ça parce qu'en général, quand on pose ce type de question, c'est qu'on a déjà programmé un peu dans un autre langage, et qu'on a des conflits dans la tête entre les deux manières de faire les choses.

      --

      Pour en revenir aux objets en java, ils sont codés par (entre autres) un truc qui contient leurs attributs (ce sont des références), et ils sont manipulés, dans un programme, grâce à une référence.

      Et les tableaux sont aussi des objets, chaque case du tableau est une référence vers le contenu.

      -
      Edité par michelbillaud 25 novembre 2021 à 12:28:10

      • Partager sur Facebook
      • Partager sur Twitter
        25 novembre 2021 à 17:06:23

        D'accord c'est noté. Merci beaucoup pour votre réponse très complète !
        • Partager sur Facebook
        • Partager sur Twitter

        Java - Enregistrement des objets dans la mémoire

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown