Behandelt der GHC-Garbage Collector "große" Objekte speziell? Oder behandelt es sie genau wie jedes andere Objekt? Bei einigen GC-Engines werden große Objekte in einem separaten Bereich platziert, der weniger regelmäßig gescannt wird und möglicherweise einen anderen Sammlungsalgorithmus verwendet (z. B. Komprimierung statt Kopieren oder sogar die Verwendung von Freelists, anstatt zu defragmentieren). Page 181 Macht GHC so etwas?Hat der GHC Garbage Collector spezielle Optimierungen für große Objekte?
Antwort
Ja. Der GHC-Heap wird nicht in einem zusammenhängenden Speicherabschnitt gespeichert. eher ist es organized into blocks.
Wenn die Größe eines zugewiesenen Objekts über einem bestimmten Schwellenwert liegt (block_size * 8/10, wobei block_size 4k ist, also etwa 3,2k), wird der Block, der das Objekt enthält, als groß markiert (BF_LARGE). Wenn die Garbage-Collection jetzt stattfindet, anstatt große Objekte von diesem Block in einen neuen Block zu kopieren, wird der Block selbst zum Blocksatz der neuen Generation hinzugefügt. Dies beinhaltet das Hantieren mit einer verketteten Liste (eine große Objektliste, um genau zu sein).
Da dies bedeutet, dass es eine Weile dauern kann, bis wir toten Raum innerhalb eines großen Blocks zurückgewinnen, bedeutet dies, dass große Objekte unter Fragmentierung leiden können, wie in Bug 7831 zu sehen ist. Dies geschieht jedoch normalerweise erst, wenn die einzelnen Zuweisungen die Hälfte der Megablock-Größe (1M) erreichen.
- 1. Warum Garbage Collector dbcontext Objekte nicht sammelt
- 2. Kopieren von Garbage Collector
- 3. Garbage Collector zerstört Objekte von Interface Builder
- 4. Xcode: Garbage Collector Einstellung
- 5. Teilstrings und der Go-Garbage Collector
- 6. Java Collections und Garbage Collector
- 7. Garbage Collector asp.net
- 8. LogManager und Garbage Collector
- 9. Eclipse: Garbage Collector Button
- 10. V8-Garbage-Collector-Fehler
- 11. Wann wird der .net-Garbage-Collector ausgeführt?
- 12. Xamarin Garbage Collector und zirkuläre Referenzen
- 13. Wann sammelt der Garbage Collector einen Singleton?
- 14. Garbage Collector kann Speicherressourcen nicht wiederherstellen
- 15. aktuellen Mono Standard Garbage Collector
- 16. Cocoa-Netzwerk-Streams und der Garbage Collector
- 17. Hat Objective-C einen Garbage Collector auf dem iPhone?
- 18. Ruft Garbage Collector Dispose() auf?
- 19. Hat iPhone OS 3.0 einen echten Garbage Collector?
- 20. Was hat Pythons GIL mit dem Garbage Collector zu tun?
- 21. Warum den Garbage Collector deaktivieren?
- 22. Garbage Collector Auswirkungen auf Solr
- 23. Wann beendet der Garbage Collector in C# exit
- 24. UIWebView Lecks, JS Garbage Collector & WebCore VMs
- 25. Wie Garbage Collection in GHC Haskell deaktivieren?
- 26. Wie erkennt Pythons Garbage Collector kreisförmige Referenzen?
- 27. .NET Garbage Collector und x64 virtueller Speicher
- 28. JRuby - Wie starte ich den Garbage Collector?
- 29. Relative Leistung von Java Garbage First (G1) Garbage Collector?
- 30. Standardwert für maxtenuringthreshold Flag für CMS Garbage Collector?
Sollte nicht die block_size im Beispiel 5k und der Schwellenwert 4k sein? – Sal
Ah ja, du hast Recht, dass ich die Multiplikation umgedreht habe. block_size ist 4k; Schwelle ist ~ 3.2k; Ich habe es repariert. –