Fermer

janvier 21, 2022

Fondamentaux de la collecte des ordures


Parlons d'un concept informatique de base : la collecte des ordures. C'est la clé de la gestion de la mémoire pour de nombreuses langues. Comment votre langage préféré le gère-t-il ?

L'informatique est l'étude des ordinateurs, des processus algorithmiques, des machines informatiques, des systèmes et du calcul lui-même. Il comprend la théorie, la conception, le développement et bien plus encore sur les ordinateurs. C'est un domaine vaste et complexe, où il y a toujours quelque chose de nouveau à apprendre et à apprendre.

Nous allons découvrir un concept informatique très important dans cet article : le ramasse-miettes, un concept important lié à la façon dont les ordinateurs et les langages de programmation gèrent la mémoire. Nous allons expliquer comment fonctionne la récupération de place dans certains langages de programmation, ses avantages et pourquoi il est si important pour la programmation elle-même.

Comment fonctionnent les langages de programmation

Les ordinateurs ne comprennent qu'un seul langage appelé langage machine. Le langage machine est un ensemble d'instructions qui sont transmises à l'ordinateur et exprimées en binaire.

Imaginez une programmation utilisant uniquement des 1 et des 0. Plutôt ennuyeux, n'est-ce pas ?

Des langages de niveau supérieur ont été créés pour faciliter la programmation des développeurs. Ils résument la complexité et rendent la programmation plus simple et compréhensible.

Le premier langage de programmation de niveau supérieur important était Fortran, créé en 1957 par IBM pour les applications scientifiques et d'ingénierie.

Un langage de programmation est un langage formel que les ordinateurs comprennent. . Nous transmettons un ensemble d'instructions à l'aide d'un langage de programmation et nous obtiendrons une sortie.

Gestion de la mémoire

La gestion de la mémoire joue un rôle important dans le fonctionnement des programmes informatiques. La gestion de la mémoire assure le suivi de chaque emplacement de mémoire et fournit des moyens d'allocation et de suppression de données.

La gestion de la mémoire est le processus par lequel les ordinateurs contrôlent et accèdent à la mémoire.

La gestion de la mémoire est le processus de contrôle et de coordination de la manière dont un l'application logicielle accède à la mémoire de l'ordinateur. – Deepu K Sasidharan

Lorsqu'un logiciel est exécuté sur votre ordinateur, il utilise deux parties importantes de l'emplacement de la mémoire : Stack et Heap.

]Stack est un espace mémoire temporaire. Les données sont ajoutées ou supprimées à l'aide de la méthode dernier entré, premier sorti (LIFO).

La pile n'est pas un bon emplacement de mémoire lorsque vous devez stocker des données volumineuses. Il n'est pas possible d'en supprimer un objet spécifique. Pour récupérer une valeur de données spécifique dans une pile, l'ordinateur doit d'abord parcourir tous les objets du dessus. C'est là que réside la mémoire allouée dynamiquement et elle peut être allouée ou désallouée sans aucun ordre.

 La pile est représentée par un ensemble vertical de cases. Le tas est représenté comme un nuage d'objets.

La gestion de la mémoire est un sujet très important pour les développeurs. Savoir exactement comment l'ordinateur et les langages de programmation gèrent la mémoire est une très bonne compétence. Il aide les développeurs à écrire un code meilleur, plus performant et résilient.

Quelle que soit la technique de gestion de la mémoire, il est important d'apprendre comment le code gère la mémoire. Selon ce que nous voulons construire, nos programmes peuvent parfois être très gourmands en mémoire. Le collecteur parvient à récupérer du code poubelle (données, objets, fonctions, variables) ou de la mémoire occupée par des objets qui ne sont plus utilisés.

Le ramasse-miettes joue un rôle important dans certains langages modernes. Cependant, il est implémenté différemment dans différentes langues. Les langages de niveau supérieur sont plus susceptibles d'avoir la récupération de place comme fonctionnalité standard.

La récupération de place libère les développeurs de la gestion manuelle de la mémoire. Par exemple, lorsque vous travaillez avec des langages de bas niveau tels que le langage C, la plupart du temps, vous allouez et désallouez manuellement la mémoire.

Langage C et Garbage Collection

Le langage C fournit plusieurs fonctions pour gérer l'allocation et la gestion de la mémoire. Les plus utilisées sont :

  • malloc — Cette fonction alloue de la mémoire et laisse la mémoire non initialisée.
  • free — Cette fonction libère un bloc de mémoire spécifié par adresse.
  • calloc— Cette fonction alloue de la mémoire et initialise tous les bits à zéro.
  • dealloc — Cette fonction réalloue de la mémoire en l'étendant jusqu'à une nouvelle taille.

Travailler avec C peut parfois être très pénible. Vous devez vous soucier de la gestion de la mémoire, faire une copie sécurisée, désallouer au bon moment et correctement, etc.

Il existe une bibliothèque pour le ramasse-miettes en C et C++ appelée Boehm GC. Il s'agit d'un ramasse-miettes conservateur pour remplacer le for C malloc ou C++ new.

Langage Java et Garbage Collection

Java est un autre langage qui utilise le ramasse-miettes. Elle est effectuée automatiquement par la JVM (Java Virtual Machine), une machine virtuelle qui permet à un ordinateur d'exécuter des programmes Java.

Contrairement au C, vous n'avez pas besoin de gérer la gestion de la mémoire à l'aide de fonctions. En Java, il existe quatre types de récupération de place :

  • Serial Garbage Collector — Tous les événements du collecteur sont exécutés dans un environnement à un seul thread.
  • Parallel Garbage Collector — Utilise plusieurs threads pour accélérer jusqu'à la collecte des ordures. Il s'agit du collecteur par défaut utilisé par la JVM.
  • Concurrent Mark Sweep (CMS) Garbage Collector — Utilise plusieurs threads qui analysent la mémoire de tas.
  • Garbage First (G1) Garbage Collector — Utilisé lorsque il y a une grande mémoire de données (plus de 4 Go) (espace de tas).

Le choix du bon ramasse-miettes pour votre application Java dépend vraiment de nombreux facteurs : la façon dont votre application gère la mémoire, la durée de vie de vos objets, la façon dont votre la machine fonctionne, etc.

Langages modernes et récupération de place

JavaScript fonctionne avec la récupération de place. Lorsque vous créez quelque chose en JavaScript, par exemple une fonction, la valeur est allouée. Lorsque cette fonction ou une autre création n'est plus utilisée, elle est automatiquement désallouée de la mémoire.

Vous avez peut-être déjà entendu parler de fuites de mémoire. Les fuites de mémoire se produisent généralement lorsque la mémoire est mal allouée ou lorsque les données sont allouées en mémoire mais ne sont pas accessibles par le code en cours d'exécution.

Rustpour exemple, n'a pas de ramasse-miettes. Au moment où le code n'est plus utilisé et deviendrait un ordure, il est immédiatement libéré. Vous n'avez pas besoin de libérer manuellement de la mémoire – le langage le fait automatiquement pour vous. Lorsque vous avez terminé avec du code, la mémoire occupée par ce code sera automatiquement nettoyée.

La récupération de place peut être bonne ou mauvaise dans différentes situations. Cela dépendra d'un tas de variables – quel langage de programmation vous utilisez, comment vous structurez votre application, pourquoi vous l'utilisez, etc.




Source link