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
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.)
Es ist ein bekanntes Problem in Andriod. Wenn die VM Softreferenzen sammelt, sammelt sie entweder alle oder keine, obwohl sie "einige" sammeln sollte und nichts sammeln sollte, wenn es genügend freien Heap gibt.
Check: http://code-gotcha.blogspot.com/2011/09/softreference.html
- 1. android - Heap-Größe erhöht sich pro Aktivität
- 2. Heap-Größe Problem in Android Studio
- 3. -Xms: Erste Heap-Größe oder minimale Heap-Größe?
- 4. Neo4j Heap Größe
- 5. Sonar Findbugs Heap Größe
- 6. JavaScript Heap Größe und Chrome Erhöhung
- 7. Android StrictMode und Heap-Dumps
- 8. Regarind einer Heap-Größe Fehler
- 9. . NET-Generation 0 Heap-Größe
- 10. JAVA_OPTS für zunehmende Heap-Größe
- 11. Android - Begrenzung der Heap-Größe auf 16 MB für Testzwecke?
- 12. Android: Wie kann die Heap-Größe zur Laufzeit erhöht werden?
- 13. Android Studio-Heap-Snapshot-Analysegerät - Was bedeutet "dominierende Größe"?
- 14. Gibt es eine minimale Heap-Größe für Android-Versionen?
- 15. Fehler Java Heap Größe in Android Studio 1.3.1
- 16. Android Studio zunehmende Heap-Größe funktioniert nicht auf 2.1.2
- 17. native Heap-Nutzung android
- 18. Set Standard-Heap-Größe in Windows
- 19. Was ist der Unterschied zwischen Dalvik Heap und nativen Heap in Android? welcher ist fixiert?
- 20. Ruby-Garbage Collection Heap Slot Größe
- 21. Wie wählt man die jvm-Heap-Größe?
- 22. Überwachung von Eclipse-Plugin-Heap-Größe * programmatisch *
- 23. Wie Java-Heap-Größe programmgesteuert zu erhöhen
- 24. Compute jvm Heap Größe Host Web-Anwendung
- 25. Wie die Größe des Heap zu begrenzen?
- 26. .NET Committed vs. Reserved Heap-Größe
- 27. Erhöhen der Heap-Größe für sqlworkbench/J
- 28. Monitor-JVM-Heap-Größe von C++
- 29. Festlegen der JVM-Heap-Größe zur Laufzeit
- 30. Erhöhen Sie die Java-Heap-Größe dauerhaft?
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
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