Ideální množství paměti RAM, které telefony potřebují pro svůj plynulý multitasking, je poměrně diskutované téma. Apple si totiž ve svých iPhonech vystačí s menší velikostí, a i s tou je mnohdy použitelnější než řešení s Androidem. V iPhonu také prakticky nenajdete jakoukoli správu RAM paměti, kdežto Android má k tomu vyčleněnou vlastní funkci.
Pokud půjdete např. v telefonech Samsung Galaxy do Nastavení -> Péče o zařízení, najdete zde ukazatel paměti RAM s informací, kolik prostoru je volného a kolik zabraného. Po rozkliknutí nabídky zde vidíte, kolik paměti si která aplikace bere s tím, že zde máte i možnost paměť vymazat. Nachází se zde i funkce RAM Plus. Její smysl je takový, že z interního úložiště ukousne určitý počet GB, které použije pro virtuální paměť. Dokážete si něco takového představit na iOS?
Chytré telefony na paměť RAM spoléhají. Slouží jim totiž k uložení operačního systému, ke spouštění aplikací a také k ukládání některých jejich dat do mezipaměti a vyrovnávací paměti. Paměť RAM tak musí být uspořádána a spravována tak, aby aplikace mohly hladce fungovat, i když je shodíte na pozadí a za chvíli zase otevřete.
Swift vs. Java
Při spuštění nové aplikace je ale třeba mít volné místo v paměti, aby se ta načetla a spustila. Pokud tomu tak není, musí se místo uvolnit. Systém tedy natvrdo ukončí nějaké běžící procesy, jakými jsou právě především již dříve spuštěné aplikace. Oba systémy, tedy Android a iOS, však s RAM pracují odlišně.
Operační systém iOS je psaný ve Swiftu a iPhony vlastně nepotřebují recyklovat použité paměti ze zavřených aplikací zpět do systému. Je to dáno tím, jak je iOS stavěn, protože Apple nad ním má vzhledem k tomu, že jede jen na jeho iPhonech, plnou kontrolu. Oproti němu je Android psaný v Javě, a je používán na mnoha zařízeních, proto musí být univerzálnější. Při ukončení aplikace je totiž místo, které ta zabrala, vráceno zpět operačnímu systému.
Nativní kód vs. JVM
Když vývojář napíše aplikaci pro iOS, zkompiluje ji přímo do kódu, který může běžet na procesoru iPhonu. Tomuto kódu se říká nativní kód, protože ke svému běhu nevyžaduje žádnou interpretaci ani virtuální prostředí. Naproti tomu u systému Android je tomu jinak. Když je kód v jazyce Java kompilován, změní se na mezikód Java Bytecode, který je nezávislý na procesoru. Ten tedy může běžet na různých procesorech různých výrobců. To má obrovské výhody pro kompatibilitu mezi platformami.
Samozřejmě je zde i nevýhoda. Každá kombinace operačního systému a procesoru potřebuje prostředí známé jako Java Virtual Machine (JVM). Nativní kód má ale lepší výkon než kód spuštěný prostřednictvím JVM, takže použití JVM jednoduše zvyšuje množství paměti RAM, kterou aplikace využívá. Aplikace pro iOS tedy vyžívají méně paměti, a to v průměru o 40 %. Také proto vlastně Apple nemusí své iPhony osazovat tak vysokými paměťmi RAM, jako je tomu u zařízení s Androidem.
Nejsem zrovna odborník, ale popíšu svůj pohled na věc z hlediska uživatele, který používal 15 let android a nyní jsem 2 měsíce na iPhonu 13 mini. U androidu s pamětí 8GB (naposledy Samsung S21, Flip3) jsem se většinou vrátil po určité době k dříve spuštěné aplikaci a ta byla pořád načtena v RAM, takže se nespouštěla celá znovu a mohl jsem plynule navázat, kde jsem přestal. Na druhou stranu jsem i s 8GB pamětí tak jednou za týden „sestřelil“ všechny aplikace, aby se RAM pročistila, protože se systém začal s plnou pamětí zpomalovat. Na iPhonu nemám problém se zpomalováním, ale na druhou stranu musím říct, že při používání téměř totožných aplikací se mi naopak pravidelně stává, že když se do dříve spuštěné aplikace vracím, tak ta se načítá kompletně znovu a nemůžu plynule navázat tam, kde jsem skončil.
Která varianta je lepší? Těžko říct… Sestřelit aplikace na androidu a vyčistit RAM je otázka dvou kliknutí. Načíst celou aplikaci znovu na iPhonu není zas tak časově náročné, tak to zase tak moc nevadí… Ideální by samozřejmě byla větší RAM na iPhonu a fungování multitaskingu jako na androidu :-D
Šmarja to je zas blbost. Jednak v Javě už se na androidu dlouho nedělá, na to je Kotlin. Paměť má na starosti Garbage collector, který je zrovna u iOS ten nejjednodušší, co existuje i se svými zápory. Celá věc je to o tom, že iOS zabíjí aplikace ihned, jak je dáte z obrazovky pryč. Tím se uvolní paměť stejně jako na linuxu, když napíšete kill pid procesu. Proto tak dlouho trvá otevřít prohlížeč a vrátit k předchozí práci. Tento článek je doslovný překlad X let starého článku fanatickým zastáncem iOS bez znalosti programování. Ano, samozřejmě, že správu paměti má na starosti hlavně programátor, co dělá aplikace. Pokud na to kašle, memory leak je na světě a pqk můžete mít X Gb paměti a stejně je to k ničemu. A v době, kdy je spousta aplikací pouze WebView, to je hrozně jednoduché, protože ten sám sežere co může. Článek je nesmysl, odpad.
Android už dávno nepoužívá jvm, ale dvm. A navíc to pak kompiluje do nativního executable
Java pořád v androidu je.