Hva er forskjellen mellom søppelinnsamling og søppelkomprimering?


Svar 1:

Spørsmålet blir besvart av: Mark-kompakt algoritme - Wikipedia

Søppelsamling: Marker utilgjengelige minneblokker (søppel) som gratis.

Komprimering: Flytting av tilgjengelige minneblokker nær hverandre, slik at det ikke er ledige minneblokker mellom dem. Det implementeres vanligvis i kombinasjon med søppelinnsamling, men det trenger ikke være det.

Hvorfor søppelinnsamling er viktig: Den lar en programmerer komme seg unna å styre minnet. Søppeloppsamleren vil frigjøre noe søppelminne, uten at du trenger å aktivt frigjøre minne som C-programmerere gjør. Dette løfter litt kognitiv belastning fra programmereren og gjør det lettere å skrive riktig kode (C ++ har en annen modell).

Hvorfor komprimering er viktig: Komprimering utføres vanligvis i kombinasjon med søppelinnsamling. Komprimering eliminerer fragmentering (Wikipedia). Fragmentering, som søppelminne, reduserer bruken av minnet.

Tenk for eksempel følgende minne:

Her er to gratis fragmenter på til sammen 900MB, men tildelingen av en minneblokk på 1 GB vil da mislykkes, siden det ikke er noen påfølgende blokkering på 900 MB. Komprimering vil flytte objekt 2 til venstre, noe som resulterer i: