Android-Heap-Größe auf verschiedenen Telefonen/Geräten und Betriebssystemversionen
Lesezeit: 8 Minuten
Eric Nordvik
Weiß jemand, ob die Heap-Größe auf Android-Telefonen ein konstanter Wert ist, je nachdem, was in der Betriebssystemversion eingestellt ist, oder ob dies eine Einstellung ist, über die die Telefonhersteller entscheiden können?
Ist die Heap-Größe proportional zur RAM-Größe des Telefons?
Ich habe nur Artikel gefunden, in denen Leute sagen, dass die Heap-Größe einer Anwendung 16 MB beträgt. Allerdings sind diese Artikel schon etwas älter. So wie ich es sehe, variieren die Heap-Größen bei einem bestimmten Modell von etwa 20 MB bis zu 24 MB. Dieses Telefon hat 768 MB RAM.
wenn der 30mb total heap to app ist. und wenn nur 7 MB zugewiesen sind und die verbleibenden frei sind, kann der Arbeitsspeicher von anderen Apps verwendet werden?
– Chaitanya Chandurkar
1. April 2013 um 18:26 Uhr
Spatialist
Einige weitere Geräteinformationen, die aus build.prop-Dateien extrahiert wurden (adb -d pull /system/build.prop):
Asus Transformer Prime TF201 (4.1.1) = 5/48/256 MB
Nexus 10 (4.4.3) 16/192/512 MB
Erwähnenswert ist, dass das Manifest-Anwendungsattribut android:largeHeap="true" scheint den verfügbaren Heap-Speicherplatz vom Wert “heapgrowthlimit” auf den Wert “heapsize” zu erhöhen. Dies wird jedoch je nach Gerät variieren.
– dokkaebi
8. Januar 2013 um 19:07 Uhr
Aus einem Beitrag in xdadeveloper von h2g2: heapstartsize ist die Größe eines neuen Dalvik-VM-Heaps bei der Initialisierung. heapgrowthlimit ist die Größenbeschränkung für normale Dalvik-VM-Heaps. heapsize ist die Größenbeschränkung für Android-Apps, die android:largeHeap=true in ihrem Anwendungsmanifest angeben.
– Yuntao
4. Juni 2013 um 20:32 Uhr
in “Google Galaxy Nexus (4.3) = 8/96/256 MB”, warum gibt es mehrere Heap-Größen? 8? 96? 256?
– Sam YC
7. Februar 2014 um 8:05 Uhr
Diese Werte sind heapstartsize, heapgrowthlimit, heapsize. Sehen jeffmixon.com/… Für mehr Information.
– Spatialist
7. Februar 2014 um 12:18 Uhr
CommonsWare
Weiß jemand, ob die Heap-Größe auf Android-Telefonen ein konstanter Wert ist, je nachdem, was in der Betriebssystemversion eingestellt ist, oder ob dies eine Einstellung ist, über die die Telefonhersteller entscheiden können?
Technisch gesehen ist dies eine Einstellung, über die die Telefonhersteller entscheiden können. Android ist Open-Source. Ich erinnere mich nicht an das Compatibility Definition Document, in dem die Anforderungen an die Heap-Größe aufgeführt sind, obwohl ich in letzter Zeit nicht nachgesehen habe.
Ist die Heap-Größe proportional zur RAM-Größe des Telefons?
Nein, es basiert eher auf der Bildschirmauflösung, da Bildschirme mit höherer Auflösung dazu neigen, größere Bitmaps zu manipulieren, also gibt Google Empfehlungen zur Heap-Größe, an die sich die Gerätehersteller hoffentlich halten werden.
Ich habe nur Artikel gefunden, in denen Leute sagen, dass die Heap-Größe einer Anwendung 16 MB beträgt.
StackOverflow wird gesucht [android] "heap size" taucht diese Antwort auf.
Ja, die Antwort habe ich auch gesehen. Ich habe mich nur gefragt, ob es dazu Richtlinien gibt und ob der RAM etwas damit zu tun hat. Ich denke, wir müssen nur hoffen, dass sich die Hersteller an die Google-Richtlinien halten. Danke für deinen Beitrag. Ich habe diese Frage gestellt, weil ich eine Zunahme von OutOfMemory-Problemen für ein bestimmtes Telefon festgestellt habe.
– Eric Nordvik
18. März 2011 um 13:30 Uhr
Carl
Nicht nur Telefonhersteller, sondern jeder, der eine Version des Android-Betriebssystems erstellt, kann die maximal zulässige Heap-Größe basierend auf den spezifischen Anforderungen seiner Geräte angeben. Einige Android-Roots, wie CyanogenMod, erlauben es dem Benutzer sogar, die Heap-Größe selbst als Einstellung auszuwählen.
Sie können die maximal zulässige Heap-Größe mit der Methode ermitteln
Runtime.getRuntime().maxMemory();
Weitere Informationen zu diesem Thema finden Sie hier.
Wenn Ihre App normalerweise mehr als 16 MB Heap benötigt, wäre ein empfohlener Ansatz, eine Mindestversion des Betriebssystems in Ihrem Manifest festzulegen, die sicherstellt, dass die überwältigende Mehrheit derjenigen, die Ihre App herunterladen, mindestens die Menge hat, die Sie benötigen, und die Sie dann finden eine Möglichkeit, Ihre Funktionalität elegant so herabzusetzen, dass Ihre Heap-Anforderungen nach Bedarf auf ein Basisniveau von 16 MB für die kleine Anzahl von Benutzern mit weniger als Ihrer optimalen Menge an Heap reduziert werden, die durch dieses Sieb fallen.
Hier sind einige Abbildungen, die die Zuordnung des Telefon-RAM zur Betriebssystemversion zeigen (basierend auf dem aktuellen, nicht originalen Betriebssystem). Ich glaube, dass ein Telefon mit mindestens 1 GB RAM fast immer mehr als 16 MB Heap hat. Beachten Sie, dass die Prozentsätze hier für die Anzahl der Telefone gelten Modelle Unterstützung des angegebenen Speichers, nicht der gesamten verwendeten Telefone, die bei bestimmten Modellen ziemlich verzerrt sein können. Diese Zahlen wurden durch Einstecken von Eingaben in den folgenden Telefonfinder (der 1500 Android-Telefonmodelle umfasst) erhalten und sind daher nur grobe Zahlen: http://www.gsmarena.com/search.php3
Prozentsatz des Telefons Modelle mit mindestens 1 GB RAM, nach aktueller Betriebssystemversion (nicht Version beim Start):
Phones running Percent of models having at least 1GB of RAM Percentage of all models
4.4 and up 100 percent 1.5
4.3 and up 100 percent 2.9
4.2.x and up 74 percent 18.7
4.1.x and up 71 percent 37
4.0 and up 62 percent 60
2.3.x and up 57 percent 71
2.2 and up 44 percent 93
2.1 and up 44 percent 97
ALL OS VERSIONS: 41.5 percent 100
Wie würde eine Mindestversion des Betriebssystems helfen? Sogar KitKat 4.4 wird jetzt für Low-RAM-Geräte optimiert.
– NoBugs
2. Januar 2014 um 14:04 Uhr
@NoBugs: Leider bietet der Google Play Store derzeit keine Möglichkeit, basierend auf der Heap-Größe zu filtern, welche Geräte Ihre App sehen können, sodass weniger genaue Kriterien verwendet werden müssen, um diesen Effekt für die meisten Benutzer zu erzielen. Im Allgemeinen befinden sich spätere Betriebssystemversionen auf Geräten mit größeren Heap-Größen. Die Angabe einer höheren Version sollte also dazu führen, dass die meisten Geräte mehr verfügbaren Heap haben. Wenn Ausnahmen von dieser Regel auftreten, sollte die App ordnungsgemäß herabgesetzt werden.
– Carl
2. Januar 2014 um 23:52 Uhr
Keine Fehler
Sie sollten in der Lage sein, die maximale vm-Heapsize zu überprüfen mit:
getprop dalvik.vm.heapsize
am Android-Terminal (Connectbot oder Adb-Shell usw.). Es ist auch möglich, Read-Write neu zu mounten und die Heap-Größe in der build.prop-Datei festzulegen. (Stellen Sie sicher, dass Sie die Wiederherstellung installiert haben, damit Sie sie zurücksetzen können, wenn Sie sie versehentlich zu klein machen, sie startet nicht).
Das „VM-Budget“, das eine Anwendung verwenden darf, ist von Gerät zu Gerät unterschiedlich. Tablets ermöglichen in der Regel ein größeres Budget als Telefone.
Hier sind einige VM-Budgetgrößen, die ich für verschiedene Geräte gefunden habe.
G1 = 16 MB
Droide = 24 MB
Nexus One = 32 MB
Xoom = 48 MB
GalaxyTab = 64 MB.
(Hinweis: Wenn Sie etwas anderes gefunden haben, lassen Sie es mich wissen)
HTC Desire (v 2.3.3) = 32 MB Samsung Galaxy R GT-I9103 (v 2.3.5) = 64 MB
– Spatialist
30. März 2012 um 9:00 Uhr
Gemeinschaft
Es gibt tatsächlich einen definierten minimalen Anwendungsspeicher, der von der Bildschirmgröße und -dichte abhängt:
Mobilgeräte haben typischerweise eingeschränkte Systemressourcen. Android-Geräte können nur 16 MB Speicher für eine einzelne Anwendung zur Verfügung haben. Das Android Compatibility Definition Document (CDD), Abschnitt 3.7. Virtual Machine Compatibility gibt den erforderlichen minimalen Anwendungsspeicher für verschiedene Bildschirmgrößen und -dichten an. Anwendungen sollten so optimiert werden, dass sie unter dieser minimalen Speichergrenze ausgeführt werden. Beachten Sie jedoch, dass viele Geräte mit höheren Grenzwerten konfiguriert sind.
Aber wie andere gesagt haben, entscheidet jeder Gerätehersteller über den tatsächlichen Wert für das Gerät, sodass er größer sein kann (aber nicht kleiner).
Geräteimplementierungen mit Bildschirmen, die als klassifiziert sind mittlerer oder niedriger Dichte MUSS Dalvik für die Zuweisung konfigurieren mindestens 16 MB Arbeitsspeicher
zu jeder Anwendung. Geräteimplementierungen mit Bildschirmen, die als klassifiziert sind High-Density oder Extra-High-Density MUSS Dalvik für die Zuweisung konfigurieren mindestens 24 MB Arbeitsspeicher zu jeder Anwendung. Beachten Sie, dass Geräteimplementierungen MÖGLICHERWEISE mehr Speicher als diese Zahlen zuweisen.
Für die modernen Versionen gibt es stattdessen eine Tabelle, in der es auf die Bildschirmdichte usw. ankommt:
Beispielzeile aus dieser Tabelle für Android 4.2:
klein / normal / groß und xhdpi-Dichte: 64 MB
Extrahieren Sie für Android 6:
kleines/normales xhdpi: 80 MB
klein/normal xxhdpi: 128 MB
kleine/normale xxxhdpi: 256 MB
In diesen Dokumenten gibt es auch eine Tabelle für die anderen Versionen von Android 2.x, 4.x, 5.x und 6 (siehe CDD-Link oben).
Beziehen Sie sich auf diesen Google-Link, um Bildschirmdichten usw. für bestimmte Geräte leicht zu finden: https://design.google.com/devices/
HTC Desire (v 2.3.3) = 32 MB Samsung Galaxy R GT-I9103 (v 2.3.5) = 64 MB
– Spatialist
30. März 2012 um 9:00 Uhr
Manibal Sinha
Diese Daten funktionieren bei mir. Select Emulator Tablet Android TV RAM 1536 MB VM HEAP 16 MB Interner Speicher 800 MB Vom Studio verwaltet 100
9238100cookie-checkAndroid-Heap-Größe auf verschiedenen Telefonen/Geräten und Betriebssystemversionenyes
wenn der 30mb total heap to app ist. und wenn nur 7 MB zugewiesen sind und die verbleibenden frei sind, kann der Arbeitsspeicher von anderen Apps verwendet werden?
– Chaitanya Chandurkar
1. April 2013 um 18:26 Uhr