oszczędzanie pamięci

0

czy bardziej będzie pamięciooszczędne jeżeli w nieużywanym obiekcie (lista, tablica hashująca) wywołam metodę usuwająca wszystkie dane z niej, czy jak przypisze do niej 'null'?

z gory dzieki za pomoc

0

Zakladajac ze nie ma do tych obiektow innych referencji, po odsmieceniu mniej pamieci bedzie zuzyte w drugim wypadku, dlatego ze sama kolekcja tez jest obiektem. Co za tym idzie tez zajmuje pamiec.
Sa to jednak mikroskopijne wartosci ;)).

0
  1. wywołam metodę usuwająca wszystkie dane z niej
  2. przypisze do niej 'null'

a tak z mojej dedukcji wynikałoby że przypadek 2) szybciej się wykona, ale zwolni sie pamięć jak wpadnie garbage collector, natomiast 1) zwolni pamięć od razu ale wywoływanie funkcji dłużej zajmie

Sa to jednak mikroskopijne wartosci
domyslam sie, jednak jest to zboczenie programisty J2ME

0

Dodam tylko od siebie powód dlaczego druga opcja jest lepsza. Jeżeli w pierwszej usuniesz dane, czyli w zasadzie obiekty, które również są na stercie, to one zostaną zwolnione dopiero kiedy upomni sie o nie odśmiecacz. Tyle, że w czasie tworzenia pamięć tych podobiektów najczęściej jest tuż za samym obiektem (a przynajmniej gdzieś w adresowym pobliżu). często zwalniając same dane będziesz miał postępującą fragmentację sterty bo między zwolnionymi pustkami pozostaną niewielkie wciąż używane "wysepki" samych obiektów, które agregowały wcześniej zwolnione dane. A tym samym utrudnisz odśmiecaczowi zadanie. Jeżeli natomiast przypiszesz referencji null (zakładając, że jest tylko jedna, co nie jest wcale pewne), to jest większa szansa, że zwolnisz wszystkie referencje jakie ten obiekt miał w posiadaniu oraz jego samego. Odśmiecacz zastanie więc ugór ;-) , którzy sprawnie połączy z reszta ugorów i fragmentacja raczej nie wystąpi - a roboty (czyli zabranego czasu) będzie mniej.

1 użytkowników online, w tym zalogowanych: 0, gości: 1