Garbage Collection in Go Slices: Eine detaillierte Analyse
In Go ist ein Slice ein dynamisches Array, das auf ein zugrunde liegendes Array verweist. Bei der Arbeit mit Scheiben ist es entscheidend, das Verhalten des Müllsammlung zu verstehen, um potenzielle Speicherlecks zu vermeiden.
Betrachten Sie die folgende Implementierung einer Warteschlange mit einer Sicht:
func PopFront(q *[]string) string { r := (*q)[0] *q = (*q)[1:len(*q)] return r } func PushBack(q *[]string, a string) { *q = append(*q, a) }
In diesem Fall wird das Slice, wenn ein Element von vorne gekommen ist, aufgehoben, um das geknackte Element auszuschließen. Während das Scheiben selbst Müll erfasst wird, wenn er nicht erreichbar ist, ist das zugrunde liegende Array, das die gepackten Elemente enthält, nicht sofort befreit.
Go's Müllsammler dient zum freien Speicher, wenn es keine aktiven Verweise auf ein Objekt gibt. Im Fall einer Scheibe, wenn mindestens ein Schicht, das auf das gleiche zugrunde liegende Array verweist, immer noch vorhanden ist oder wenn das Array von einer anderen Variablen gehalten wird, wird das zugrunde liegende Array nicht gesammelt. Aufbewahrung.
vermeiden Sie mehrmals ein Array, um redundante Referenzen auf das zugrunde liegende Array zu erstellen.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3