webForumDet fria alternativet

Minnesläcka i HashMap

3 svar · 243 visningar · startad av andreascarlsson

andreascarlssonMedlem sedan feb. 2003211 inlägg
#1

Jag har en liten minnesfundering... :q

Om jag sparar ett flertal objekt i en HashMap och sedan nullar HashMap-objektet, frigörs då även de objekt som är sparade i HashMap-objektet??

Kommer GarbageCollectorn att "käka upp" dessa objekt, eller anser den att det fortfarande finns referenser kvar till de objekt som var lagrade i HashMap-objektet?

M.a.o. kommer jag att få ett minnesläckage i följande kod?:

public void fooBar()
{
   HashMap hashmap = new HashMap()
   
   for(int i=0; i<1000; i++)
      hashmap.put("key" + i, new ObjectOfSomeKind());

   hashmap = null;
}

Om det skulle vara så att det uppstår ett minnesläckage, hur bör man då frigöra dessa objekt?

juventus1Medlem sedan dec. 2000401 inlägg
#2

Dessa objekt borde städas undan av GC:n, det finns ju inga referenser till dem längre (i ditt exempel). Kolla denna artikel för lite mer info:
http://www.javaworld.com/javaworld/jw-08-1996/jw-08-gc.html

andreascarlssonMedlem sedan feb. 2003211 inlägg
#3

Ok!

Tack för infon.

LimeMedlem sedan sep. 2001837 inlägg
#4

Ja, de städas upp av GC:n. Jag sitter i ett projekt där den som har designat systemet verkar älska HashMap och har via empiriska undersökningar konstaterat att det i många fall, om man har stora HM:ar, är mer effektivt att nulla alla objekt i HM:en och sedan nulla själva HM-referensen. GC:n har då enklare att städa bort objekten, framför allt om man kör med floor-algoritmen i GC:n.

Om prestanda inte är nödvändigt så strunta i det.

/Lime

Genererad på 376 ms · cache AV · v20260730165559-full.f96bc7eb