Jest wiele do powiedzenia w poświęceniu czasu na przetestowanie różnych ustawień czyszczenia pamięci, ale jak wspomniano powyżej, zwykle nie jest to przydatne.
Obecnie pracuję nad projektem obejmującym środowisko o ograniczonej pamięci i stosunkowo duże ilości danych - jest kilka dużych fragmentów danych, które przesuwają moje środowisko do granic możliwości i mimo że udało mi się zmniejszyć zużycie pamięci, więc że teoretycznie powinno działać dobrze, nadal otrzymywałbym błędy dotyczące miejsca na stertę - pełne opcje GC pokazały mi, że próbuje zbierać śmieci, ale bezskutecznie. W debugerze mogłem wykonać System.gc () i na pewno byłoby „dużo” dostępnej pamięci ... niewiele dodatkowej, ale wystarczającej.
W rezultacie moja aplikacja wywołuje System.gc () tylko wtedy, gdy ma zamiar wejść do segmentu kodu, w którym zostaną przydzielone duże bufory niezbędne do przetwarzania danych, a test na dostępnej wolnej pamięci wskazuje, że nie gwarantujemy to. W szczególności patrzę na środowisko 1 GB, w którym co najmniej 300 MB jest zajmowane przez dane statyczne, przy czym większość danych niestatycznych jest związanych z wykonywaniem, z wyjątkiem sytuacji, gdy przetwarzane dane mają co najmniej 100-200 MB w źródło. To wszystko jest częścią procesu automatycznej konwersji danych, więc dane istnieją przez stosunkowo krótki czas w dłuższej perspektywie.
Niestety, chociaż dostępne są informacje o różnych opcjach strojenia garbage collectora, wydaje się, że jest to w dużej mierze proces eksperymentalny, a szczegóły niższego poziomu potrzebne do zrozumienia, jak radzić sobie z tymi konkretnymi sytuacjami, nie są łatwe.
Wszystko to zostało powiedziane, mimo że używam System.gc (), nadal dostrajałem się za pomocą parametrów wiersza poleceń i udało mi się poprawić ogólny czas przetwarzania mojej aplikacji o stosunkowo znaczną ilość, mimo że nie mogłem obejść przeszkodą wynikającą z pracy z większymi blokami danych. Biorąc to pod uwagę, System.gc () jest narzędziem ... bardzo zawodnym narzędziem, a jeśli nie jesteś ostrożny z tym, jak go używasz, będziesz żałować, że nie działało częściej niż nie.