andreascarlssonMedlem sedan feb. 2003211 inlägg
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
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
LimeMedlem sedan sep. 2001837 inlägg
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