Idealna ilość pamięci RAM potrzebna telefonom do płynnej wielozadaniowości jest dość dyskusyjnym tematem. Apple radzi sobie z mniejszym rozmiarem w swoich iPhone'ach, który często jest bardziej użyteczny niż rozwiązania z Androidem. Na iPhonie nie znajdziemy też żadnego narzędzia do zarządzania pamięcią RAM, choć Android ma do tego własną, dedykowaną funkcję.
Jeśli pójdziesz na przykład w telefonach Samsung Galaxy do Ustawienia -> Pielęgnacja urządzenia, znajdziesz tutaj wskaźnik pamięci RAM z informacją o tym, ile miejsca jest wolne i ile jest zajęte. Po kliknięciu menu możesz zobaczyć, ile pamięci zajmuje każda aplikacja, a także masz tutaj opcję wyczyszczenia pamięci. Znajduje się tu także funkcja RAM Plus. Oznacza to, że odgryzie pewną ilość GB z pamięci wewnętrznej, którą wykorzysta na pamięć wirtualną. Wyobrażacie sobie coś takiego na iOS?
Smartfony opierają się na pamięci RAM. Służy im do przechowywania systemu operacyjnego, uruchamiania aplikacji, a także do przechowywania części danych w pamięci podręcznej i buforowej. Dlatego pamięć RAM musi być zorganizowana i zarządzana w taki sposób, aby aplikacje mogły działać płynnie, nawet jeśli upuścisz je w tle i po pewnym czasie otworzysz ponownie.
Szybki vs. Jawa
Jednak uruchamiając nową aplikację, musisz mieć wolne miejsce w pamięci, aby ją załadować i uruchomić. Jeżeli tak nie jest, miejsce należy zwolnić. W związku z tym system wymusi zakończenie niektórych uruchomionych procesów, takich jak już uruchomione aplikacje. Jednak oba systemy, czyli Android i iOS, inaczej działają z pamięcią RAM.
System operacyjny iOS jest napisany w języku Swift, a iPhone'y tak naprawdę nie muszą odzyskiwać zużytej pamięci z zamkniętych aplikacji z powrotem do systemu. Wynika to ze sposobu, w jaki zbudowany jest iOS, ponieważ Apple ma nad nim pełną kontrolę, ponieważ działa tylko na jego iPhone'ach. Natomiast Android jest napisany w Javie i używany na wielu urządzeniach, więc musi być bardziej uniwersalny. Po zakończeniu działania aplikacji zajmowane przez nią miejsce jest zwracane systemowi operacyjnemu.
Kod natywny vs. JVM
Kiedy programista pisze aplikację na iOS, kompiluje ją bezpośrednio do kodu, który można uruchomić na procesorze iPhone'a. Kod ten nazywany jest kodem natywnym, ponieważ nie wymaga interpretacji ani środowiska wirtualnego do działania. Z Androidem jest jednak inaczej. Kiedy kod Java jest kompilowany, jest on konwertowany na kod pośredni Java Bytecode, który jest niezależny od procesora. Może zatem działać na różnych procesorach różnych producentów. Ma to ogromne zalety w zakresie kompatybilności między platformami.
Oczywiście jest też minus. Każda kombinacja systemu operacyjnego i procesora wymaga środowiska zwanego wirtualną maszyną Java (JVM). Jednak kod natywny działa lepiej niż kod wykonywany przez maszynę JVM, więc użycie JVM po prostu zwiększa ilość pamięci RAM wykorzystywanej przez aplikację. Dlatego aplikacje na iOS zużywają mniej pamięci, średnio 40%. Z tego też powodu Apple nie musi wyposażać swoich iPhone'ów w tak dużą ilość pamięci RAM, jak ma to miejsce w przypadku urządzeń z Androidem.
Nie jestem ekspertem, ale opiszę swoją perspektywę z perspektywy użytkownika, który używa Androida od 15 lat i od 2 miesięcy korzysta z iPhone'a 13 mini. Na androidzie z 8GB pamięci (ostatnio Samsung S21, Flip3) zazwyczaj wracałem po pewnym czasie do wcześniej uruchomionej aplikacji a ona nadal była załadowana w RAM-ie, więc nie uruchamiało się od nowa i mogłem płynnie wrócić tam gdzie chciałem odpuścić. Z drugiej strony, nawet mając 8 GB pamięci, raz w tygodniu „wyrzucałem” wszystkie aplikacje, aby wyczyścić RAM, ponieważ przy pełnej pamięci system zaczął zwalniać. Nie mam problemu ze spowolnieniem na iPhonie, ale z drugiej strony muszę powiedzieć, że przy korzystaniu z niemal identycznych aplikacji, wręcz przeciwnie, regularnie zdarza mi się, że kiedy wracam do wcześniej uruchomionej aplikacji, ładuje się całkowicie ponownie i nie mogę płynnie kontynuować od miejsca, w którym przerwałem.
Która opcja jest lepsza? Trudno powiedzieć… Zabicie aplikacji na Androidzie i wyczyszczenie pamięci RAM to kwestia dwóch kliknięć. Ponowne wczytanie całej aplikacji na iPhone'a nie jest już tak czasochłonne, więc nie ma to aż tak wielkiego znaczenia... Oczywiście idealnie byłoby mieć więcej RAM-u w iPhonie i wielozadaniowość jak na Androidzie :-D
Cholera, znowu to głupie. Po pierwsze, Androida od dawna nie tworzono w Javie, po to właśnie jest Kotlin. Za pamięć odpowiada moduł Garbage Collector, który jest najprostszy w iOS i istnieje nawet ze swoimi wadami. Rzecz w tym, że iOS zabija aplikacje, gdy tylko zdejmiesz je z ekranu. Zwalnia to pamięć, tak jak w systemie Linux, gdy wpiszesz kill pid procesu. Dlatego tak długo trwa otwarcie przeglądarki i powrót do poprzedniej pracy. Ten artykuł jest dosłownym tłumaczeniem artykułu sprzed X roku, napisanego przez fanatyka iOS bez wiedzy programistycznej. Tak, oczywiście, za zarządzanie pamięcią odpowiada głównie programista, za to, co robi aplikacja. Jeśli na to kaszle, to znaczy, że na świecie jest wyciek pamięci i pqk możesz mieć X Gb pamięci i nadal będzie ona bezużyteczna. A w czasach, gdy wiele aplikacji to tylko WebView, jest to bardzo proste, bo sam zjada, co może. Artykuł to bzdura, bzdura.
Android nie używa już jvm, ale dvm. Ponadto następnie kompiluje go do natywnego pliku wykonywalnego
Java jest nadal w systemie Android.