Uutta sivustolla

Tervetuloa takaisin!Edellisen käyntisi jälkeen Puhelinvertailuun on tullut .

Katso tapahtumat viime käyntisi jälkeen.

Miksi ihmeessä iPhonelle riittää 1GB muistia ja Android tarvitsee 3GB?

19
Puhelinvertailu

Miksi ihmeessä iPhonelle riittää 1GB muistia ja Android tarvitsee 3GB?
Yksi suurimpia ihmettelyn aiheita syksyisen iPhone 6-lanseerauksen yhteydessä oli, että Apple piti edelleen iPhonen RAM- eli käyttömuistin määrän yhdessä gigatavussa.

Samaan aikaan kuitenkin Android-huippumallit ovat pikkuhiljaa nostaneet RAM-muistin määrän vuoden takaisesta kahdesta gigatavusta kolmeen gigatavuun. Kysymys kuuluukin: Miksi Android vaatii kolme kertaa enemmän muistia toimiakseen sulavasti?
Vastaus tähän löytyy Quorassa julkaistusta varsin perusteellisesta vastauksesta: Android käyttää Javaa ja Javassa on mekanismi, jota kutsutaan garbage collectoriksi. Kyseinen mekanismi kierrättää käyttömuistia, joka vapautuu suljetulta sovellukselta. Ongelmaksi muodostuu se, että jos suljettu sovellus pyöriessään vaati vaikkapa 200 megatavua muistia, Javan garbage collector vaatii 3-4x tuon määrän muistia "kierrätysprosessinsa" aikana toimiakseen mahdollisimman sujuvasti. Eli vaikka käytetty ohjelma tarvisti vain 200 megatavua muistia, sen sulkeminen vaatii 600-800 megatavua muistia, jos muistin kierrätyksen halutaan tapahtuvan mahdollisimman nopeasti. Jos tuota vaadittua muistitilaa ei ole saatavilla, gargabe collectorin toiminta hidastuu merkittävästi, joka taas "tahmauttaa" koko järjestelmää kunnes muisti saadaan kierrätettyä.

Android Java garbage collector memory recycling
ohessa tilannetta havainnollistava kaavio, lähde: Quora


iOS:ssa muistin vapautus toteutetaan eri tavalla, jolloin muistia ei vaadita kuin sen verran mitä varsinaiset käynnissä olevat ohjelmat vaativat.
Puhelinvertailun Nopeat

"Nopeat" ovat nopeita löytöjä Internetin syövereistä, jotka ovat meidän mielestämme jollain tavalla kiinnostavia, hauskoja tai ajankohtaisia. Ne eivät kuitenkaan ole (välttämättä) merkittäviä aiheeltaan tai eivät sovi tyypilliseen uutistuotantoomme aiheensa puolesta, joten emme kirjoittaneet aiheesta pidempää uutista, vaan julkaisemme löydöksemme nopeana video-, kuva- tai linkkivirtana. Tämä osio on kokeellinen ja toivommekin näistä "nopeista" nostoista palautetta teiltä, käyttäjämme.

Kommentit (19)

Datanen
Datanen

2

Ei Android tarvitse noin paljon keskusmuistia. Puhelinten valmistajat laittavat noin paljon keskusmuistia houkutellakseen asiakkaita. Tosiasiassa jo 1 Gt keskusmuistia riittää peruskäyttöön.

Vastaa
dRD
dRD

3

Lainaus, alkuperäisen viestin kirjoitti Datanen:

Ei Android tarvitse noin paljon keskusmuistia. Puhelinten valmistajat laittavat noin paljon keskusmuistia houkutellakseen asiakkaita. Tosiasiassa jo 1 Gt keskusmuistia riittää peruskäyttöön.

Peruskäyttöön, toki, mutta tuo tilastodata osoittaa kuitenkin selkeästi sen, että käytettyjen appsien vaatima muistimäärä x 4 pitäisi olla laitteessa, jotta se toimisi niin nopeasti kuin se vain voi.

Vastaa
dRD
dRD

4

Lainaus, alkuperäisen viestin kirjoitti mcmopo:

Java... Miten tuo takavuosien kirosana kummittelee vieläkin.

Käytännössä kaikki Android-sovellukset koodataan Javalla, Googlen tarjoamat Androidin SDK:t ovat saatavilla vain Javalle.

Vastaa
R4ndom1
R4ndom1

5

Lainaus, alkuperäisen viestin kirjoitti mcmopo:

Java... Miten tuo takavuosien kirosana kummittelee vieläkin.

Java käytetään vielä erittäin paljon. Tuon garbage collectorin etu on siinä, ettei ohjelmoijan tarvitse huolehtia milloin varataan ja vapautetaan muistia, vaan garbage collector huolehtii siitä. Eli javassa ohjelmoijan ei tarvitse päästä käsiksi niin tarkasti muistiin, jolloin ohjelmointi on paljon helpompaa, tulee vähemmän virheitä ja vähemmän tietoturva-aukkoja. Ilmeisesti kuitenki androidissa on mahdollista kirjoittaa natiiveja kirjastoja, joissa on mahdollista käyttää manuaalista muistinhallintaa.

Vastaa
dRD
dRD

6

Lainaus, alkuperäisen viestin kirjoitti R4ndom1:

Ilmeisesti kuitenki androidissa on mahdollista kirjoittaa natiiveja kirjastoja, joissa on mahdollista käyttää manuaalista muistinhallintaa.

Juu, Android NDK:n kautta noiden tekeminen on mahdollista, mutta hyvin, hyvin harvinaista.

Käytännössä kolmenlaisia sovelluksia:

-Javalla kirjoitetut sovellukset (näppituntumalta noin 90..94%)

-Apache Cordovalla (entinen PhoneGap) tai vastaavalla työkalulla webbisivuista tehdyt sovellukset (esim. Androidin Ampparit on tällainen), näitä on tämän uutisen mukaan kaikista Android-sovelluksista 5.4%

-NDK:lla tehdyt sovellukset

Vastaa
Agent_007
Agent_007

7

Puhelimissa tuota muistia eivät sovelluksista oikeasti tarvitse kuin pelit ja selaimet. Molemmat kategoriat ovat Androidilla pitkälti NDK-kamaa, koska sen avulla on mahdollista saavuttaa parempi suorituskyky ja siirrettävyys on parempi eri alustojen välillä (C/C++ -koodilla).

Ja roskienkeruuta on mahdollista käyttää myös iOS:llä vaikka käyttöjärjestelmä ei sitä oletuksena kehittäjille tarjoakaan
http://www.harnixtechnologies.ca/iGC/

IMHO syy miksi iPhoneja myydään pienellä muistimäärällä on se, että Apple haluaa pitää tuotteiden katteet korkeina. Esim. jos ajaa mitään isompia pelejä 512 megatavun muistilla varustetussa iOS-laitteessa niin Xcode kyllä suoltaa ulos memory pressure -valitusta ja laite sulkee taustalla olevien sovellusten varaamia muistialueita pois käytöstä.

Tai jos on selaimessa useampi välilehti auki niin iOS kyllä poistelee ne sieltä, kun jokin muu asia tarvitsee sitä muistia, joka hidastaa monen välilehden surffaamista, kuten Anandtech tuossa iPhone 6 -arvostelussa jo totesi
While iOS' software architecture is more RAM efficient due to manual garbage collection and the use of precompiled binaries, it's quite easy for me to push the phone past the breaking point in Safari. For example, six tabs of common websites for mobile devices cannot consistently be held in memory. If I continuously go through all six tabs, at least one will need to reload. In my first attempt at running this test, Safari crashed as I tried to go through all tabs constantly to keep them in memory. I didn't notice this behavior in the new Moto X, which can do the same test without issue.
http://www.anandtech.com/show/8554/the-iphone-6-review/12

Vastaa
m.j.v
m.j.v

8

Nyt on tehty vääriä johtopäätöksiä, eikä linkattu kuvaajakaan liity otsikkoon. Lyhyesti: Java-ohjelma _ei_ vaadi 3x muistia verrattuna natiivikoodiin. Garbage collection ei myöskään "kasvata ohjelman varaamaa muistia ohjelmaa sulkiessa", kuten tuossa jotenkin kummasti väitetään.

Kuvaajassa on verrattu erilaisia garbage-collection algoritmeja. Koska ohjelmoija itse ei vapauta varattuja olioita, vaan järjestelmä hoitaa sen sopivaksi katsomanaan ajankohtana. Tätä ei kannata tehdä liian usein, koska muuten teho menee turhaan tarkastamiseen. Liian harva tarkastus johtaa jo turhaksi käyneiden olioiden jäädessä muistiin pitemmäksi aikaa kun on tarpeen (tästä tulee tilapäinen RAM-tarpeen lisäys). Suurin osa ohjelmien varaamista olioista on pieniä, joten tarve vaikkapa nelinkertaiselle vapaalle heapille koko on myöskin pientä. Isoja muistilohkoja taas harvoin vapautetaan ja varataan jatkuvasti. Ja mikäli varataan, niin niille yleensä kirjoitetaan oma pool uudelleenkäyttöä varten. Tektissä mainittu tilanne 200MB vs 800MB on absurdi.

Vastaa
sulki (vahvistamaton)

11

Artikkelissa väitetään että ohjelmat pyörivät. Ei minulla ole koskaan pyörinyt.

Vastaa
cm käyttäjä (vahvistamaton)

12

Lainaus, alkuperäisen viestin kirjoitti Datanen:

Ei Android tarvitse noin paljon keskusmuistia. Puhelinten valmistajat laittavat noin paljon keskusmuistia houkutellakseen asiakkaita. Tosiasiassa jo 1 Gt keskusmuistia riittää peruskäyttöön.

No joo, itselläni on vielä toistaiseksi käytössä Samsung Galaxy S3, gigatavu RAM-muistia, Cyanogenmod CM11 pyörii siinä vallan mainiosti, kaikki ylimääräinen "bloatware" poissa. Ei ole kertaakaan käytössä tullut vastaan mitään muistin loppumiseen liittyviä erroreita. Peruskäyttö minulla: musiikin kuuntelu, uutissyötteiden lukeminen, sähköpostin käyttö (Outlook.com app), web-selailu..

Vastaa
j.v.m. (vahvistamaton)

13

Hyviä faktoja. Android ei ole koko elinkaarensa aikana käyttänyt Javaa tai JVM:ää. Alustana on aina toiminut Dalvik, jossa on toki vastaava GC-mekanismi.

GC-mekanimia käytetään juuri siksi, että 3GB RAM maksaa vähemmän kuin innostaa sovelluskehittäjät vahtimaan heapin kokoa.

Vastaa
user_org (vahvistamaton)

14

Tässä 1GB ja 3GB vertaus on vähän sama kuin vertaisi auton istumapaikkojen määrää, mutta sivuutetaan matkustaja määrät.

Vastaa
samfin
samfin

15

Oma mielipide Anroidin suuren muistin tarpeeseen on widgetit ottamatta sen suuremmin kantaa miten ne on tehty.

Jos siis Anroidi käytetään iPohnen tyyliin pelkkiä pikakuvakkeita käyttäen (ei widgettejä) niin puhelin ei lagaa yhtään. Itsellä jokunen wigetti käytössä. Sähköposti ja kalenteri näistä pahimpia niin, kun näytön avaa niin pientä tahmausta usein havaittavissa.

Tämä siis johtuu omien tutkimusten perusteella, että nuo widgetit lataavat aina sisällön uusiksi. Sen kyllä näkeekin, kun nuo lataavat sisällön ja siitä aina pieni tahmaus (tunnetaan myös lagina).

Iphonella ja win luureillahan tätä ongelmaa ei ole, koska eivät käytä noita widgettejä mitä anroidilla käytössä.

Tämä siis yhden miehen kenttätutkimus joten pidätän oikeuden mielipiteen muutokseen. :)

PS. LG G3 3Gigan muistilla

Vastaa
D00mer
D00mer

16

Omassa androidissa on vain 1gb muistia ja sulavasti toimii eikä ole kertaakaan loppunut kesken, moniajokin toimii hyvin. Edellisessä androidissa oli vain 512mb ja sekin riitti, mutta useinmiten moniajo ei, mutta sekin riippui itse ohjelmasta kuin muistin määrästä.

Toki eri asia on jos omistaa jonkun samsungin joka on täynnä bloatwarea :).

Vastaa
Happokala
Happokala

17

"GC is a huge performance problem for developing smooth android applications. At Facebook, one of the biggest performance problems we deal with is GCs pausing the UI thread. When dealing with lots of Bitmap data, GCs are frequent and hard to avoid. A single GC often results in dropped frames. Even if a GC only blocks the UI thread for a few milliseconds, it can significantly eat into the 16ms budget for rendering a frame."

Vastaa
jaska_70
jaska_70

18

Enemmän ihmetyttää miksi kirjoitatte että Applen laitteelle riittää giga muistia?

Mulla on iPad Air ja siinä on siis vain giga muistia. Safari crashaa usein koska muisti loppuu kesken. Ei tarvita kuin muutama tabi auki selaimeen, niin saattaa kaatua. Kokeilkaa vaikka avata Twitter ja selaatte twiitejä lisää muutaman kerran, niin se crashaa. Samoin sen huomaa siitä, että kun on useampi tabi auki, ja vaihdat tabia, niin selain lataa sivun aina uudestaan, kun muisti ei riitä pitää niitä taustalla auki. Samoin se crashaa kun menee esim pakkotoiston foorumille ja koettaa lukea threadejä, joissa on upotettuna videoita.

Kaiken lisäksi, Apple julkaisi uuden iPad Air 2:n, jossa on edelleenkin rupiset giga muistia.. Applen katteilla luulisi olevan varaa laittaa 2 gigaa muistia, jos asiakkaiden käyttökokemus kiinnostaisi enemmän kuin raha. Varsinkin kun Apple ja sen tukijat puhuu HYVÄN kokemuksen tärkeydestä.

Jos ette usko, niin kokeilkaa tai Googlatkaa "ipad safari crash out of memory" tai vastaavaa.

Vastaa
Jonahan
Jonahan

19

Lainaus, alkuperäisen viestin kirjoitti jaska_70:

Enemmän ihmetyttää miksi kirjoitatte että Applen laitteelle riittää giga muistia?

Erilaisesta muistinhallinnasta johtuen, samalla muistista saa eri määrän hyvää irti.

Ei ero kieltämättä ole niin suuri kuin mitä otsikko väittää, mutta eri on ja Applen käyttämällä ARC:lla on tiettyjä ihan mitattavia etuja GC:ta vastaan. 1. Nopeus 2. Pienempi muistinkäyttö 3. Ennustettavuus.

Ja vaikka Applen laitteissa on vähemmän muistia, käytännössä prosessi saa tarvittaessa käyttöönsä sitä paljon enemmän kuin Androidissa. Androidvalmistajilla on aivan käsittämättömän pieniä limittejä prosesseille sallitusta muistinkäytöstä.

http://stackoverflow.com/questions/1867...-an-app-can-use

Lainaus, alkuperäisen viestin kirjoitti jaska_70:


Mulla on iPad Air ja siinä on siis vain giga muistia. Safari crashaa usein koska muisti loppuu kesken. Ei tarvita kuin muutama tabi auki selaimeen, niin saattaa kaatua.

Minulla on iPad 3 ja giga muistia. Safari ei crashaa juuri koskaan. Taustalla olevat tabit voivat tyhjentyä muistipaineessa, joka on kieltämättä joskus vähän ikävää.

Lainaus, alkuperäisen viestin kirjoitti jaska_70:


Kokeilkaa vaikka avata Twitter ja selaatte twiitejä lisää muutaman kerran, niin se crashaa.

Kokeilen kunhan olen kotosalla, mutta ei kai nyt *kukaan* käytä Twitteriä selaimella?! Natiivit appit on keksitty ja ihan syystä.

Lainaus, alkuperäisen viestin kirjoitti jaska_70:


Kaiken lisäksi, Apple julkaisi uuden iPad Air 2:n, jossa on edelleenkin rupiset giga muistia..

iPad Air 2:ssa on kaksi gigaa muistia... Virheelliseen premissiin perustuva ranttaus poistettu.

Vastaa

Kommentoi artikkelia

Pysy aiheessa ja kirjoita asiallisesti. Epäasialliset viestit voidaan poistaa tai niitä voidaan muokata toimituksen harkinnan mukaan.

Haluan ilmoituksen sähköpostitse, kun ketjuun kirjoitetaan uusi viesti.

Keskustelut

Lisää keskusteluja