Více na
Vytvoření úniku paměti v jazyce Java
Právě jsem měl pohovor a byl jsem požádán, abych vytvořil memory leak v Javě.
Nemusím říkat, že jsem si připadal dost hloupě, když jsem neměl ani ponětí, jak takový únik začít vytvářet.
Jaký by měl být příklad?
3065
3
Jednoduché je použít sadu HashSet s nesprávným (nebo neexistujícím) kódem
hashCode()
neboequals()
, a pak neustále přidávat "duplikáty". Místo aby duplikáty ignorovala, jak by měla, bude se množina stále jen zvětšovat a vy je nebudete moci odstranit.Pokud chcete, aby se tyto špatné klíče/elementy zdržovaly, můžete použít statické pole, např.
Možná pomocí externího nativního kódu prostřednictvím JNI?
V čisté Javě je to téměř nemožné.
Ale to se jedná o "standardní" typ úniku paměti, kdy již nelze přistupovat k paměti, ale ta je stále ve vlastnictví aplikace. Místo toho si můžete ponechat odkazy na nepoužívané objekty nebo otevřít proudy, aniž byste je následně uzavřeli.
Vytvořte statickou mapu a přidávejte do ní pevné odkazy. Ty nebudou nikdy GC'd.