Okrem otázky, či sme už ako ľudstvo kontaktovali mimozemšťanov, nás všetkých trápi ešte jedna vec - prečo Android potrebuje 3 GB RAM zatiaľ čo iOS iba 1 GB? Na túto otázku položila odpoveď známa webstránka Quora, kde túto problematiku vysvetlil používateľ Glyn Williams. A podľa jeho slov je základ tohto problému v tom, že Android používa aplikácie vytvorené v programovacom jazyku Java.

Aplikácie vytvorené v Jave totižto používajú proces známy ako garbage collection, teda akési kolekcie odpadu. Tento proces stojí za uvoľňovaním operačnej pamäte RAM, keď vypnete niektorú z používaných aplikácií. Problém je ale v tom, že samotný proces kolekcie odpadu potrebuje 4 až 8-krát viac voľnej RAM-ky ako samotná aplikácia, ktorej vypnutie tento proces spôsobilo. Preto Android potrebuje tak veľkú operačnú pamäť, inak by sa celý systém na chvíľu značne spomalil, ako tomu bývalo pri zariadeniach s 512 MB RAM. Apple vo svojich zariadeniach používa úplne iný prístup k operačnej pamäti a nepracuje so žiadnymi kolekciami odpadu. Aj preto mu na plynulý chod postačuje 1 GB RAM. V tejto oblasti nie som až takým veľkým odborníkom a pokiaľ viete túto problematiku vysvetliť lepšie, napíšte nám do komentárov pod tento článok.
Zdroj: Quora
To je tym, ze programatori v Jave su lenivi a nepisu destruktory a spoliehaju sa prave na garbage collector…. :(
takuto hlupost moze napisat fakt jedine clovek co v zivote v jave nic nerobil a netusi ako funguje
chlapče skús si lepšie pogoogliť javu ….. a daj si facku
JAVA destructor neobsahuje. Programátor má pramálo možností, ako ovplyvniť životnosť objektu, keď ho už nepotrebuje. Pokiaľ viem, tak môže explicitne spustiť práve garbage collector. Toto mi príde, ako nepochopiteľná vlastnosť Javy, ktorú neviem prekusnúť. Mám taký dojem, že C# to má vyriešené.
Java GC pracuje automatický na pozadí, na iPhone v Objective C sa musíš o uvoľňovanie pamate starať sám. Nie je možnosť ovplyvniť uvoľňovanie pamate v Jave…
Vo všeobecnosti platí, že práca urobená manuálne je dôkladnejšia ako to čo sa deje automaticky
who cares
ak za telefon s 3 gb ram eam menej ako za telefon s 1 gb ram tak mi to je fuk
true dat
kto hovorí že androidu nestačí 1Gb ram? :D ja mám 1 Gb a systém je úplne plynulý nikdy žiadne sekanie som nezažil ani som nezažil aby mi nejaká hra alebo appka nešla. Prehnaný multitasking nepoužívam.
Mám taky 1 GB (Moto G 2013) a systém rozhodně není plynulý. Občas má své chvilky a jede výborně, ale stačí spustit pár aplikací a systém ukončuje aktivity jako zběsilý a systém se pak seká.
Záleží od toho čo máš za android :P Mne CM11 s 1GB ram úplne vystačí a stále mám volno cca 500MB na appky
Je jedno, co mám za Android. CM, PA (+ deriváty těchto dvou), stock (který je navíc téměř identický jako čistý Android, jen má pár Motorola services navíc) a stejně i když zpřísním low memory kill policy v nastavení kernelu na celkem nízkou hodnotu (pod kterou už by se aplikace vypínaly moc brzo a moc času) a sotvakdy se dostanu na víc jak 120MB volné RAM s tím, že okolo 60MB free už se začne systém výrazně sekat.
Nezáleží tak úplně na Androidu jako na tom, jak náročný uživatel člověk je. To je pushbullet sem, messenger tam + spousta dalších život ulehčujících aplikací a ty prostě zůstávají v RAM a není radno je killnout, protože pak nemusí fungovat správně (a trvá pak dlouho je znovu zapnout)
Toto mám stále s CM11, trochu upravená verzia, denne sa nedostanem pod 350MB… :P A máš pravdu, záleží od toho, aký je užívateľ náročný. Ja som príkladom, na mobil nenáročný, takže 1-2 appky mi stačia.
Len ma štve, že google chrome na androide, si potiahne niekedy aj 150MB ram, čo je fakt nechutné… Pritom iné prehliadače, sú viac optimalizované…
Čo je prehnaný multitasking? Veď ten beží nezávisle od toho čo robíš. Spustíš inú appku a tá predchádzajúca zostane v pamäti či chceš, či nechceš… A okrem toho kopa app sa automaticky načíta pri štarte, hoci ju vôbec nepoužívaš.
No mal som na mysli to že nespúšťam viacero aplikácií naraz. Service appky, ktoré sa spúšťajú pri štarte neriešim. Aj tak mám stále 450-500 mb volnej ram z 1gb. Je síce pravda že tam mám takmer čistý android.
včera tu tých komentov bolo viac, ako vidím, veselo sa maže ;)
Včera? Tento článok som publikoval pred hodinou cca :-)
nepomylil si si stranku ? :-D
garbage collection – je to sposob uvolnovania pamati obsadenej uz nepotrebnymi objektmi. V jazyku C, C++ sa o uvolnovanie stara programator. Pre kazdy objekt musi napisat jednu funkciu, ktora pamat alokovanu objektom uvolni a ktora sa spusti pri zaniku objektu. Je to castym zdrojom chyb, ktore maju za nasledok pad aplikacie. Ine jazyky ako Java a Javascript maju uvolnovanie pamati pomocou “garbage collection” – o uvolnovanie sa stara samotny jazyk, programator na to nemusi pisat ziaden kod. Jednoduchsie a spolahlivejsie riesenie na ukor vykonu – v pravidelnych intervaloch sa spusta proces, ktory prebehne vsetky objekty a rozhoduje ktore uz nie su potrebne a tie uvolni z pamati. BTW: Je to na urovni aplikacie napisanej v danom jazyku, nie na urovni OS. Takze sa to spusta pocas behu aplikacie ako sucast kazdej aplikacie. Ak mam spustenych 10 aplikacii, tak sa mi spusta 10 samostatnych “uvolnovani pamati”, jeden v kazdej aplikacii. A spusta sa to pravidelne pocas celeho behu aplikacie, nielen pri ukoncovani – vtedy to moze byt narocnejsie na pamat/vykon, to neviem.
To ze to nie je problem OS, v tomto pripade tak celkom pravda nie je, kedze cely Android je postaveny na Jave a programator nema velmi na vyber. Ale mas pravdu.
Co je vsak zaujimavejsie, ze programatori vymenili pohodlnost na ukor HW narokov za testovanie, odladovanie a pod. Ano, je lahsie a lacnejsie navysit RAM ako platit ( stravit ) cas testovanim. Lenze sam isto uznas, ze software-ova optimalizacia uz pri takom vyhladavani spravi o dost viac ako navysenie HW. Takze tolko moj nazor.
programator ma na vyber. Daju sa pisat aj Ckovske aplikacie… Samozrejme nejake javovske minimum tam musi byt, ale vies napisat drvivu vacsinu aplikacie v cistom C alebo C++. Je tam bridgde medzi javou a Ckom, NDK, (aj Java mimo Androidu, normalna Java od Sun pouziva JNI -> Java Native Interface). Dokonca je vela aplikacii, ktore to vyuzivaju, napriklad vsetky postavene na engine Unity. Resp vo vseobecnosti vsetky 3D hry, benchmarky a podobne, ostatne veci vyuzivajuce 3D grafiku
that said, pre programovanie aplikacii typu dropbox, ci gmail je ciste Cko/C++ hnusnost hnusna, v zmysle, nemas taky support roznych funkcnosti, ktore sa cez Javovske SDK robia jednoducho -> napriklad prechod medzi dvoma obrazovkami atd. Cize development costs su vyrazne nizsie.
Navyse pre programatora je vyhoda nemusiet sa starat o spravu pamate, je to omnoho pohodlnejsie, aj ked to prichadza za cenu horsieho vykonu. Vacsina aplikacii si totiz nepotrpi na dobrom performance a procaky a RAMky sa stale zlepsuju.
Daju sa apky robit aj v QTckach, co je C++kovy framework, ktory povodne vytvorila Nokia, dost kvalitny framework, multiplatformovy, ktory riesi do vyznamnej miery spravu pamate velmi pohodlnym sposobom. Ale stale je lahsie pouzivat javovske SDKcka, cim navyse aplikacie ziskavaju typicky androidovsky vzhlad, co je pozitivne UX -> uzivatelia vidia na obrazovke to, co ocakavaju, vzhladom na skusenosti z inych aplikacii.
Cize zhrnutie, programator volbu ma, ale existuje vela dovodov, preco je vyhodnejsie zvolit Javu za cenu horsieho performance
Teda suhlasis s tym, co som pisal ja…nic viac a nic menej. Aj takej linux komunite vznikaju vseliake pure riesenia, kde su obmedzovani aj poctom riadkov pouziteho kod a pod, pretoze chcu rozbehat rozne veci na slabom HW.
suhlasim v tej miere, ze vybrat si Android SDK je vhodnejsia a menej bolestiva volba pre mnohe aplikacie. Zaroven ale na vyber je. A ako som spomenul, obrovske mnozstvo aplikacii to aj vyuzivaju -> napriklad vsetko s 3D grafikou je takmer ciste C/C++
Na tvoje komenty k tejto problematike som čakal :).
Nie som síce tiež odborník ale podľa mňa má na to vplyv aj to že iOS používajú iba zariadenia Apple. Tým pádom sa dá systém jednoduchšie odladit. Pričom Android používajú tisícky modelov mobilov takže musí byť univerzalnejsi a preto treba naň viac výkonu. Ale to jw len môj názor
ma to svoj vplyv. Napriklad vyrobcovia musia stale pisat svoje drivery pre vlastne hardverove komponenty -> fotaky, senzory, vlastne procaky atd. Niektori maju kvalitnejsich koderov ako ini… Niektori sa musia spoliehat na third party implementacie. Ale ma to mensi vplyv ako garbage collection v spojeni s multitaskingom
Uprimne ja mam xperia x10 mini so 128 mb ram a bezia mi apps dost plynulo :) System si vzdy naalokuje co najviac sa mu da a v pripade ked je treba uvolni.
No tak to by som chcel vidieť tú plynulosť :) . Neber to ako narážku alebo provokáciu, fakt si neviem predstaviť plynulý android na 128 MB RAM :) . Predsa len v porovnaní s Xperiu Z3 to musí byť obrovský rozdiel.
ak tam má nejaký tweaknutý android 2.x, tak prečo nie :)
Mam tam original android 2.1, kedze novsi sa uz pre xperiu nevydal. Ide o to co pustas. Samozrejme citit napr. pri viacero heavy ram appkach, ze to je malo (skype atd.), ten system si s tym ale zatial vzdy poradil. Phone sa neseka atd. (sem tam clovek ale dlhsie caka, to je pravda). Urcite veci ako napr narocnejsie hry atd. na tom samozrejme nespustim. Ak ale pouzivam ten phone len na telefonovanie, whatsapp skype a este par veciciek tak nemam s nicim problem. Nedavno kamos porovnaval iPhone 4 s tym mojim a bol sokovany, ako plynulo reaguje :D
ja mam xperiu mini pro (sk17i) a tiez potvrdzujem, ze to facha stabilne a svizne :-) je vsak pravda, ze don nic neinstalujem :) na to mam iny telefon s iOS :-D
Seste som daroval moj stary xperia x10 mini pred 2 rokmi a stale ho ma. Potvrdzujem to tvrdenie o plynulosti. Android 2.1 skutocne fici totalne plynule na tom malom zmrdovi. Je to vsak aj vdaka nizkemu rozliseniu (graficky cip sa pri takom rozliseni skrabe na riti). Je to skutocne sikovny maly a svizny telefonik, ktory sa zmesti aj do podprsenky :)
zaujimave ale je, ze windows phone tiez pracuje s “kolekciami odpadu” a staci mu 512 mb ram … takze asi tento clanok bude riadna hlupost :-)
žeby to bude tým že C# nemá taký tragický garbage colection?
neviem
neda sa to takto zjednodusit, obe platformy maju neustale sa skvalitnujuci garbage collection a neda sa povedat, ze ten od Microsoftu je lepsi. Mimochodom, historicke okienko, C# a jeho garbage collection je silno inspirovany Javou, povodne aj Microsoft chcel pouzivat Javu, ale kvoli licencnym preniciam napokon museli pouzit vlastny nastroj, takze tak nejak vznikol C#… To API je vsak silno podobne, aj syntax.
spravny postreh. Este do toho vstupuje dalsi faktor -> vo WP ti v dany okamzik moze bezat iba jedna aplikacia. Na pozadi podporuje iba niekolko typov serviceov, ktore sa ale nepouzivaju az tak casto -> ci uz su to download/upload manazer, prehravanie hudby atd.. Velmi podobne funguje iOs. To vyznamne znizuje pocet procesov pre garbage collection.
Multitasking Androidu je jeho velka vyhoda a zaroven velka slabina. Umoznuje vytvarat aplikacie, ktore su na iOs a WP nemyslitelne a to uzivatel casto oceni v roznych typoch aplikacie (napr ja pouzivam Gravity Screen Assist). Zaroven vsak to papa viacej pamate.
nie som si istý ale multitasking sa dá na droide vypnúť alebo obmedziť v developer settings > limit procesov na pozadí :)
ale zase, kto by si to takto zložito nastavoval…
v developer settings je dokonca mozne nastavit destroy actiivty hned ako ju uzivatel opusti.. Hej, zlepsi to vykon a zhorsi to pouzitelnost niektorych aplikacii.. Popravde neviem ale aky vplyv to ma na background services..
tak na background services zostáva už len root a 3C Toolbox alebo Greenify
Ahoj, ako tak pozerám tak píšeš celkom múdro to sa ti musí nechať, len tŕň do oka je to skloňovanie… :D serviceov?! napíš služieb… Prepáč, ale musel som to napísať, nedalo mi to :P
sorry, to je defekt z prace ;o)
Tak to potom ospravedlňuje :D
stačí doplniť pomlčku(teda asi skôr spojovník) alebo sa dohodnúť, že sa písať nebude. skloňovanie nepreložených cudzých slov …stále lepšie napísať service(-)ov než služieb, lebo pod tým si asi nikto nepredstaví o čo vlastne ide
A ako teda zvláda manažovanie pamäte iOS? Asi to nebude java-style garbage collector.
nie, iOs aplikacie sa programuju v Objective C, co je nadstavbou Cka. Programator musi spravu pamate riesit sam. Nastastie v najnovsich verziach Objective C je zavedeny Automatic Reference Counting a kopec ritebôlu tym Apple odstranil; Programator nemusi nutne pisat vyslovene kod, mazuci pamat, ‘kod’ je vlozeny do programu v case kompilacie. Je to aj omnoho spolahlivejsie, ako v casoch, ked ten kod musel pisat programator sam a casto tak v kode zanechal memory leaky… Do Javy sa toto vsak neda tak lahko zaviest. Objective C uz od velmi davna vyuzival koncept reference countingu, ktory sa vyuzival aj pri manualnom uvolnovani nepotrebnej pamate a iba ho automatizoval v kompilatore. Java takyto system nikdy nemala a teraz by to uz bolo dost komplikovane implementovat.
ritebôľ :D :D to začnem používať
Az na to ze Android Javu nepouziva.. ale ok :) GC ale pouziva
ma virtual machine, ktoreho implementacia s java virtual machineom bola tak podobna, ze Oracle ich zazaloval kvoli licenciam ;-)
samozrejme na tom nepustis typicku javacku aplikaciu, ale pre vsetky vyvojarske ucely je to proste java, len s inym VM
Java je jazyk a android aplikacie sa v nom pisu bezne … android nepouziva JVM pretoze ma napisany vlastny (Dalvik a teraz ART) ktory sa ale v zasadnych otazkach znacne podoba na JVM
mám “len” 1,5GB ram a odkedy mám kitkat (CM11), nikdy sa mi nestalo, že by som zaplnil celu ram, maximálne tak do 1GB
ale predtým s 4.2.2 Touchwizom som už musel párkrát reštartovať…
takže je to aj o optimalizácii Androidu
Tak CM11 nemôžeš porovnávať so stock androidom, kedže stock android je optimalizovaný asi ako ja mám vyšportované telo :D
Na CM11 mi uplne stačí 1GB ram a mám stále volno cca 500MB ram, čo mi postačuje na messenger + whatsapp. Nič iné na mobile nepoužívam…
A to je dobre, že ti nezaplní celú RAM? Neznamená to náhodou, že kitkat, nevie využiť, to čo má k dispozícii? Načo tám máš teda tú RAM, keď je nevyužitá? :D
pocital som to bez cache, s cache mi zostane volnych len cca 30 MB :)
Verzia KitKat a neskoršie boli práve kvôli využívaniu pamäte prerobené, už sa tak intenzívne nerobí preloading aplikácií, takže nie, nie je to chyba. KitKat bol prerobený tak, aby v pohode fungoval aj na 512MB RAM. Treba viac študovať ;)
Proč developeři nepochopili, že můžou používat nástroje díky nimž pracuje Visual C i na androidu např. http://www.apportable.com/
casto je to spojene s drahymi licenciami a musis sa casto uspokojit s polovicatymi rieseniami. A optimalizacia niekedy byva tiez problem, v zavislosti od pouzitej platformy(napr tie hrozy typu Phonegap ;o) )
Visual C? V tom odkaze sa spomína Objective C a XCode…
haha ;o) mas pravdu, to neni Visual C :-D
Vysvetlí mi niekto jednu vec. Výrobcovia stále zvyšujú RAM. No ja som si všimol, že neustále tie aplikácie žerú pamäť RAM, resp skôr systém. Ak mám na dvoch rozdielnych zariadeniach rovnaké aplikácie a na jednom zariedení mám 1 GB ram a na druhom 3GB, tak v oboch prípadoch zariadenie spotrebováva až okolo 80 percent z celkovej pamate. Ak budem mať 8GB ram tak myslím, že výsledok bude rovnaký a to že 6GB ram mi zariadenie bude spotrebovávať.
bohuzial, toto tvrdenie nie je spravne. Resp ak by bolo zalozene na empirickom pozorovani, tak si musel urobit niekolko chyb v pozorovani. Ten isty system, s inym mnozstvom dostupnej RAM by po nabootovani zaberal inu percentualnu cast celkovej RAM. To je holy fakt. S najvacsou pravdepodobnostou hovoris o dvoch odlisnych androidovych zariadeniach (mozno aj odlisny vyrobca), kde to suvisi s mierou softverovej upravy od vyrobcu. A taktiez poctu spustenych aplikacii. Mozno si to neuvedomujes, ale priamo po nabootovani sa mnoho spustenych aplikacii na pozadi spusta ako tzv service, aby mohli napriklad sledovat rotaciu a pohyb zariadenia, prehravat hudbu, ukazovat ti notifikacie a podobne. V neposlednom rade medzi beziace aplikacie patria tiez live wallpapers, ci widgety…
Pravdou ale je, ze ked ak by si mal 8GB ram, tak by si system hned po nabootovani odhryzol mozno aj 6GB. Charakteritikou Androidu je to, ze sa snazi sam nejak “inteligentne” obsadzovat pamat pred tym, nez danu aplikaciu spustis. Podla mna si teda system zozerie kolko moze.
Vysledkom je, ze po nabootovani som mal spustenych XY kofotin, ktore ma absolutne nezaujimali. Nasledne, ked som spustil aplikaciu, ktoru som chcel spustit JA, tak sa muselo vyhadzovat z pamate, kedze volnej pamate uz vela neostalo => lagy, lagy, lagy.
Aj preto som dnes statnym majitelom WP, ktory sa neznazi “rozmyslat namiesto mna”.
to nieje pravda zeby ti zožral 6GB ram…zožerie tolko koľko potrebuje preto aby bežal plynulo…ak je RAM menej, musi sa uskromniť a nechať aspon 20%
Aj máš pravdu aj nemáš inak…
Ano, kúpiš telefón s 0,5GB ram alebo 1GB ram, máš 80% použitých, a čistenie pamäti app-ky bud dočasne alebo ešte spomalujú fón lebo stále znova musí telefón od Widgetov až po menu načítať. Toto som aj ja spozoroval. Tu ide skôr o výrobcu (Samsung, ZTE, atď…), svoje blbosti naplnia ako keby naschvál na 80% a pritom si len telefón naštartoval…
Neni chyba androidu, lebo iný ROM programátory ako Cyanogen, MIUI… atď vedia spraviť pod 50%???
Tu robia chyby výrobcovia telefónov, Samsung Galaxy 3 mám a takisto problém s pamäťou dakedy… Brat čo má XIAOMI 1 rok nemal problém že mal naplnenú RAMku.
je to ako s windowsom,hoci je to linux, ale toto maju spolocne…ci mas 1GB ram alebo 2GB tak mas vytazenost ramky okolo 70-80% a zvysok nechava system uzivatelovi aby mohol cokolvek zapnut…pricom samostny system potrebuje omnoho viac na to aby tej ramky mohlo byt viac voľnej a aby bezal plynulo…napr pri 4GB uz je obsadenost okolo 40% alebo max 50% podla toho co pouzivas…teda sa da vysvetliť ze ten OS potrebuje LEN PRE SEBA 2 GB…teda vykonovy rozdiel medzi 1GB> 2GB> a 3GB je vidieť…ale dajme tomu ze medzi 3 a 4 GB uz nieje taky velky rozdiel, pretoze system sa uz nasytil, kdežto pri 1 a 2 GB sa musel uskromniť a nechať aspoň 20% volnych….na tych 3 a 4GB sa uz pohodlne mohol rozložiť tak ako potrebuje aby išiel plynulo…to mas ako s pocitacmi
to nieje pravda zeby ti zožral 6GB ram…zožerie tolko koľko potrebuje preto aby bežal plynulo…ak je RAM menej, musi sa uskromniť a nechať aspon 20%.