Ich höre immer wieder, dass Android-Anwendungen versuchen sollten, die Anzahl der erstellten Objekte zu begrenzen, um die Arbeitslast auf dem Garbage Collector zu reduzieren. Es ist sinnvoll, dass Sie keine großen Mengen von Objekten erstellen möchten, die auf einem begrenzten Speicherbedarf gespeichert werden. Beispielsweise wäre eine traditionelle Serveranwendung, die innerhalb weniger Sekunden 100.000 Objekte erstellt hat, nicht unbekannt.Ändern des Codierungsstils aufgrund der Android GC-Leistung, wie weit ist es zu weit?
Das Problem ist, wie weit soll ich das nehmen? Ich habe Tonnen von Beispielen für Android-Anwendungen gesehen, die sich auf den statischen Zustand verlassen, um angeblich "Dinge beschleunigen" zu können. Erhöht die Erhöhung der Anzahl von Instanzen, die von Dutzenden bis zu Hunderten gesammelt werden müssen, wirklich einen großen Unterschied? Ich kann mir vorstellen, meinen Codierungsstil zu ändern, um jetzt Hunderttausende von Objekten zu erstellen, wie Sie es vielleicht auf einem vollwertigen Java-EE-Server getan haben, aber sich auf eine Menge statischer Zustände zu verlassen (angeblich) die Anzahl der Objekte zu reduzieren ungerade.
Wie viel ist es wirklich notwendig, Ihren Code-Stil zu ändern, um leistungsstarke Android-Apps zu erstellen?
Ich würde auch hinzufügen, dass Sie oft finden, Java-Code, der ursprünglich für Desktops oder Server geschrieben wurde, die extrem ineffizient ist und durch eine Tonne von Objekten im Vergleich zu der Menge der Arbeit thrash es tut. Zum Beispiel habe ich Netzwerkcode gesehen, der GCs bei der Verarbeitung von Daten aus dem Netzwerk fortwährend verursacht. Wenn Ihr Code das tut, sollten Sie ihn wirklich optimieren, nicht speziell wegen Dalvik, sondern weil er nicht für ein mobiles Gerät geeignet ist - all diese zusätzliche Arbeit kommt direkt von der Batterie. – hackbod
In Bezug darauf, wie sehr der Stil tatsächlich geändert werden sollte, würde ich sagen, dass der beste Weg, Code zu schreiben, ist (und ein wenig darüber nachzudenken, zugewiesene Objekte wiederzuverwenden, aber nicht umfangreich) und sehen, ob es da ist irgendein Druck auf den GC. Wenn dies der Fall ist, starten Sie die Speicher-Profilerstellung Ihres Codes und suchen Sie nach Stellen, an denen Sie das Zuweisen und Löschen von Variablen vermeiden können. –