Jaka jest maksymalna ilość pamięci RAM, z której może korzystać aplikacja?

Jestem dość ciekawy tego pytania dotyczącego zarządzania pamięcią systemu operacyjnego Android więc mam nadzieję na dość szczegółową odpowiedź na ten temat.

Co chciałbym wiedzieć:

  • Jaka jest maksymalna ilość pamięci (w megabajtach / jako procent całkowitej pamięci RAM), z której może korzystać Aplikacja na Androida (która nie jest aplikacją systemową)?
  • czy są jakieś różnice między wersjami Androida?
  • są są jakieś różnice dotyczące producenta urządzenia?

I co najważniejsze:

  • jakie "czynniki boczne" są brane pod uwagę / od czego zależy , jeśli chodzi o system określający ilość pamięci RAM, jaką aplikacja może użyć w czasie wykonywania (zakładając, że maksymalna ilość pamięci NA APLIKACJĘ nie jest liczbą statyczną)?

Co do tej pory słyszałem (do 2013 roku):

  • wczesne Urządzenia z Androidem miały limit na aplikację 16MB
  • później ta czapka wzrosła do 24MB lub 32MB

Co mnie bardzo ciekawi:

Oba te limity są bardzo niskie.

Niedawno pobrałem Menedżer zadań Androida, aby sprawdzić pamięć RAM Moich urządzeń. Zauważyłem, że istnieją aplikacje wykorzystujące około 40-50 megabajtów pamięci RAM, co jest oczywiście więcej niż wspomniane maksymalne wykorzystanie pamięci RAM powiedzmy 32 MB. Jak więc Android określa, ile pamięci RAM może użyć aplikacja? Jak jest możliwe, że aplikacje przekraczają ten limit?

Ponadto zauważyłem, że niektóre moje aplikacje się psują (zabite przez system?) z OutOfMemoryException przy użyciu około 30-40 megabajtów. Z drugiej strony, mam aplikacje uruchomione na moim telefonie przy użyciu 100 MB i więcej po pewnym czasie (prawdopodobnie z powodu wycieków pamięci), które nie ulegają awarii lub giną. Więc to oczywiście zależy również od samej aplikacji , jeśli chodzi o określenie, ile pamięci RAM można oszczędzić. Jak to jest możliwe? (Przeprowadziłem TESTY Z HTC One S Z 768 MB RAM)

Z góry dziękuję za Wyjaśnienie.

Zastrzeżenie: nie jestem powiązany z aplikacją Android Task Manager w żaden sposób.

Author: Philipp Jahoda, 2013-09-07

2 answers

Jaka jest maksymalna ilość pamięci (w megabajtach / procent całkowitej pamięci RAM), którą może używać Aplikacja na Androida (która nie jest aplikacją systemową)?

Różni się w zależności od urządzenia. getMemoryClass() on ActivityManager poda wartość urządzenia, na którym działa kod.

Czy są jakieś różnice między wersjami Androida?

Tak, O ile wymagania systemu operacyjnego wzrosły z biegiem lat, a urządzenia muszą dostosować się do mecz.

Czy istnieją różnice dotyczące producenta urządzenia?

Tak, O ile producenci produkują urządzenia, a rozmiar różni się w zależności od urządzenia.

Jakie "czynniki boczne" są brane pod uwagę przy określaniu ilości pamięci RAM, z której może korzystać aplikacja?

Nie mam pojęcia, co znaczy "czynniki boczne".

Wczesne urządzenia miały limit per-app 16MB; później urządzenia zwiększyły go do 24MB lub 32MB

/ Align = "left" / Rozdzielczość ekranu jest znaczącym wyznacznikiem, ponieważ większe rozdzielczości oznaczają większe bitmapy, a więc tablety i telefony o wysokiej rozdzielczości będą miały jeszcze wyższe wartości. Na przykład zobaczysz urządzenia ze stertami 48MB i nie zdziwiłbym się, gdyby były wartości wyższe niż to.

Jak to możliwe, że aplikacje przekraczają ten limit?

Zakładasz, że autor tej aplikacji wie, co robi. Biorąc pod uwagę, że [[41]} użycie pamięci aplikacji jest trudne dla głównego inżyniera Androida do określenia, nie zakładałbym, że aplikacja, o której mowa, koniecznie zapewnia szczególnie dokładne wyniki.

To powiedziawszy, kod natywny (NDK) nie podlega limitowi sterty. A od Androida 3.0 aplikacje mogą żądać "dużej sterty", zwykle w zakresie setek MB, ale jest to uważane za słabą formę dla większości aplikacji.

Ponadto zauważyłem, że niektóre moje aplikacje crash z OutOfMemoryException przy użyciu około 30-40 megabajtów.

Należy pamiętać, że Android garbage collector nie jest kompaktowym garbage collector. Wyjątkiem naprawdę powinien być CouldNotFindSufficientlyLargeBlockOfMemoryException, ale prawdopodobnie uznano to za zbyt słowne. OutOfMemoryException oznacza, że nie możesz przydzielić żądanego bloku , nie oznacza to, że wyczerpałeś całą stertę.

 103
Author: CommonsWare,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:34:45

Limity pamięci na aplikację są tutaj w zależności od rozmiaru ekranu i wersji Androida: https://drive.google.com/file/d/0B7Vx1OvzrLa3Y0R0X1BZbUpicGc/view?usp=sharing

Źródło: Android Compatibility Downloads http://source.android.com/compatibility/downloads.html ; Compatibility Definition Document (CDD), Section Virtual Machine Compatibility or Runtime Compatibility

 9
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-29 08:40:56