Encore plus d'infos sur la gestion de la mémoire en java.
La gestion de la mémoire en Java repose sur deux principes : le tas et la pile.
Tas (heap):
Le tas Java est le référentiel principal pour le stockage des objets et se trouve dans la mémoire principale (RAM) de l'ordinateur. Le tas se compose de blocs de mémoire pour des morceaux de différentes tailles. La mémoire de chaque objet est allouée à partir du tas lors de la création de l'objet. Lorsque l'objet n'est plus référencé, il est ramassé et la mémoire est récupérée pour d'autres utilisations.
Pile (stack):
La pile Java est une section de la mémoire principale (RAM) de l'ordinateur utilisée pour stocker des informations sur l'exécution du programme. Il est utilisé pour garder une trace de l'état du programme, comme la façon dont les différentes méthodes sont saisies, comment elles sont appelées et à quelles variables elles accèdent. Lorsqu'une méthode est appelée, un cadre est ajouté en haut de la pile. Le cadre contient les paramètres de la méthode et les variables locales. Lorsque la méthode se termine, son cadre est retiré de la pile.
Le ramasse-miettes (Garbage Collector) Java est un système de gestion automatique de la mémoire pour les applications Java. Il est chargé de récupérer la mémoire des objets qui ne sont plus utilisés par l'application.
Le Garbage Collector Java est un thread qui tourne en arrière plan et qui est chargé de libérer la mémoire occupée par les objets inutilisés. Il effectue une récupération de place en parcourant la structure de données du tas, qui stocke les références à tous les objets actifs de l'application. Il commence à l'ensemble racine, qui sont les références aux objets extérieurs au tas, tels que les paramètres de méthode et les variables locales. À partir de là, il collecte de manière récursive tous les objets accessibles dans l'application et les marque comme actifs. Il visite ensuite tous les objets non référencés et les marque comme morts. Enfin, ces objets morts sont retirés du tas pour récupérer leur mémoire. La structure de données de la pile est utilisée pour stocker les appels de fonction et l'état d'achèvement. Il s'agit d'une structure LIFO (dernier entré, premier sorti) et l'exécution du code commence au sommet de la pile. Lorsque l'exécution du code est terminée, les valeurs et les références sont extraites de la pile, offrant ainsi un moyen de désallouer la mémoire utilisée par la fonction.
Le GC se découpe en deux sous processus connus sous les noms de marquage et balayage. Ils permettent d'identifier les objets qui ne sont pas utilisés. Il commence par marquer chaque objet comme "vivant" ou "mort", puis examine chaque objet marqué comme vivant, puis récupère tous les objets marqués comme morts en les balayant.