Préface
GC (Garbage Collection) est un obstacle inévitable dans le processus d'apprentissage de JVM. Ensuite, passons. étudier systématiquement la GC.
Avant de faire quelque chose, nous devons savoir pourquoi nous le faisons. Cela ne fait pas seulement référence à GC, mais s'applique également à notre étude et à notre vie quotidienne. ce n'est que si vous savez pourquoi que vous pourrez combattre sans danger.
(Vidéo recommandée : tutoriel vidéo Java)
Comprenons d'abord pourquoi il existe un GC et quel rôle joue le GC dans la JVM. Quel effet a-t-il eu ?
Pourquoi y a-t-il un GC ?
Les étudiants qui ont utilisé C++ savent peut-être que la mémoire occupée par un objet est occupée jusqu'à la fin du programme et ne peut être allouée qu'après est explicitement diffusé sur d'autres objets. Si nous ne nettoyons pas manuellement ces objets inutiles, la mémoire sera bientôt remplie. Dans la JVM, le GC joue le rôle d'un récupérateur. Il peut nous aider à déterminer quels objets sont inutiles et comment procéder. les stratégies qui déterminent la génération et l'allocation de mémoire**.
Certains étudiants peuvent se demander, puisque notre JVM fera le travail de GC pour nous, pourquoi devons-nous apprendre GC ? N'est-il pas préférable de tout laisser à la JVM ? Bien sûr, dans notre vie quotidienne, nous ne nous soucions généralement pas de certains détails du GC, mais lorsque nous rencontrons des fuites de mémoire, des débordements de mémoire et des goulots d'étranglement de concurrence élevés, nous devons opérer sur GC et effectuer une analyse plus détaillée.
Fuite de mémoire : fait référence à la mémoire tas allouée dynamiquement dans le programme qui n'est pas libérée ou ne peut pas être libérée pour une raison quelconque, entraînant un gaspillage de mémoire système, un ralentissement du programme ou même des pannes du système. et d'autres conséquences graves.
Débordement de mémoire : il y a de la mémoire irrécupérable dans le système d'application ou trop de mémoire est utilisée, ce qui amène finalement le programme à utiliser plus de mémoire que la mémoire maximale qu'il peut fournir.
Alors maintenant la question est, nous devons faire la collecte des ordures, nous devons d'abord savoir où se trouvent les ordures
Où sont les ordures
Front Nous avons parlé de la zone de mémoire d'exécution de la JVM, et nous savons que les threads peuvent être divisés en zones exclusives de thread et zones partagées de thread. Le cycle de vie de la mémoire de la zone exclusive de thread (compteur de programme, machine virtuelle). pile, pile de méthodes locales) est cohérente avec le thread, et La taille de la mémoire allouée dans ces zones est liée à la taille de la classe. En d'autres termes, lorsque notre structure de classe est corrigée, cette partie de la mémoire ne changera pas, et. lorsque la méthode ou le thread se termine, la mémoire suivra naturellement. Elle est recyclée.
La mémoire du tas et la zone de méthode dans la zone partagée du thread sont différentes. La mémoire utilisée dans la mémoire du tas et la zone de méthode ne peuvent pas être déterminées. lors de la compilation, car différentes implémentations d'une interface, une méthode Le code exécuté par différentes branches de conditions de contrôle peut être complètement opposé. Nous savons seulement quels objets seront créés au moment de l'exécution. L'allocation et le recyclage de cette partie de la mémoire sont dynamiques, et notre. GC se concentre sur cette partie de la mémoire.
Par exemple : si la JVM est une voiture, la zone exclusive du thread est comme les pièces. La durée de vie de ces pièces est essentiellement connue à leur sortie d'usine, et la zone partagée du thread est comme l'essence, la consommation. La consommation d'essence est liée à l'itinéraire que nous empruntons, donc ce qui nous préoccupe est que cette partie va changer de manière dynamique, comme par exemple comment conduire de manière plus économe en carburant ~
Cet article provient du site Web chinois php, Tutoriel JavaColonne, bienvenue pour apprendre !
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!