Öppna huvudmenyn

Heap (från engelskans substantiv för trave eller hög) är ett minnesutrymme i RAM som en mikroprocessor kan läsa och skriva till. Detta minneutrymme används av mjukvara som kan hämta och lämna tillbaka minnesareor via anrop till exempelvis ett operativsystem som håller reda på vilka delar som är lediga. I ett datorsystem finns det många heapar, oftast en heap per process och dessutom en eller flera systemheapar.

FragmenteringRedigera

Om anropen som hämtar minne inte är direkt spegelvända till anropen som lämnar tillbaka minne kan fragmentering uppstå. Med detta menas att minnesutrymmet inte längre är sammanhängande. Detta får som följd att ett anrop som vill hämta ett block minne som är större än det största sammanhängande blocket misslyckas trots att det finns gott om minne kvar om man summerar småblocken. Detta hanteras på applikationsnivå till skillnad från diskdefragmentering där operativsystemet tar hand om att länka ihop småblocken.

SkräpsamlingRedigera

I vissa operativsystem och i vissa programspråk har man uppmärksammat problemet med fragmentering och minnesläckor. Lösningen kan vara att låta alla minnesaccesser gå via en dubbel pekare (s.k. handle). På så sätt kan operativsystemet kopiera ihop småblocken och peka om den andra pekaren utan att programmet märker det. Detta tar givetvis extra tid men har den fördelen att man inte behöver avsluta programmet på grund av fragmentering. Programspråk som Java håller kontroll på alla pekare i programmen och lämnar automatiskt tillbaka minnesblock som ingen aktiv process pekar på och undviker på så sätt en del minnesläckor. Samlingsnamnet på dessa tekniker är skräpsamling eller "garbage collection".

MinnesläckorRedigera

Huvudartikel: Minnesläckage

Om anropen som hämtar minne inte matchas av anrop som lämnar tillbaka minnet när det inte längre behövs uppstår minnesläckor. Efter en given tid tar givetvis minnet på heapen slut. Det kan ta delar av en sekund eller flera år. Minnesläcka är den oftast förekommande orsaken till att man måste starta om en dator som "blivit trög" men som i övrigt synes fungera. Efter omstart är heaparna rena och fina igen eftersom de ligger i arbetsminnet.

KonsekvenserRedigera

Om heapen tar slut på grund av fragmentering eller minnesläckor och applikationen inte kan hantera det dör programmet med ett "out of memory"-fel. Om det händer på systemnivå kan vitala delar av datorsystemet slås ut och i vissa fall hela datorsystemet.

Se ävenRedigera