Gå til innhold

Hvorfor trengs det så mye minne?


XIFXEGLO

Anbefalte innlegg

Hei,

 

Jeg er middels teknisk oppegående, og det er en ting som jeg ikke helt klarer å forstå, og jeg finner heller ikke gode forklaringer på nett;

 

Hvorfor brukes det så forferdelig mye minne av de fleste, helt vanlige, programmer? Det er ofte i bruk flere dekader mer minne enn informasjonen som er tilgjengelig.

 

Akkurat nå så bruker;

 

Word: 353MB (7 åpne dokument - total filstrørrelse ~50MB)

Acrobat reader: 330MB, pluss 5 prosesser på ~70MB = 680MB (tre åpne dokument - total filstørrelse ~10MB)

Firefox: 290MB  -åpne nettsider er kun denne

Outlook: 260MB - ingen grafikk synlig

 

Hvorfor er det sånn?

 

En forklaring jeg finner på nett er at GUI, ikoner, tekst til menyer, etc, må også må lastes til minnet, men det er maksimalt noen få MB, så det mener jeg ikke forklarer noe som helst.

 

Så hva brukes alt minnet til?

 

Lenke til kommentar
Videoannonse
Annonse

Veldig generelt svar: Programmene er tilpasset for å kjøre på et moderne OS + hardware, ikke slik det var for 20 år siden elns.

 

Veldig konkret svar: Du må nok spørre utviklerene av hver programvarepakke.

 

Finnes det ett svar midt i mellom? Hvilke generelle tilpasnigner må man gjøre i moderne software som gjør at minnebruket går i taket?

Lenke til kommentar

 

Veldig generelt svar: Programmene er tilpasset for å kjøre på et moderne OS + hardware, ikke slik det var for 20 år siden elns.

 

Veldig konkret svar: Du må nok spørre utviklerene av hver programvarepakke.

 

Finnes det ett svar midt i mellom? Hvilke generelle tilpasnigner må man gjøre i moderne software som gjør at minnebruket går i taket?

 

Det handler vel mer om at det er mye minne tilgjengelig, da kan mer lastes/mellomlagres i minne for å ha raskere tilgang til det enn om det ligger på disk.. Vil jeg tro?

Før måtte man gjøre tilpassninger for å få til ting med lite minne tilgjengelig, det trenger man ikke lengre.

Lenke til kommentar

 

Veldig generelt svar: Programmene er tilpasset for å kjøre på et moderne OS + hardware, ikke slik det var for 20 år siden elns.

 

Veldig konkret svar: Du må nok spørre utviklerene av hver programvarepakke.

 

Finnes det ett svar midt i mellom? Hvilke generelle tilpasnigner må man gjøre i moderne software som gjør at minnebruket går i taket?

 

 

Har man 16GB med ram i dag, så er vel ikkje dette noe å tenke på? Ting går jo ikkje treigt før man er tom for minne. Har man for lite minne, så enten lukker man ting som man ikkje trenger, eller så kjøper man mere minne. Vanskeligere er det ikkje :p

 

Det er jo ikkje farlig at minne blir brukt, det er jo bare en fordel. Jo mere som er i minnet, desto fortere og mere responsivt er programmene som brukes. Ram er til for å brukes ;)

Lenke til kommentar

 

 

Veldig generelt svar: Programmene er tilpasset for å kjøre på et moderne OS + hardware, ikke slik det var for 20 år siden elns.

 

Veldig konkret svar: Du må nok spørre utviklerene av hver programvarepakke.

 

Finnes det ett svar midt i mellom? Hvilke generelle tilpasnigner må man gjøre i moderne software som gjør at minnebruket går i taket?

 

Det handler vel mer om at det er mye minne tilgjengelig, da kan mer lastes/mellomlagres i minne for å ha raskere tilgang til det enn om det ligger på disk.. Vil jeg tro?

Før måtte man gjøre tilpassninger for å få til ting med lite minne tilgjengelig, det trenger man ikke lengre.

 

 

Det er klart - hele intensjonen med minnet er jo å mellomlagre. Men "mellomlageret" er 10-1000 ganger så stort som komplett innhold fra disk. Det er såklart en del overhead i å gå fra en fil på disk til noe som presenteres i på skjermen, men jeg klarer jeg ikke å se hvorfor behovet for minne er så stort som det er. På ett eller annet tidspunkt er absolutt alt som trengs tilgjengelig i minne.

 

Nå er jeg på en annen PC enn tidligere. Dette er raskere PC med mye mer minne - og firefox bruker her ca 1100MB. På kun denne fanen. Selv om hele denne fanen hadde blitt stykket opp i ferdige bitstrømmer og alt sammen lå klart i minnet for å blåse ut på skjermen ville det blitt ca 10x 1080 x 1920 = 400MB med 32bits fargeinfomasjon. Det såklart ikke i nærheten av sånn det fungerer, men poenget mitt er at det det eksisterer ikke mer enn 400MB med informasjon her. Så hvorfor holder firefox på 700MB ekstra minne?

 

Selv om det i senere tid har blitt ett annet programmeringsmiljø ignorer man ikke minnebruk. Det er forfedelig dårlig programmering og ingenting ville fungert. Det er også ett åpentbart konkurransefortrinn å bruke lite minne, men Chrome er notorisk for en ekstrem minnebruk. Hvis det var mulig ville de ha gjort noe med det, men de har valgt en programmodell som krever mye minne.

 

Så hva er det som skjer i kulissene?

Endret av XIFXEGLO
Lenke til kommentar

Ofte blir vel også hele programmet eller deler av det lastet inn i minnet. Derfor vil Word f.eks ta mye mer enn de 50mb med dokumenter du har oppe. Det at vi idag bruker Virtuelt Minne(VM) gjør at utviklere egentlig ikke trenger å ta så veldig stor hensyn til hvor mye minne applikasjonen deres bruker. Går maskinen tom for minne velger bare operativ systemet deler av minnet som blir skrevet tilbake til et område på disken.

Lenke til kommentar

 

Hvorfor er det sånn?

Det er mange gode grunner, men i mange tilfeller, som f.eks. Acrobat Reader, bunner det helt åpenbart i at de gir blaffen.

 

Edit: Gå inn i about:memory i Firefox, og trykk på "measure", så får du en rapport.

 

 

Den var stilig. Der har jeg litt å bla meg gjennom; kan sikkert lære noe der.

 

Har du noen eksempler på typiske prosesser som bruker mye minne? Jeg ser at f.eks Chrome reklamerer med prerendering, noe som åpenbart kan bruke mye minne.

 

 

Ofte blir vel også hele programmet eller deler av det lastet inn i minnet. Derfor vil Word f.eks ta mye mer enn de 50mb med dokumenter du har oppe. Det at vi idag bruker Virtuelt Minne(VM) gjør at utviklere egentlig ikke trenger å ta så veldig stor hensyn til hvor mye minne applikasjonen deres bruker. Går maskinen tom for minne velger bare operativ systemet deler av minnet som blir skrevet tilbake til et område på disken.

 

Litt uenig med deg der. Programkoden i seg selv bidrar ikke til noe betydelig minnebruk, men kjøringen av den vil såklart kunne legge beslag på en del, men da er vi kommet rundt til orginalsprøsmålet.

 

Virtuelt minne har alltid vært en del av forbruker PC'er, så det er ikke noe nytt konsept. Som jeg nevnte tidligere vil man ikke klare å programmere ett fungerende kommersielt program hvis man ikke er noenlunde kompetent og bevisst rundt dette.

 

Man gjør ett designvalg på at man kan bruke mye minne. Det er såklart mye lettere/billigere å utvikle kode som sløser med minnet så valget kan være basert på det. Det er nok helt sikkert aktører som ikke bryr seg - men de vet at det skjer, og de vet hvorfor det skjer, men det koster for mye å lage bedre kode.

 

... men jeg lurer på hvorfor det skjer. Hva er det som ligger der?

Lenke til kommentar

Deler av programkoden blir jo lastet inn i minnet, og den blir nødvendigvis ikke fjernet om det ikke trengs. Kan godt hende at hvert dokument også lager en ny prosess for Word og hver prosess har vell en stack osv. En stack er som regel 8mb og en prosess har som regel to stacker. Dette bidrar nok til bruk av minnet. 

Lenke til kommentar

En stack er som regel 1-2mb som standard. Standard "stack-størrelse" på linux er kanske rundt 8 mb, men dette er maks-størrelsen før man får en feilmelding. Stacken begynner liten og utvides med 4kb om gangen både på windows og linux.

 

en prosess har som regel to stacker

Hva tenker du på her? Én tråd har én stack. En prosess kan ha én eller tusen tråder, eller noe midt i mellom. Endret av Emancipate
Lenke til kommentar

RAM er billig, og RAM er (relativt) raskt. Årsaken til at programmer i dag bruker mye RAM er fordi de laster inn komplekse rammeverk, mellomlagrer ting fra disken din som bare juling, og det som mellomlagres er rett og slett større i dag enn før. Det er ikke det at vi ikke klarer oss med mindre RAM, men snarere at vi benytter oss av RAM vi har.

  • Liker 1
Lenke til kommentar

Overgangen til 64-bit medførte at pekere doblet seg i størrelse, det samme gjorde mange tall. I tillegg bruker nå "alle" double når de trenger flyttall, mens man tidligere vurderte å bruke float, som bruker halve plassen.

 

Språk med garbage collection må nok også ta sin del av skylda. Det medfører at objekter som ellers ville vært frigjort, blir liggende i minnet og ta opp plass (for en begrenset periode).

  • Liker 1
Lenke til kommentar

En stack er som regel 1-2mb som standard. Standard "stack-størrelse" på linux er kanske rundt 8 mb, men dette er maks-størrelsen før man får en feilmelding. Stacken begynner liten og utvides med 4kb om gangen både på windows og linux.

 

en prosess har som regel to stacker

Hva tenker du på her? Én tråd har én stack. En prosess kan ha én eller tusen tråder, eller noe midt i mellom.

 

 

I alle fall i Linux har en prosess i utgangspunktet to stacker. Den har en stack som blir brukt i user space i OSet og en stack som blir brukt når en prosess er i kernel space. En tråd har en stack ja. 

Lenke til kommentar

Flere årsaker:

Endel programmer er JIT-kompilerte, dvs. at både kildekode (eller bytekode) og kompilator med alt inkludert, må være i minnet samtidig som selve programmet.

 

Noen programmer kjører i en slags bundled versjon av Chrome, dermed må nesten hele Chrome inn i minnet, i tillegg til en eventuelt vanlig versjon av Chrome som du kjører (f.eks. Spotify, Atom).

Endret av Emancipate
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...