Heap (mikroprocessor) – Wikipedia
Den här artikeln behöver källhänvisningar för att kunna verifieras. (2022-12) Åtgärda genom att lägga till pålitliga källor (gärna som fotnoter). Uppgifter utan källhänvisning kan ifrågasättas och tas bort utan att det behöver diskuteras på diskussionssidan. |
Heap (från engelskans substantiv för trave eller hög) är ett avgränsat minnesutrymme i RAM som återanvänds för data som lagras tillfälligt. Reservationen av minnet sker automatiskt eller genom programinstruktioner som uttryckligen bokar och avbokar minnesarea. Ett operativsystem håller reda på vilka delar som är lediga. I ett datorsystem finns många heapar, oftast en heap per process. Dessutom finns en eller flera systemheapar.
Fragmentering
[redigera | redigera wikitext]När ett minnesfragment som ligger mellan två andra bokade minnesfragment avbokas, är det lediga minnesutrymmet inte längre sammanhängande. Heapen får med tiden allt fler luckor av det slaget och med tiden blir detta ett problem som kallas fragmentering. Endast block som är mindre än det största sammanhängande blocket kan bokas trots att det kanske finns gott om minne kvar om man summerar småblocken. Problemet hanteras på applikationsnivå till skillnad från diskdefragmentering där operativsystemet tar hand om att länka ihop småblocken.
Skräpsamling
[redigera | redigera wikitext]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äckor
[redigera | redigera wikitext]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.
Konsekvenser
[redigera | redigera wikitext]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.