Frage

Eine typische Generationsmüllsammler Hält kürzlich Daten in einem separaten Speicherbereich. In typischen Programmen sind viele Daten nur von kurzer Dauer, sodass das Sammeln junger Müll (ein kleiner GC-Zyklus) häufig und selten alter Müll sammelt, ist ein guter Kompromiss zwischen Speicheraufwand und Zeit, die für GC aufgewendet werden.

Intuitiv sollte der Nutzen eines Generationsmüllsammlers im Vergleich zu einem Einzelregionskollektor mit zunehmendem Latenzverhältnis des Hauptspeichers im Vergleich zu Cache zunehmen, da auf die Daten in der jungen Region häufig zugegriffen werden und alle an einem Ort aufbewahrt werden. Bestätigen experimentelle Ergebnisse diese Intuition?

War es hilfreich?

Lösung

Hier sind einige Papiere, die über die Auswirkungen von Müllsammlern von Generationen von Generationen sprechen:

Nach dem, was ich sammeln kann, ist das Hauptproblem, dass der Müll gesammelte Systeme im Speicher den Raum im Speicher ausschüttet, um vorne zu vermeiden. Das gleiche gilt für den Cache -Speicher. Wie Sie vorgeschlagen haben, werden die Dinge in der ersten Generation höchstwahrscheinlich im Cache sitzen, und so werden ihre Zuteilung und Sammlung viel schneller sein als etwas im Hauptgedächtnis oder auf die Festplatte ausgetauscht. Das Hauptproblem ist die Größe der ersten Generation in Bezug auf die Größe Ihres Cache. Wenn sich Ihr Cache vor der ersten Generation füllt, verlieren Sie diese Vorteile, wenn sich die Fehlern ansammeln.

Andere Tipps

Es gibt einen sehr schwierigen Aspekt aller Müllsammler, die in einigen Beschreibungen möglicherweise beschönigt werden, und das ist der "vollständige Scan" oder "volles Sammeln". In regelmäßigen Abständen müssen sie zeitweise alle Objekte scannen. Generationensammler können den vollständigen Scan besser verschieben und seine Dauer minimieren, aber es ist noch erforderlich.

Der Generationensammler konzentriert sich auf den manchmal als "Kindergarten" genannten Raum, aber er muss sich letztendlich auf den "älteren" Generationsraum sammeln und einen vollständigen Speicher -Scan verursachen.

Dieser vollständige Scan ist mit fast allen Speicherspeichern und (insbesondere!) Virtualisierungsschemata in dem Sinne unvereinbar, dass fast alle Speicher -Caching-/Virtualisierungsschemata in diesem Fall in jeder Leistungsverbesserung schlecht scheitern.

Die wichtigste Antwort auf diese Frage ist also, wie oft der vollständige Scan ausgelöst wird und wie "schlecht" seine Auswirkung ist, wenn er passiert und ob er toleriert werden kann. Dies läuft mehr auf eine anwendungsabhängige Eigenschaft/Frage.

Mit anderen Worten für "die meisten" des Kollektors wird ein Cache wahrscheinlich ihm helfen (der Cache und der "junge" Kindergartenraum überlappen sich im Allgemeinen!), Aber es gibt eine periodische, intermittierende, eventuelle, unvermeidliche, schwere, schwere, Vielleicht sogar "massiv" [degradierende] Leistungspendung, wenn der Raum "Old Generation" voll gesammelt wird und der Cache-Hit "Treffer" auf sehr schlechte Objekte abgebaut hat Zyklus scannen/sammeln. Mit anderen Worten, eine unausweichliche periodische Diskontinuität (bei der statistische Schätzungen/Durchschnittswerte/Leistungstrends usw. irreführend und nicht anwendbar sind).

Was jetzt auftaucht, sind einige neue Sammelsysteme, die mit den zugrunde liegenden Speicherverwaltungssystemen (Caching/Virtualisierung) ausgelegt sind. Es scheint, dass historische Ansätze, die die getrennten Systeme der Speichersammlung, des Zwischenspeichers und der Virtualisierung vollständig entkoppeln, nicht so gut wie an Ansätze, die alle drei Aspekte zusammenschließen/integrieren/ansprechen.

Siehe zB Cache Aware Müllsammlung von Zhou und Demsky.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit cs.stackexchange
scroll top