← Back to team overview

sslug-teknik team mailing list archive

Re: min server er overbelasted, men hvad venter den egentlig på?

 

Jon Bendtsen wrote:
Den 28. jul 2004, kl. 1:36, skrev Kristian Duus Østergaard:

Jo men en memoryleak er jo netop at programmet bliver ved med at
allokere RAM uden at release noget. I Java er det meget nemt i det
man bare kan sætte objectet til null så klarer Garbage Collectoren
resten. I fx. C skal man selv huske at release den memory man har
brugt.


Det er jo ikke GC hvis at man i java manuelt skal sætte objektet til null.
Det ville være GC hvis java opdagede at man ikke bruger et objekt mere,
og derfor nedlægger det.

Det gør java også. Definitionen på hvornår du ikke bruger et objekt er blot når ingen levende tråd længere direkte eller indirekte har en referencen til objektet.

F.eks.:

Map foo = new HashMap();
foo.put("bar1",new Object());
foo.put("bar2",new Object());

// på dette punkt i programmet er der 3 objekter: foo og to gange
// Object.

foo = null;
// nu vil GC eventuelt deallokere alle 3 objekter.

Memory leak opstår typisk ved at man bliver ved med at indsætte nye objekter i et Map eller List, uden at dereferencere dem igen.

Baldur


References