
Geheugenbeheer
Stack vs heap, escape analysis, garbage collector, geheugenprofiling, pprof, memory leaks
1Wat is het belangrijkste verschil tussen stack- en heap-allocatie in Go?
Wat is het belangrijkste verschil tussen stack- en heap-allocatie in Go?
Antwoord
De stack wordt automatisch beheerd en allocaties zijn extreem snel (eenvoudige verplaatsing van de stack pointer). Variabelen op de stack worden automatisch vrijgegeven wanneer de functie terugkeert. De heap heeft de garbage collector nodig om geheugen vrij te geven en allocaties zijn trager omdat ze de Go-runtime betrekken. Variabelen die voorbij de functie blijven bestaan of waarvan de grootte niet bekend is tijdens het compileren, gaan op de heap.
2Wat is escape analysis in Go?
Wat is escape analysis in Go?
Antwoord
Escape analysis is een statische analyse die door de Go-compiler wordt uitgevoerd om te bepalen of een variabele op de stack kan blijven of op de heap moet worden gealloceerd. Als de compiler detecteert dat een variabele buiten zijn aanmaakfunctie wordt gerefereerd (via een geretourneerde pointer, opslag in een globale variabele, enz.), 'ontsnapt' de variabele en wordt deze op de heap gealloceerd. Deze analyse optimaliseert geheugenallocaties automatisch.
3Hoe bekijk je de resultaten van escape analysis tijdens het compileren?
Hoe bekijk je de resultaten van escape analysis tijdens het compileren?
Antwoord
Met de vlag -gcflags=-m kun je de beslissingen van escape analysis bekijken. Het gebruik van -m=2 of -m=3 geeft meer details over waarom een variabele ontsnapt. Zo toont 'go build -gcflags=-m=2' meldingen als 'moved to heap: x' om aan te geven dat een variabele naar de heap is verplaatst. Dit hulpmiddel is essentieel voor het optimaliseren van geheugenallocaties in kritieke code.
In welk geval ontsnapt een lokale variabele naar de heap?
Wat is de belangrijkste rol van de garbage collector in Go?
+21 gespreksvragen
Andere Go-sollicitatieonderwerpen
Go-basis
Go-datastructuren
Go-interfaces
Foutafhandeling
Goroutines-basis
Channels
Go Modules
HTTP-server
HTTP-client
JSON-codering
Database/SQL
context-pakket
Testing
Concurrency-patronen
Synchronisatieprimitieven
Go-webframeworks
REST API-ontwerp
gRPC
Reflection
Prestatie-optimalisatie
Generics
Go Design Patterns
Microservices
Beveiliging en authenticatie
Docker & Containerization
Kubernetes Basics
Geavanceerd Go
CLI-ontwikkeling
Beheers Go voor je volgende gesprek
Krijg toegang tot alle vragen, flashcards, technische tests, code review-oefeningen en gespreksimulatoren.
Begin gratis