2016-06-23 13 views
2

Ich bewerte die Auswirkungen der Leistung der Erstellung kleiner kurzlebiger Objekte häufig (sagen wir jede Sekunde) auf Garbage Collection und Speicherbedarf, vor allem auf Android Java-Implementierung.Java kurzlebige Objekte & Garbage Collection

Um weiter zu erörtern, haben wir eine Anwendung, die häufige Aktualisierung aus dem Netzwerk in Thread erhält und es an die Anwendung in einer kleinen Struktur übergeben wird. In C, schaffen wir eine lokale Variable vom Typ Struktur und übergeben Sie es wie

void passToApp(int a, int b, int c) { 

    AppStruct p; 
    p.a = a; 
    p.b = b; 
    p.c = c; 
    appFunction(&p); 
} 

Dies ist kein Problem in C ist als p im Stapel ist. In Java muss jedoch jedes Objekt zugewiesen und später durch GC freigegeben werden.

void passToApp(int a, int b, int c) { 

    AppStruct p = new AppStruct(); 
    p.a = a; 
    p.b = b; 
    p.c = c; 
    appFunction(p); 
} 

Bitte teilen Sie Ihre Erkenntnisse über die Situation und alle Best Practices unter solchen Umständen.

+0

[Profil es und sehen, ob es ein Problem gibt] (http://programmers.stackexchange.com/questions/80084/is-premature) -Optimierung-wirklich-die-Wurzel-von-allem-Übel). Die Auswirkung wird 0 sein, wenn es nur einmal pro Sekunde passiert. – zapl

+0

Wenn Sie versuchen, Dinge wie diese zu optimieren, verwenden Sie wahrscheinlich die falsche Plattform ... abgesehen davon ist Java im Allgemeinen sehr schnell in der Zuordnung, und wenn sie kurz leben, werden sie nie Eden Raum verlassen, was ist auch sehr effizient. Der beste Weg ist es zu messen. –

Antwort

0

können Sie alle Objekte machen wie dieses

private class AppStruct{ 
     boolean used; 

     public void release() { 
      used = false; 
     } 
    }; 
    private final static int MAX_COUNT = 100; 
    private final AppStruct[] pool = new AppStruct[MAX_COUNT]; 
    public AppStruct obtain() { 
     for (int i = 0; i < pool.length; ++i){ 
      if (!pool[i].used) { 
       pool[i].used = true; 
       return pool[i]; 
      } 
     } 
     // max count is set wrong 
     return new AppStruct(); 
    } 

Dies ist nur einfaches Beispiel ist, sollten Sie vielleicht Liste oder etwas machen.

Grundidee ist, final Objekt, das nur einmal erstellt wird und dies wird mit GC in Ordnung sein. Es ist besser, nicht viele Objekte zu erstellen, da es UI-Thread verzögern kann und FPS