[JAVA] Collecte des ordures - Partie 1-

Objectif

Afin de réfléchir à la gestion des instances dont je n'étais pas au courant au début, supprimez d'abord les spécifications de base de Java telles que le garbage collection

Qu'est-ce qu'un ramasse-miettes?

Une fonction qui gère la capacité de mémoire allouée à la JVM lorsque le programme est exécuté et libère la zone de mémoire comme il convient pour éviter les fuites de mémoire.

Pourquoi dois-je libérer de la mémoire?

Dans la programmation, non limitée à Java, comme le montre la figure 1, diverses variables et instructions sont stockées en mémoire et traitées de manière appropriée par la CPU. Bien entendu, lorsqu'il est stocké, il consomme la capacité de stockage de la mémoire, il est donc nécessaire de supprimer les variables et instructions inutiles afin de ne pas dépasser la capacité allouée au programme. ** **

→ Si la capacité est dépassée ... (Pour Java) OutOfMemoryError apparaît et le programme est arrêté de force. 無題のプレゼンテーション.jpg

À ce moment, en langage C, etc., le côté programmeur devait explicitement libérer la zone de mémoire dans le code, mais dans les langages orientés objet tels que Java et les langages de programmation fonctionnelle tels que Haskell, cela est illustré sur la figure 2. Il a une fonction appelée garbage collection, dont nous parlerons cette fois, et il gère la mémoire presque automatiquement. 無題のプレゼンテーション (1).jpg

Le programmeur n'a-t-il pas à se soucier de quoi que ce soit s'il le fait automatiquement?

Cependant, étant donné que le programme est en cours d'exécution même lorsque le GC est en cours d'exécution, cela pose un problème si les éléments inutiles sont supprimés correctement. Par conséquent, une certaine norme de "inutile" est établie, et GC fonctionne en fonction de celle-ci. Dans le cas de Java, le jugement est rendu par les facteurs suivants.

** · Non référencé par aucun autre élément **

Par conséquent, des fuites de mémoire peuvent se produire selon la conception. En outre, les problèmes suivants peuvent survenir en fonction de la fréquence de fonctionnement du CPG.

** ・ Le traitement est retardé en raison de la fréquence des GC **

Étant donné que l'application est temporairement arrêtée pendant l'exécution du GC, des problèmes surviennent si le GC se produit fréquemment. De plus, le temps d'arrêt du GC peut simplement devenir plus long. De plus, bien que cela soit décrit la prochaine fois, il existe différents types de GC et, selon les spécifications, même si le GC fonctionne, la mémoire peut ne pas être libérée et une fuite de mémoire peut se produire.

Aperçu de la prochaine fois

Qu'est-ce que GC dans JavaVM?

Recommended Posts

Collecte des ordures - Partie 1-
Collecte des ordures G1 en 3 minutes
Java Performance Chapitre 5 Bases de la récupération de place
Collection Java9
J'ai essayé de résumer sur JVM / garbage collection