Aller au contenu

Gestion des objets en mémoire

mémoire java

Ce schéma illustre la création d’une instance d’une classe Temps en Java. Il montre comment la mémoire est allouée pour une nouvelle instance et comment les attributs sont stockés.

Code Java correspondant :

public class Temps {
    private int heures;
    private int minutes;
    private int secondes;

    // Constructeur
    public Temps(int heures, int minutes, int secondes) {
        this.heures = heures;
        this.minutes = minutes;
        this.secondes = secondes;
    }

    public static void main(String[] args) {
        // Création d'une instance de Temps
        Temps t = new Temps(17, 57, 13); // adresse 4268
    }
}

Voici une explication détaillée et simplifiée de chaque partie du schéma :

Le rôle du constructeur

Le Constructeur :

Une instance est un type référence

Une instance est un type référence : Cela signifie que l’instance n’est pas stockée directement dans une variable, mais plutôt qu’une variable contient une référence (une adresse mémoire) vers l’instance.

Elle est donc instanciée sur le tas : En Java, les objets sont stockés dans une zone mémoire appelée le tas (heap). C’est différent des types primitifs (comme int, double) qui sont stockés directement dans la pile (stack).

La pile (stack) et le tas (heap)

La pile (stack)

La pile est une zone mémoire où sont stockées les variables locales et les appels de méthodes.

Dans le schéma :

Le tas (heap)

Le tas est une zone mémoire où sont stockés les objets (instances de classes).

Dans le schéma :

Adresses mémoire

Le schéma montre les adresses mémoire des attributs de l’instance de Temps

Exemple des valeurs des attributs :

heures : 17
minutes : 57
secondes : 13

Relation entre la pile et le tas

Conclusion

Le schéma vous aide à comprendre plusieurs concepts clés de la programmation orientée objet en Java

Différence entre types primitifs et types référence

Allocation mémoire

Quand on crée une nouvelle instance avec new, la mémoire est allouée sur le tas. La variable qui contient cette instance (sur la pile) ne contient qu’une référence vers cette mémoire.

Gestion de la mémoire

Le tas est géré par le garbage collector (GC) ou ramasse-miettes de Java, qui libère automatiquement la mémoire des objets qui ne sont plus référencés.

Explication du code :

Temps t = new Temps(17, 57, 13);

Résumé visuel

Voici un résumé visuel de ce qui se passe en mémoire :

La pile (stack) :
+---------------------+
| t | 0x4268          |  <-- Référence vers l'instance sur le tas
+---------------------+

Le tas (heap) :
+---------------------+
| Adresse: 0x4268     |  <-- Début de l'instance de Temps
| Classe: Temps       |
|     heures: 17      |
|     minutes: 57     |
|     secondes: 13    |
+---------------------+

Importance de comprendre ce processus

Même si le GC de Java gère les objets en mémoire, c’est bien de comprendre comment cela fonctionne.