2010-12-02 9 views
3

Ich habe eine Anwendung, die eine Reihe von Bitmaps erstellt. Ich halte diese Bitmaps in SoftReferences, um nicht zu viel Speicher zu haben. Ich möchte, dass die Größe des Heapspeichers auf die maximalen 16 MB anwächst, bevor er mit dem Sammeln meiner SoftReferences beginnt. Die SoftReferences werden jedoch sehr eifrig gesammelt, bevor der Heap maximal vergrößert wird. Gibt es überhaupt eine Aufforderung, die Referenzen weniger begierig zu sammeln? oder um den Heap manuell maximal zu vergrößern? Möglicherweise eine Möglichkeit, die Anwendung nur mit 16 MB zu starten?Android Heap Größe und SoftReferenzen

Antwort

3

Es gibt derzeit keine Möglichkeit, das SoftReference-Erfassungsverhalten zu ändern.

Ich bin mir nicht sicher, was Sie meinen, indem Sie "manuell den Haufen bis zum Maximum wachsen lassen". Wenn diese Instanzen der Bitmap-Klasse sind (im Gegensatz zu einigen benutzerdefinierten Bitmap-Implementierungen), werden die Pixeldaten tatsächlich auf dem systemeigenen Heap gespeichert, verwenden jedoch einen lästigen "externen Zuweisungs" -Buchtrick, der die Situation weiter verkompliziert. (Bemerkenswerterweise wird der Speicher durch einen Finalizer und nicht durch den GC freigegeben, und die Finalisierer müssen nach Abschluss des GC in einem separaten Thread ausgeführt werden. Es ist möglich, Bitmaps zuzuordnen, bis der Speicher voll ist Speicher vor dem Werfen eines OOM-Fehlers.)

+0

von „wachsen Heap max“ Ich war für einen Weg der Hoffnung beim Start zu erzwingen Zuweisung von 16mb für meine App. etwas Ähnliches wie: "-Xmx16m", von Java. – ab11

+0

Das begrenzt die maximale Größe des Heapspeichers, die derzeit ausgeführt wird (das Android-App-Framework übergibt genau das in die VM). Haben Sie "-Xms16m" gedacht, was würde die Anfangsgröße festlegen? Diese spezielle Option wird wegen der externen Zuteilung nicht ganz das machen, was Sie wollen. Es gibt eine versteckte Methode (wurde versehentlich zuerst entlarvt, wurde später versteckt) mit dem Namen dalvik.system.VMRuntime.setMinimumHeapSize, die grob tun sollte, was du willst, aber es ist nur ein Hinweis und auf jeden Fall wird wahrscheinlich in der Zukunft verschwinden. – fadden

Verwandte Themen