Kiedy zbierać śmieci

Mam fragment kodu, który ładuje bardzo duży obraz do pamięci. Więc wydawało mi się rozsądne zadzwonić

System.gc();

przed załadowaniem obrazu. Z tego, co mogę powiedzieć, działa bez problemów.

Wczoraj postanowiłem użyć całkiem przydatnego oprogramowania o nazwieFindBugs skanuje twój kod i zgłasza problemy, które mogą powodować błędy lub ogólnie nie zalecane strategie. Problem polega na tym, że ten fragment kodu, o którym wspomniałem, zostanie zgłoszony. Opis jest następujący:

... wymusza zbieranie śmieci; niezwykle wątpliwy, z wyjątkiem kodu benchmarkingu

I to się rozwija:

Kod jawnie wywołuje zbieranie śmieci. Z wyjątkiem specyficznego zastosowania w benchmarkingu, jest to bardzo wątpliwe.

W przeszłości sytuacje, w których ludzie jawnie wywoływali garbage collector w procedurach takich jak zamykanie lub finalizowanie metod, doprowadziły do ​​ogromnych czarnych dziur wydajności. Zbieranie śmieci może być kosztowne. Każda sytuacja wymuszająca setki lub tysiące zbiórek śmieci spowoduje, że maszyna zacznie się czołgać.

Więc moje pytanie brzmi:Czy w takim przypadku NIE jest OK programowe wywołanie garbage collectora? Mój kod wywołuje go tylko raz, a metoda, w której się znajduje, jest rzadko używana. A jeśli wywołanie go nie jest w porządku, co powinieneś zrobić w przypadku, gdy potrzebujesz tak dużo pamięci, jak to możliwe, zanim wykonasz bardzo intensywną operację pamięci i musisz zwolnić tyle pamięci, ile to możliwe przedtem?

questionAnswers(4)

yourAnswerToTheQuestion