.NET: Project Snowflake kombiniert manuelle Speicherverwaltung und Garbage Collection

Ein Microsoft-Research-Projekt bringt manuelle Speicherverwaltung und automatisierte Garbage Collection unter einen Hut, um Entwicklern die Vorteile beider Ansätze zu bieten.

In Pocket speichern vorlesen Druckansicht 26 Kommentare lesen
.NET: Project Snowflake kombiniert manuelle Speicherverwaltung und Garbage Collection
Lesezeit: 3 Min.
Von
  • Alexander Neumann

Microsoft Research und Forscher der Universitäten von Cambridge und Princeton arbeiten im Project Snowflake an der Kombination aus sicherer manueller Speicherverwaltung und automatisierter Garbage Collection in der .NET-Laufzeitumgebung. Das Ziel ist es, Entwicklern die Flexibilität und Sicherheit einer automatisierten Speicherverwaltung und zugleich die Möglichkeit zu geben, die Leistung eines Programms zu verbessern, indem Entwickler Objekte aus dem Speicher manuell freigeben können. Ihre Ziele und erste Ergebnisse präsentieren die Forscher in einem letzte Woche freigegebenen Bericht.

Mit Snowflake können Programmierer zwischen der Zuweisung von Objekten im Garbage-Collection- oder dem manuellen Heap wählen. Snowflake kombiniert die quelloffene .NET-Runtime mit der Möglichkeit, Speicher manuell zu verwalten, ohne wohl etwaige Kompromisse bei Leistung oder Sicherheit eingehen zu müssen. Bestehende Anwendungen laufen offenbar unmodifiziert mit dem Garbage-Collection-Heap ohne Leistungseinbußen.

Project Snowflake modifiziert hierfür die CoreCLR-Laufzeit und erweitert die Standardbibliotheken mit APIs, mit denen sich manuell Speicher auswählen lässt. Es handelt sich um ein flexibles Programmiermodell für die manuelle Speicherverwaltung, mit der sich Objekte an beliebigen Programmplätzen zuordnen, freigeben und gleichzeitig und sicher zwischen mehreren Threads teilen lassen sollen.

Microsofts Modell für die manuelle Speicherverwaltung baut auf dem Prinzip singulärer Besitzer von manuellen Objekten auf, wobei Orte im Stack oder Heap nur den Verweis auf ein auf dem manuellen Heap zugeordnetes Objekt enthalten. Das Konzept sogenannter Shields wird hier eingeführt, um eine sichere gleichzeitige gemeinsame Nutzung manueller Objekte zu ermöglichen. Sie erzeugen einen Zustand im lokalen Thread-Speicher, um eine Deallokation zu verhindern, während das Objekt verwendet wird.

Im Bericht heißt es, dass Garbage Collection wie die bei .NET grundsätzlich für einen hohen Durchsatz durch schnelle Thread-lokale Bump-Allokation und die Sammlung "junger" Objekte sorgen würde, Studien würden aber auch zeigen, dass die GC-Performance im Vergleich zum manuellen Speicher-Management schlechter ausfalle. Dieser Overhead werde bei großen Datenanalysen und Echtzeit-Stream-Processing-Anwendungen noch mal größer.

Eine manuelle Speicherverwaltung adressiert die Performanceprobleme, indem man das Tracen eines Objektgraphen vermeidet, um Objekte freizugeben, und es Programmierern ermöglicht, ihre eigene Kenntnis zur Objektlebensdauer zu nutzen, um Objekte an bestimmten Stellen in einem Programm freizugeben. Das kann in vielen Fällen zur Verbesserung des Durchsatzes und des Speicherverbrauchs führen. Aber die manuelle Speicherverwaltung gilt als auch unsicher und sorgt immer wieder zu Abstürzen und Schwachstellen. (ane)