MicroPython: Garbage Collection

„Garbage“ bedeutet „Müll“ und „Garbage Collection“ bedeutet „Müllabfuhr“. Garbage Collection übernimmt für den Benutzer die Speicherverwaltung seines Programms. Dadurch kann der Programmierer sich auf die Kern-Funktionen seines Programms konzentrieren und muss sich nicht mit nebenläufigen, aber wichtigen Verwaltungsaufgaben kümmern.

In jeder Software-Umgebung gibt es Objekte, die Speicher und Ressourcen verbrauchen, aber gar nicht mehr gebraucht werden. Normalerweise liegt es in der Verantwortung des Programmierers, nicht genutzte Objekte zu löschen. Nun ist es so, dass viele Programmiersprachen mit Abstraktionsschichten arbeiten, bei denen der Programmierer gar nicht erkennen kann, dass er ein Objekt erzeugt hat, dass im Speicher liegt und eigentlich gelöscht werden könnte.
Die Garbage Collection verwaltet und optimiert den im System verfügbaren Speicher, was die Programmierung erleichtert und die Systemleistung verbessert.
Das bedeutet, dass die Garbage Collection regelmäßig den Speicher durchsucht, um Objekte zu identifizieren, die nicht mehr verwendet werden. Diese unbenutzten Objekte werden dann freigegeben, um den Speicherverbrauch zu reduzieren.
Ohne Garbage Collection könnte es passieren, dass der verfügbare Speicherplatz schnell erschöpft ist und das laufende Programm wegen Speichermangel abstürzt oder fehlerhaft arbeitet. Der Programmierer müsste dann vorsehen, dass sein Programm ab und zu manuell Speicher freigibt, der nicht mehr verwendet wird. Das Problem dabei ist, dass das zu Fehlern führen und zu einer Verschlechterung der Leistung und Stabilität des Programms führen kann.

MicroPython enthält einen integrierten Mechanismus für automatische Garbage Collection. Die Garbage Collection in MicroPython wird durch einen sogenannten „Mark and Sweep“-Algorithmus ausgeführt. Dabei wird der Speicher regelmäßig durchsucht, um ungenutzte Variablen und Objekte zu erkennen und freizugeben.

Manuelles Aufrufen der Garbage Collection

In der Regel ist es in MicroPython nicht notwendig, die Garbage Collection manuell aufzurufen, da der integrierte Mechanismus in der Lage ist, ungenutzte Speicherbereiche automatisch zu erkennen und freizugeben.
Es kann jedoch in bestimmten Situationen notwendig sein, den Garbage Collector (GC) manuell auszuführen.

import gc
gc.collect()

Die Funktion „gc.collect()“ bewirkt eine unmittelbare Ausführung der Garbage Collection. Dabei wird Speicherplatz freigegeben, der nicht mehr genutzt wird. Es ist jedoch zu beachten, dass das manuelle Aufrufen der Garbage Collection in der Regel nicht notwendig ist und die Ausführung des Programms verlangsamen kann.

In Situationen, in denen das manuelle Ausführen der Garbage Collection erforderlich ist, sollte diese sparsam eingesetzt werden und nur dann ausgeführt werden, wenn ein erheblicher Speicherbedarf besteht oder wenn es Hinweise auf ein Speicherleck gibt.

Wie kann man den aktuellen Speicherbrauch feststellen?

import gc
print(gc.mem_alloc() / 1024, "KiB")

Die Funktion „gc.mem_alloc()“ gibt die Anzahl der Kilobyte (binär) zurück, die für die aktuelle Ausführung des Programms belegt sind. Diese Angabe entspricht dem tatsächlichen Speicherverbrauch des Programms. Die Funktion ist Teil des Garbage Collection-Moduls in MicroPython und kann verwendet werden, um den aktuellen Speicherverbrauch zu ermitteln und zu überwachen.

Mit folgendem Programmcode kann man die Wirkung der Garbage Collection (GC) in MicroPython mit dem Modul „gc“ testen:

import time
import gc

print("Speicherverbrauch nach dem Start:", gc.mem_alloc() / 1024, "KiB")
time.sleep(5)
print("Speicherverbrauch nach 5 Sekunden:", gc.mem_alloc() / 1024, "KiB")
gc.collect()
print("Speicherverbrauch nach manueller GC:", gc.mem_alloc() / 1024, "KiB")

Nach dem letzten „gc.mem_alloc()“ sollte der Speicherverbrauch kleiner sein.

Hinweis: In diesem Beispiel ist der Effekt der Garbage Collection nicht besonders groß. Allerdings verdeutlicht es, dass schon ein einfaches „sleep“ dazu führt, dass der Speicherverbrauch mit der Zeit zunimmt.

Sinn und Zweck der Garbage Collection in MicroPython

In einem Universal-Computer ist der Speicher immer begrenzt. Die Frage ist, was passiert in einem solchen System, wenn der Speicher voll ist? Diese Situation muss zwingend vermieden werden. In modernen Betriebssystemen existieren Mittel und Wege eine solche Situation zu vermeiden. Beispielsweise das Swapping, das Auslagern des Arbeitsspeichers auf einen Massenspeicher. Wenn man mit MicroPython einen Mikrocontroller programmiert, dann existiert in dieser Umgebung kein Betriebssystem. Das Programm wird direkt in den Speicher geschrieben und ausgeführt. Ganz ohne übergeordnete Verwaltung der Hardware und der Ressourcen. In dieser Umgebung kann der Speicher aber auch knapp werden und irgendwann voll sein. Eine solche Situation muss hier zwingend vermieden werden, weil das System dann instabil wird. Prinzipiell muss sich der Programmierer darum kümmern. Der MicroPython-Interpreter bzw. MicroPython-Firmware hat an der Stelle den Vorteil, dass es eine integrierte Garbage Collection hat, die ungenutzte Daten im Speicher entfernen und den Speicher wieder freigeben kann.

Weitere verwandte Themen:

Frag Elektronik-Kompendium.de

Hardware-nahes Programmieren mit dem Raspberry Pi Pico und MicroPython

Elektronik-Set Pico Edition

Das Elektronik-Set Pico Edition ist ein Bauteile-Sortiment mit Anleitung zum Experimentieren und Programmieren mit MicroPython.

  • LED: Einschalten, ausschalten, blinken und Helligkeit steuern
  • Taster: Entprellen und Zustände anzeigen
  • LED mit Taster einschalten und ausschalten
  • Ampel- und Lauflicht-Steuerung
  • Elektronischer Würfel
  • Eigene Steuerungen programmieren

Elektronik-Set jetzt bestellen Online-Workshop buchen

Online-Workshop: Programmieren mit dem Raspberry Pi Pico

Programmieren mit dem Raspberry Pi Pico

Gemeinsam mit anderen und unter Anleitung experimentieren? Wir bieten unterschiedliche Online-Workshops zum Raspberry Pi Pico und MicroPython an. Einführung in die Programmierung, Sensoren programmieren und kalibrieren, sowie Internet of Things und Smart Home über WLAN und MQTT.

Online-Workshop buchen

Besuchen Sie unser fast monatlich stattfindendes Online-Meeting PicoTalk und lernen Sie uns kennen. Die Teilnahme ist kostenfrei.

Termine und Newsletter-Anmeldung

 

Elektronik-Sets für das Hardware-nahe Programmieren