Was bedeuten GC_FOR_MALLOC, GC_EXPLICIT und andere GC_ * in Android Logcat?

Wenn Sie die Android-Logs sehen, können Sie eine Menge dieser Dinge zu sehen.

Was bedeuten sie, wissen, dass diese uns helfen können, bessere Speicherzuweisungen zu machen.

  • Android.database.CursorIndexOutOfBoundsException
  • Größe Attribut ignoriert in Layer-Liste
  • Probleme beim Importieren von android.support.v7.widget.CardView in Eclipse
  • Benutzerdefiniertes Thema in Android / Xamarin Projekt - Mitte Titeltext der Aktionsleiste
  • Ihr Projektstandort enthält Whitespace. (Android Studio)
  • Fragment: welcher Rückruf aufgerufen hat, wenn man die Taste drücken und sie anpassen kann
  • Beispiel:

    28470 dalvikvm D GC_FOR_MALLOC freed 665 objects / 239992 bytes in 71ms 28470 dalvikvm D GC_FOR_MALLOC freed 673 objects / 240288 bytes in 87ms 21940 dalvikvm D GC_EXPLICIT freed 4802 objects / 185320 bytes in 78ms 28470 dalvikvm D GC_FOR_MALLOC freed 666 objects / 240536 bytes in 63ms 

  • Wie baue ich Qt5 für Android?
  • Android Market Anwendung Url?
  • Einstellen eines Alarms (wie im Wecker) mit Intents
  • Sobel Edge Detection in Android
  • Warum Logcat nichts zeigt?
  • Variablen speichern nach Beendigung der Anwendung?
  • 3 Solutions collect form web for “Was bedeuten GC_FOR_MALLOC, GC_EXPLICIT und andere GC_ * in Android Logcat?”

    GC_FOR_MALLOC bedeutet, dass der GC ausgelöst wurde, weil nicht genügend Speicher auf dem Heap übrig war, um eine Zuweisung durchzuführen. Kann ausgelöst werden, wenn neue Objekte angelegt werden.

    GC_EXPLICIT bedeutet, dass der Garbage Collector explizit aufgefordert wurde, zu sammeln, anstatt durch hohe Wasserzeichen im Haufen ausgelöst zu werden. Schlägt ganz über dem Platz, aber meistens, wenn ein Faden getötet wird oder wenn eine Binderkommunikation abgenommen wird.

    Es gibt noch ein paar andere:

    GC_CONCURRENT Ausgelöst, wenn der Haufen eine bestimmte Anzahl von zu sammelnden Objekten erreicht hat.

    GC_EXTERNAL_ALLOC bedeutet, dass die VM versucht, die Menge an Speicher zu reduzieren, die für sammelbare Objekte verwendet wird, um Platz für mehr nicht sammelbar zu machen.

    Update: Es gab eine Namensänderung des ersten Ereignisses in späteren Versionen von Android. Es heißt jetzt "GC_FOR_ALLOC". Es gibt auch eine neue Veranstaltung, obwohl sehr selten in modernen Handys: GC_BEFORE_OOM bedeutet, dass das System läuft sehr niedrig auf Speicher, und dass es eine endgültige GC durchgeführt, um zu vermeiden, rufen Sie die Low Memory Killer.

    Ein weiterer Ort, an dem die Dalvik-Müllsammler-Nachrichten erklärt werden, ist in diesem Video: Google I / O 2011: Speicherverwaltung für Android Apps

    In etwa 14 Minuten in die Präsentation, bricht er das Nachrichtenformat. (BTW, das Video hat wirklich gute Informationen über das Debuggen von Speicherlecks)

    Grob gesprochen ist das Format [Reason] [Amount Freed], [Heap Statistics], [External Memory Statistics], [Pause Time]

    Grund

    Robert / yuku gab bereits Informationen über die Bedeutung dieser.

    Betrag freigegeben

    ZB freed 2125K

    Selbsterklärend

    Heap Statistiken

    ZB 47% free 6214K/11719K

    Diese Zahlen spiegeln die Bedingungen nach dem GC. Die "47% frei" und 6214K spiegeln den aktuellen Heapverbrauch wider. Die 11719K repräsentiert die Gesamthaufengröße. Von dem, was ich sagen kann, kann der Haufen wachsen / schrumpfen, so dass Sie nicht unbedingt einen OutOfMemoryError haben, wenn Sie dieses Limit treffen.

    Externe Speicherstatistik

    ZB external 7142K/8400K

    Hinweis: Dies kann nur in Pre-Honeycomb-Versionen von Android (vor 3.0) bestehen.

    Vor Honeycomb werden Bitmaps außerhalb Ihrer VM zugewiesen (zB Bitmap.createBitmap () gibt die Bitmap extern zu und gibt nur ein paar Dutzend Bytes auf deinem lokalen Heap zu.). Weitere Beispiele für externe Zuweisungen sind für java.nio.ByteBuffers.

    Pausenzeit

    Wenn es ein gleichzeitiges GC-Ereignis ist, wird es zwei mal aufgeführt. Einer ist für eine Pause vor dem GC, einer ist für eine Pause, wenn die GC ist meist getan. ZB paused 3ms+5ms

    Bei nicht gleichzeitigen GC-Ereignissen gibt es nur eine Pausenzeit und es ist typischerweise viel größer. ZB paused 87ms

    Ich habe das auch in den Android Quellen gefunden, dalvik/vm/alloc/Heap.h Kann das nützlich sein

     typedef enum { /* Not enough space for an "ordinary" Object to be allocated. */ GC_FOR_MALLOC, /* Automatic GC triggered by exceeding a heap occupancy threshold. */ GC_CONCURRENT, /* Explicit GC via Runtime.gc(), VMRuntime.gc(), or SIGUSR1. */ GC_EXPLICIT, /* GC to try to reduce heap footprint to allow more non-GC'ed memory. */ GC_EXTERNAL_ALLOC, /* GC to dump heap contents to a file, only used under WITH_HPROF */ GC_HPROF_DUMP_HEAP } GcReason; 
    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.