14.01.2015 Aufrufe

Dynamische Adaption in heterogenen verteilten eingebetteten ...

Dynamische Adaption in heterogenen verteilten eingebetteten ...

Dynamische Adaption in heterogenen verteilten eingebetteten ...

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

5.4 E<strong>in</strong>e JVM als Baukasten<br />

Von <strong>in</strong>krementellen Verfahren spricht man, wenn die Speicherverwaltung beliebig oft unterbrochen<br />

und wieder fortgesetzt werden kann. Dabei wird jedes Mal e<strong>in</strong> Teil des Speichers durchsucht. Diese<br />

Verfahren können dann im Wechsel mit der normalen Programmausführung abgearbeitet werden und<br />

führen somit zu e<strong>in</strong>er quasi parallelen Speicherbere<strong>in</strong>igung. Für viele blockierende Verfahren ist es<br />

möglich, e<strong>in</strong>e <strong>in</strong>krementelle Version zu erstellen [GLS75, HGB78].<br />

Damit <strong>in</strong>direkte Verfahren <strong>in</strong>krementell durchgeführt werden können, darf sich der Erreichbarkeitsgraph<br />

während der Suche nach verwendeten Objekten nicht verändern. Im Speziellen darf ke<strong>in</strong>e<br />

Referenz von e<strong>in</strong>em unbesuchten Objekt <strong>in</strong> e<strong>in</strong>en bereits abgelaufenen Zweig e<strong>in</strong>gehängt werden. Denn<br />

wenn gleichzeitig alle anderen Referenzen auf das unbesuchte Objekt gelöscht werden, so wird das<br />

Objekt nicht als referenziert erkannt und fälschlicherweise gelöscht.<br />

Um zu verh<strong>in</strong>dern, dass Referenzen <strong>in</strong> bereits besuchte Objekte e<strong>in</strong>gefügt werden, müssen Speicherzugriffe<br />

während e<strong>in</strong>er <strong>in</strong>krementellen Speicherbere<strong>in</strong>igung mithilfe von sogenannten Barrieren<br />

überwacht werden. Inkrementelle Verfahren s<strong>in</strong>d durch dieses Vorgehen deutlich aufwendiger als<br />

blockierende Verfahren und benötigen <strong>in</strong>sgesamt mehr Ressourcen für e<strong>in</strong>en vollständigen Durchlauf.<br />

Der Vorteil vom <strong>in</strong>krementellen Verfahren liegt jedoch auf der Hand: mit ihnen kann man e<strong>in</strong>e bessere<br />

Verfügbarkeit des Systems erreichen.<br />

Durch Austauschen der Speicherbere<strong>in</strong>igung kann man beispielsweise den schnellen nicht-verschiebenden<br />

Garbage Collector durch e<strong>in</strong>en verschiebenden auswechseln, wenn der Speicher zu<br />

stark fragmentiert ist. Beim Austausch muss man allerd<strong>in</strong>gs beachten, dass neben dem Code auch<br />

Datenstrukturen erzeugt oder angepasst werden müssen. Für e<strong>in</strong>en direkten Garbage Collector müssen<br />

zum Beispiel zunächst die Anzahl der Referenzen auf jedes Objekt ermittelt werden.<br />

Ist e<strong>in</strong>e Speicherbere<strong>in</strong>igung nur selten notwendig, so ist das Auslagern der Speicherbere<strong>in</strong>igung als<br />

externer Dienst <strong>in</strong>teressant. Verwendet man dazu den Standardmechanismus der Basisschicht, so wird<br />

allerd<strong>in</strong>gs jede untersuchte Referenz separat zum Verwalter übertragen. Außerdem setzt das voraus,<br />

dass der Garbage Collector über festgelegte Schnittstellen auf die Objekte zugreift.<br />

Als Optimierung kann man auch den gesamten relevanten Speicher<strong>in</strong>halt vor der Speicherbere<strong>in</strong>igung<br />

zum Verwalterknoten transportieren. Dann kann auch e<strong>in</strong> Speicherbere<strong>in</strong>igungsalgorithmus<br />

e<strong>in</strong>gesetzt werden, der die Objektstruktur implizit kennt und direkt auf dem Speicher arbeitet. Bei<br />

verschiebenden oder kopierenden Verfahren muss der Speicher nach der Bere<strong>in</strong>igung wieder zurücktransportiert<br />

werden. Verändert das Verfahren die Position von aktiven Objekten nicht, so reicht es aus,<br />

die Speicherverwaltung über den frei gegebenen Speicher zu <strong>in</strong>formieren.<br />

..Bei der Verwendung e<strong>in</strong>er nicht-verschiebenden Speicherbere<strong>in</strong>igung nach dem mark-and-sweep<br />

Verfahren br<strong>in</strong>gt e<strong>in</strong>e Auslagerung den Vorteil mit sich, dass der Knoten während der Speicherbere<strong>in</strong>igung<br />

nicht angehalten werden muss. Da der Garbage Collector auf e<strong>in</strong>er Kopie des Speicher<strong>in</strong>halts<br />

arbeiten kann, verändert sich der Erreichbarkeitsgraph der Objekte nicht. Alle Objekte, die zur Zeit des<br />

Abbildes nicht mehr erreichbar waren, können auch während der Speicherbere<strong>in</strong>igung nicht erreicht<br />

werden.<br />

Da jedoch während der externen Speicherbere<strong>in</strong>igung neue Objekte entstehen können, kann nicht<br />

der gesamte Speicher, der nicht erreichbar war, als frei markiert werden. Stattdessen darf man <strong>in</strong> der<br />

sweep-Phase nur solchen Speicherplatz freigeben, der auch durch Objekte belegt war.<br />

Das externe Ausführen der Speicherbere<strong>in</strong>igung kann sich speziell für kle<strong>in</strong>e Knoten mit sehr wenig<br />

Speicher und Ressourcen lohnen. Hier muss nur sehr wenig Speicher transportiert und der Aufwand<br />

der Speicherbere<strong>in</strong>igung muss nicht lokal erbracht werden.<br />

113

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!