Sobes.tech
Junior — Middle

Expliquez les différences entre la gestion automatique de la mémoire via ARC et le ramasse-miettes

sobes.tech IA

Réponse de l'IA

La gestion automatique de la mémoire via ARC (Automatic Reference Counting) et le ramasse-miettes (Garbage Collector) sont deux approches différentes pour gérer le cycle de vie des objets.

  • ARC est un mécanisme du compilateur qui insère dans le code des appels pour augmenter et diminuer le compteur de références d’un objet. Lorsque le compteur atteint zéro, l’objet est immédiatement libéré. Cela se produit en temps d’exécution, mais sans processus de collecte de déchets séparé.

  • Le ramasse-miettes est un processus séparé qui scanne périodiquement la mémoire, trouve les objets inutilisés et les libère. Il peut suspendre l’exécution du programme pendant le nettoyage.

Principales différences :

  • ARC libère la mémoire immédiatement après que l’objet n’est plus utilisé, sans pauses.
  • Le ramasse-miettes peut provoquer des pauses, car il fonctionne de manière asynchrone.
  • ARC nécessite une gestion correcte des références cycliques, sinon il y a risque de fuite de mémoire.
  • Le ramasse-miettes gère généralement automatiquement les cycles.

Exemple en Swift avec ARC :

class Person {
    var name: String
    init(name: String) { self.name = name }
}
var p1: Person? = Person(name: "Alice")
p1 = nil // L’objet Person sera libéré immédiatement s’il n’y a pas d’autres références