Wciąż słyszę, że aplikacje na Androida powinny próbować ograniczyć liczbę tworzonych obiektów, aby zmniejszyć obciążenie odszukiwacza. Ma to sens, że nie chcesz tworzyć ogromnej liczby obiektów do śledzenia na ograniczonym obszarze pamięci, na przykład na tradycyjnej aplikacji serwerowej utworzonej w ciągu kilku sekund 100 000 obiektów nie byłoby niespotykane.Zmiana stylu kodowania ze względu na wydajność GC Androida, jak daleko jest za daleko?
Problem w tym, jak daleko powinienem to wziąć? Widziałem mnóstwo przykładów aplikacji na Androida polegających na statycznym stanie, aby rzekomo "przyspieszyć". Czy zwiększenie liczby instancji wymagających zebrania śmieci z dziesiątek na setki naprawdę robi tak wielką różnicę? Mogę sobie wyobrazić zmianę mojego stylu kodowania tak, by teraz tworzył setki tysięcy obiektów, jakie możesz mieć na pełnowymiarowym serwerze Java-EE, ale poleganie na kilku statycznych stanach, aby (rzekomo) zmniejszyć liczbę obiektów do zbierania śmieci, wydaje się dziwny.
Ile naprawdę trzeba zmienić styl kodowania, aby tworzyć wydajne aplikacje na Androida?
Dodam również, że często znajdziesz kod Java, który był oryginalny napisany dla komputerów stacjonarnych lub serwerów, który jest niezwykle nieefektywny i będzie przerzucał mnóstwo obiektów w porównaniu do ilości pracy, jaką wykonuje. Na przykład widziałem kod sieciowy, który nieustannie powoduje, że GCs przetwarza dane z sieci. Jeśli twój kod to robi, powinieneś naprawdę zoptymalizować go, nie tylko z powodu Dalvik, ale dlatego, że nie jest odpowiedni dla urządzenia mobilnego - wszystkie te dodatkowe prace pochodzą bezpośrednio z baterii. – hackbod
Jeśli chodzi o to, jak bardzo styl powinien zostać zmieniony, powiedziałbym, że najlepszym sposobem na zrobienie tego jest napisanie kodu, który działa (i zastanowić się nad ponownym wykorzystaniem przydzielonych obiektów, ale nie jest to zbyt obszerne) i sprawdzić, czy istnieje jakikolwiek nacisk na GC. Jeśli tak jest, uruchom pamięć profilującą twój kod i znajdź miejsca, w których możesz uniknąć przydzielania i usuwania zmiennych. –