Czy procesy Dalvik VM uwalniają systemową pamięć RAM?
Dokumentacja programisty Androida, jako część Project Svelte (motto: „Czy kiedykolwiek próbowałeś zainstalować Bugdroid w chudych dżinsach?!?”), Ma stronęZarządzanie pamięcią aplikacji. Zawiera:
Gdy użytkownik przejdzie do innej aplikacji, a interfejs użytkownika przestanie być widoczny, należy zwolnić wszystkie zasoby, które są używane tylko przez interfejs użytkownika. Uwalnianie zasobów interfejsu użytkownika w tej chwili może znacznie zwiększyć pojemność systemu dla procesów buforowanych, co ma bezpośredni wpływ na jakość obsługi użytkownika.
i:
TRIM_MEMORY_RUNNING_LOW
: Twoja aplikacja działa i nie jest uznawana za kasowalną, ale urządzenie działa znacznie wolniej w pamięci, dlatego należy zwolnić nieużywane zasoby, aby poprawić wydajność systemu (co bezpośrednio wpływa na wydajność aplikacji).
i tym podobne.
Jednak miałyby one sens tylko wtedy, gdyby „uwolnienie zasobów” w jakiś sposób wpłynęło na systemową pamięć RAM.
Miałem wrażenie, że Dalvik VM zachowuje się tak, jak robi to Java VM (a może „zrobił”, jeśli zmienili go, gdy nie patrzyłem). AFAIK, Java VM alokuje pamięć systemową RAM, aby zwiększyć wielkość sterty, ale nigdy jej nie zwalnia - po przydzieleniu pozostaje częścią przestrzeni sterty tak długo, jak proces jest uruchomiony.
Jeśli maszyna Dalvik VM zachowuje się w ten sam sposób, nie widzę, jak zwiększenie ilości nieprzydzielonej przestrzeni sterty w naszym procesie miałoby jakikolwiek wpływ na ogólną wydajność systemu. Teraz zwolnienie miejsca na sterty dla naszego procesu jest dobrą rzeczą, a być może zmniejszenie prawdopodobieństwa, że będziemy potrzebowaćwięcej systemowa pamięć RAM w przyszłości ... ale to nie wynika z dokumentacji. Dokumentacja stwierdza: „Uwalnianie zasobów interfejsu użytkownika w tej chwili może znacznie zwiększyć pojemność systemu dla procesów buforowanych”; nie mówi „Uwalnianie zasobów interfejsu użytkownika w tej chwili nie ma natychmiastowego wpływu, ale pomoże zmniejszyć w przyszłości obciążenie pamięci RAM aplikacji”.
Gdyby instrukcje nakazywały nam zwolnić pamięć przydzieloną przez NDK, to miałoby to sens, ponieważ ma to miejsce poza stertą Dalvik i wpłynie na pamięć RAM systemu. Ale dokumentacja nie rozróżnia tego.
Czy VM Dalvik faktycznie zwalnia przydzieloną pamięć RAM z powrotem do systemu, poza zakończeniem procesu? Jeśli tak, to kiedy? A w mniejszym stopniu, jak to się robi, biorąc pod uwagę, że garbage collector nie jest kompaktujący i nie kopiuje?
Dzięki!