2010-11-18 7 views
3

Meine Frage mag naiv aussehen, aber ich weiß nicht, wie ich sie richtiger formulieren soll. Das Problem ist, dass ich große Arrays einfacher Art in meiner Anwendung erstelle und verwende. Und ich bekomme Fehler wie:Warum hat meine Anwendung weniger Heapspeicher als andere?

ERROR/dalvikvm-heap(1763): Out of memory on a 7907344-byte allocation. 

Ja, es ist groß genug, aber Task-Management-Tools behaupten, dass meine Bewerbung nur 30 MB Speicher verwendet, während andere in der gleichen Anwendung 50MB Zeit und sogar 110MB (haben einmal gesehen) und Es gibt immer noch 190 MB freien Speicher im System (nicht Systemanwendungen, nur andere gewöhnliche Anwendungen, die ich installiert habe). Wenn alle Anwendungen beim Start dieselbe Heap-Größe erhalten, wie können sie so groß werden?

+7

Möglicherweise ein Problem, einen ausreichend großen zusammenhängenden Speichertrank zu finden. – Anthony

+0

Warum möchten Sie so viel an erster Stelle zuweisen? Lass mich raten: nicht gepufferter Stream – apps

+0

Ich benutze es um DrawBitmap auf einem Canvas zu zeichnen. Der Grund dafür ist, dass die Bitmap im nativen Code, auf den JNI zugreift, generiert und ständig geändert wird. –

Antwort

4

Die maximale Heap-Größe einer Android-Anwendung hängt von dem Gerät ab, auf dem sie ausgeführt wird. Bei früheren Geräten betrug die maximale Größe des Heapspeichers 16 MB, bei späteren Geräten 24 MB oder 32 MB.

Dies ist eine Eigenschaft der Dalvik VM auf jedem Gerät und kann nicht geändert werden (ohne Android aus der Quelle neu zu erstellen).

Sie können die "pro-Anwendung Speicherklasse" mit ActivityManager.getMemoryClass() abfragen, die eine Zahl zu sein scheint, die nicht völlig mit der Heap-Größe verwandt ist.

Anwendungen können Speicher verwenden, der nicht auf dem Heap ist, aber 100 + MB scheint eine überraschend große Menge.

Wenn Sie mehr über die Analyse der Speichernutzung auf Android herausfinden möchten, können Sie nicht besser als this Stack Overflow answer by Dianne Hackborn, der einer der Android-Entwickler bei Google ist. Kurz gesagt, es ist sehr schwierig, die Speichernutzung zu analysieren, und Sie sollten alle Zahlen nehmen, die Sie mit einer Prise Salz haben.

-1

Haben Sie versucht, Ihre Heap-Größe zu konfigurieren? Verwenden Sie die folgenden Optionen, um dies zu tun.

-Xms gesetzt anfängliche Java Heap-Größe -Xmx maximale Java-Heap-Größe

gesetzt, um mehr Hilfe laufen java -X

Beispiel zu erhalten: java -Xms20m -xMX100m -cp. MyMain

Viel Glück.

-1

Wir alle wissen, dass Java standardmäßig Garbage Collector System hat, aber auf einer bestimmten Ebene müssen wir einige Objekte löschen oder löschen.

Sie können auch die Heap-Größe für die JVM festlegen oder konfigurieren.

Verwandte Themen