Maison > Article > développement back-end > Le langage Go doit-il gérer manuellement la mémoire ?
Le langage go ne nécessite pas de gestion manuelle de la mémoire ; le langage go possède une fonction de gestion de la mémoire intégrée (mécanisme GC), qui est un mécanisme de gestion automatique de la mémoire. Lorsque la mémoire demandée par le programme au système d'exploitation n'est plus nécessaire, le garbage collection la recycle activement et la réutilise pour que d'autres codes s'appliquent à la mémoire, ou la renvoie au système d'exploitation. Ce processus de recyclage automatique des ressources au niveau de la mémoire est. Il s'agit du garbage collection ; et le composant du programme responsable du garbage collection est le garbage collector.
L'environnement d'exploitation de ce tutoriel : système Windows 7, GO version 1.18, ordinateur Dell G3.
Le langage Go ne nécessite pas de gestion manuelle de la mémoire ; le langage Go a une fonction de gestion de la mémoire intégrée (mécanisme GC), et les développeurs n'ont pas besoin de se soucier de l'application et de la libération de la mémoire, ce qui apporte une grande commodité aux utilisateurs.
Qu'est-ce que la GC et quelle est son utilité ?
GC, nom complet Garbage Collection, est un mécanisme de gestion automatique de la mémoire.
Lorsque la mémoire demandée par le programme au système d'exploitation n'est plus nécessaire, le garbage collection la recycle activement et la réutilise pour que d'autres codes demandent de la mémoire, ou la renvoie au système d'exploitation. Il s'agit d'un processus de recyclage automatique de la mémoire. -level resources , qui est le garbage collection. Le composant du programme responsable du garbage collection est le garbage collector.
La collecte des déchets est en fait un parfait exemple de « la simplicité est compliquée ». D'une part, les programmeurs bénéficient du GC et n'ont pas besoin de s'inquiéter ou de demander et de libérer manuellement de la mémoire. Le GC libère automatiquement la mémoire restante lorsque le programme est en cours d'exécution. D'un autre côté, GC est presque invisible pour les programmeurs. Il n'apparaît que lorsque le programme nécessite une optimisation spéciale en fournissant une API contrôlable pour contrôler le timing et la surcharge d'exécution du GC.
Dans les calculs, l'espace mémoire contient deux zones importantes : la zone de pile (Stack) et la zone de tas (Heap) ; la zone de pile stocke généralement les paramètres, les valeurs de retour et les variables locales des appels de fonction, et ne produit pas fragmentation de la mémoire. La gestion du compilateur ne nécessite pas la gestion du développeur ; la zone de tas générera des fragments de mémoire. Dans le langage Go, les objets dans la zone de tas sont alloués par l'allocateur de mémoire et recyclés par le garbage collector. Le collecteur est divisé en deux composants semi-indépendants :
L'objet racine est également appelé collection racine dans la terminologie du garbage collection. C'est le premier objet que le garbage collector vérifie lors du marquage du processus, notamment :
Garbage collectionDans le langage Go, l'algorithme implémenté par le garbage collector est un collecteur de marques et de scans tricolores simultanés
Le garbage collector s'exécute en même temps que le programme Go , il doit donc être passé par un algorithme de
barrière d'écriturepour détecter les changements potentiels dans la mémoire. La seule condition pour initier une barrière en écriture est d'arrêter le programme pendant une courte période, c'est-à-dire "Stop the World"
Le but de la barrière en écriture est de permettre au collecteur de maintenir l'intégrité des données sur le tas pendant la collecte.
phase de fin d'effacementMettez le programme en pause, tous les processeurs entreront dans le point de sécurité à ce moment-là
Reprenez le programme d'exécution, le processus de marquage et le programme utilisateur d'assistance commenceront à marquer simultanément les objets dans la mémoire. La barrière d'écriture marquera en gris les pointeurs écrasés et les nouveaux pointeurs, et tous les objets nouvellement créés seront directement marqués. black
Démarrez l'analyse de l'objet racine, y compris toutes les piles Goroutine, les objets globaux et les structures de données d'exécution qui ne sont pas dans le tas. Pendant l'analyse de la pile Goroutine, le processeur actuel sera mis en pause
Traitez les objets dans le tas. tour à tour, marquez les objets en noir et marquez les objets vers lesquels ils pointent en gris
Utilisez un algorithme de terminaison distribué pour vérifier le travail restant et entrez dans la phase de terminaison de marquage après la fin de la phase de marquage
Marquer Phase de terminaison (STW)
_GCmarktermination
et fermez le programme utilisateur marqué auxiliaire _GCmarktermination
并关闭辅助标记的用户程序清理阶段
将状态切换至 _GCoff
_GCoff
pour démarrer la phase de nettoyage, initialiser l'état de nettoyage et désactiver la barrière en écritureObjets noirs - les objets actifs, y compris les objets qui n'ont aucune référence à des pointeurs externes et les objets de l'objet racine Objets accessibles
Marquez tous les objets pointé par l'objet noir comme gris, en s'assurant que l'objet et l'objet sont Aucun des objets référencés ne sera recyclé
Répétez les deux étapes ci-dessus jusqu'à ce qu'il n'y ait plus d'objets gris dans le graphique d'objet
🎜🎜🎜🎜🎜🎜 Pour plus de connaissances sur la programmation, veuillez visiter : 🎜Vidéo de programmation🎜 ! ! 🎜Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!