-
HINTERGRUND
DER ERFINDUNG
-
Bereich der
Erfindung
-
Die
vorliegende Erfindung betrifft Garbage-Collection (Speicherbereinigung)
und im Besonderen Verfahren und Vorrichtungen zum Fördern von
Garbage-Collection mit begrenzter Pausezeit.
-
Beschreibung
der verwandten Technik
-
Traditionell
geben die meisten Programmiersprachen die Verantwortung für dynamische
Speicherallokation und -deallokation dem Programmierer. Beispielsweise
wird in der Programmiersprache C Speicher von der malloc-Prozedur
(oder ihren Varianten) aus dem Heap alloziert. Eine Zeigervariable
p vorausgesetzt, verursacht die Ausführung von der Aussage p = malloc
(sizeof(SomeStruct)) entsprechenden Maschinenanweisungen, dass die
Zeigervariable p auf einen neu allozierten Speicher für ein Speicherobject
einer zum Darstellen einer SomeStruct-Datenstruktur notwendigen Größe zeigt.
Nach Gebrauch kann das von der Zeigervariablen p gekennzeichnete
Speicherobjekt dealloziert oder freigesetzt werden, indem free (p)
angefordert wird. Die Sprachen Pascal und C++ stellen analoge Leistungsmerkmale
zur expliziten Speicherallokation und -deallokation bereit.
-
Leider
kann dynamisch allozierter Speicher unerreichbar werden, wenn im
Satz der Wurzelreferenzstellen für
eine bestimmte Berechnung keine Referenz oder kein Zeiger auf den
Speicher übrigbleibt.
Speicherobjekte, die nicht mehr erreichbar sind, aber nicht freigesetzt
wurden, werden Garbage genannt. Desgleichen kann mit einem Speicherobjekt
assoziierter Speicher dealloziert werden, während er noch referenziert
ist. In diesem Fall wurde eine hängende
(dangling) Referenz erstellt. Im Allgemeinen kann die richtige Verwaltung eines
dynamischen Speichers schwer sein. In den meisten Programmiersprachen
ist für
Datenstrukturen, die die Prozedur überleben, die sie erstellte,
eine Heap-Allokation erforderlich. Wenn diese Datenstrukturen an weitere
Prozeduren oder Funktionen weitergeleitet werden, kann es für den Programmierer
oder Compiler schwierig oder unmöglich
sein, den Punkt zu bestimmen, an dem sie unbedenklich dealloziert
werden können.
-
Wegen
dieser Schwierigkeit kann die Garbage-Collection, d.h. die automatische
Wiederverwertung von Heap-alloziertem Speicher nach seiner letzten
Verwendung durch ein Programm, ein attraktives alternatives Modell
für dynamisches
Speichermanagement sein. Garbage-Collection ist besonders attraktiv
für funktionelle
Sprachen, wie z.B. JAVATM (JAVATM und
auf JAVA basierende Marken sind Marken oder eingetragene Marken
der Sun Microsystems, Inc., in den Vereinigten Staaten und anderen
Ländern),
Prolog, Lisp, Smalltalk, Scheme, Eiffel, Dylan, ML, Haskell, Miranda,
Oberon usw., die die gemeinsame Datennutzung (Data-Sharing), verzögerte Ausführung und
allgemein weniger berechenbare Ausführungsaufträge als die prozeduralen Sprachen
aufweisen. Siehe allgemein Jones & Lins,
Garbage Collection: Algorithms for Automatic Dynamic Memory Management,
pp. 1–41,
Wiley (1996) für
eine Besprechung von Garbage-Collection und den klassischen Algorithmen
dafür.
-
Drei
klassische Garbage-Collection-Verfahren sind die Reference Counting-,
Mark-Sweep- und kopierende (Copying) Speicherbereinigung. Die erste,
Reference Counting (Referenzzähler),
basiert darauf, dass die Zahl der Menge von Referenzen, z.B. Zeiger,
auf jedes Speicherobjekt von aktiven Speicherobjekten oder Wurzelreferenzstellen
gepflegt wird. Wenn ein neues Speicherobjekt alloziert wird und
ihm ein Zeiger zugewiesen wird, wird die Referenzzahl des Speicherobjekts
auf eins gesetzt. Dann wird jedesmal, wenn ein Zeiger als Referenz
auf ein Speicherobjekt gesetzt wird, die Referenzzahl des Speicherobjekts
inkrementiert. Wenn eine Referenz auf das Speicherobjekt gelöscht oder überschrieben
wird, wird die Referenzzahl dekrementiert. Speicherobjekte mit einer
Referenzzahl von null sind unerreichbar und können als nutzlose Objekte (Garbage) gesammelt
werden. Eine referenzzählende
Garbage-Collector-Implementierung hat gewöhnlich ein zusätzliches
Feld reference count (Referenzzahl), in jedem Speicherobjekt und
beinhaltet als Teil von Neues-Objekt-, Objekt-löschen- und
Zeiger-aktualisieren-Funktionen Inkrementier- und Dekrementierunterstützung.
-
Im
Gegensatz dazu beinhalten Tracing-Collector-Verfahren das Durchlaufen
von Referenzketten durch Speicher, um lebende, d.h. referenzierbare
Speicherobjekte, zu identifizieren. Ein derartiges Tracing-Collector-Verfahren
ist das Mark-Sweep- Verfahren,
bei dem Referenzketten durch Speicher durchlaufen werden, um lebende
Speicherobjekte zu identifizieren und zu markieren. Unmarkierte
Speicherobjekte sind nutzlose Objekte (Garbage) und werden gesammelt
und während
einer separaten Sweep-Phase zu dem freien Pool zurückgebracht.
Eine Mark-Sweep-Garbage-Collector-Implementierung hat meist ein zusätzliches
Feld, z.B. ein Markierungsbit, in jedem Speicherobjekt. Mark-Compact-Collectors
setzen dem traditionellen Mark-Sweep-Ansatz die Kompaktierung hinzu. Die
Kompaktierung reloziert lebende Objekte, um nützliche Verringerungen der
Fragmentierung zu erzielen. Die Kompaktierung kann auch bei Referenzzählverfahren
eingesetzt werden.
-
Ein
weiteres Tracing-Verfahren, Copying-Collection (kopierendes Sammeln),
unterteilt Speicher (oder einen Teil davon) in zwei Semispace-Bereiche,
von denen einer aktuelle Daten enthält und der andere alte Daten
enthält.
Kopierende Garbage-Collection
beginnt durch Umkehren der Aufgaben der beiden Bereiche. Der Copying-Collector traversiert
dann die lebenden Objekte in dem alten Bereich, FromSpace, und kopiert
erreichbare Objekte in den neuen Bereich, ToSpace. Wenn alle lebenden
Objekte in FromSpace durchlaufen und kopiert worden sind, besteht
in ToSpace eine Nachbildung der Datenstrukturen. Im Wesentlichen
sucht ein Copying-Collector lebende Objekte unter den nutzlosen
Objekten heraus. Eine nützliche
Nebenwirkung der Copying-Collection ist, dass lebende Objekte in
den ToSpace kompaktiert werden, wodurch die Fragmentierung verringert
wird.
-
Generationelle
(Generational) Ansätze
bauen auf den Beobachtungen auf, dass (1) Speicherobjekte meist
jung sterben und dass (2) Tracing-Verfahren beträchtliche Ressourcen für Durchlaufen,
Kopieren oder Relozieren von vergleichsweise langlebigen Objekten
aufwenden. Generationelle Garbage-Collection-Schemata unterteilen
den Heap in zwei oder mehr Generationen, wobei Objekte nach Alter
getrennt werden, und konzentrieren Sammlungsbemühungen (oder wenigstens energischere
Sammlungsbemühungen)
auf die jüngere(n)
Generation(en). Da die jüngste
Generation klein ist, können
mit Garbage-Collection verwandte Pausezeiten im Durchschnitt kurz
gehalten werden. Garbage-Collection innerhalb einer Generation kann
entweder durch Copying- oder Mark-Sweep-Collection erfolgen. Die
Beförderung
von Speicherobjekten von einer jüngeren
in eine ältere
Generation beinhaltet meist Kopieren.
-
Wegen
der Kosten des Kopierens großer
Objekte weisen einige generationelle Ansätze Bereiche für große Objekte
auf. Siehe z.B. Ungar und Jackson, Tenuring Policies for Generation-based
Storage Reclamation, ACM SIGPLAN Notices, 23(11), pp. 1–17 (1988),
Ungar und Jackson, An Adaptive Tenuring Policy for Generation Scavengers,
ACM Transactions on Programming Languages and Systems, 14(1), pp.
1–17 (1992). Meist
besteht die Technik darin, ein großes Objekt in einen im generationellen
Teil des Heaps gespeicherten Kopfteil und einen im Bereich für große Objekte
gespeicherten Hauptteil zu trennen. Die Kopfteile werden wie andere
Objekte herausgesucht, es werden aber keine Ressorcen zum Kopieren
der Hauptteile aufgebraucht. Ungar und Jackson fanden, dass Pausezeiten
um das Vierfache verringert werden konnten, indem 330 KByte einem
Bereich für
große
Objekte zugewiesen wurden.
-
Für interaktive
oder Echtzeit-Anwendungen ist die Kürze von Garbage-Collection-Pausen
ein wichtiger Vorteil. Traditionelle Implentierungen von Tracing-Garbage-Collectors
unterbrechen periodisch die Ausführung von
Anwendungsprogrammen, um Speicher in der Suche nach Speicherregionen
zu durchlaufen, die nicht mehr in Gebrauch sind. Leider erfordern
harte Echtzeitsysteme Worst-Case-Garantien, dass Ergebnisse rechtzeitig
berechnet werden. Selbst in nur interaktiven Systemen sollte die
Pausezeit begrenzt und kurz sein. So genannte inkrementelle Garbage-Collection-Verfahren
versuchen, langwierige Pausen zu vermeiden, die durch Start-und-Stopp-Bereinigung
verursacht werden, und verschachteln stattdessen die Sammlung mit
Anwendungsprogrammzyklen. Zum Erreichen dieses Ziels muss ein inkrementeller
Collector Heap-Zugriffe durch den Collector und das Anwendungsprogramm
(oft allgemeiner als Mutator bezeichnet) kohärent verwalten. Verzahnte Collectors,
z.B. in einem Multiprozessor, weisen ähnliche, aber striktere Anforderungen
für feinkörnige Snchronisation
auf.
-
Allgemein
werfen verschachtelte oder verzahnte relozierende Collectors Mehrfachleser-,
Mehrfachschreibersynchronisationsprobleme auf. Sowohl Lese- als
auch Schreibsperrenverfahren werden verwendet, um einen Mutator
durch Ändern
der Konnektivität
des Speicherobjekt-Referenzgraphs auf eine Weise, die das Durchlaufen
dieser durch den Collector stört,
am Unterbrechen der Garbage-Collection zu hindern. Siehe z.B. Steele,
Multiprocessing Compactifying Garbage Collection, Communications of
the ACM, 18(9), pp. 495–508 (1975)
(Schreibsperre, Mark-Sweep-Compact-Collection); Dijkstra et al., On-the-fly
Garbage Collection: An Exercise in Cooperation, Communications of
the ACM, 21(11), pp. 965–975
(1978) (Schreibsperre); Kung & Song,
An Efficient Parallel Garbage Collection System and its Correctness
Proof, IEEE Symposium on Foundations of Computer Science, pp. 120–131 (1977)
(Schreibsperre); Baker, List Processing in Real-time on a Serial
Computer, Communications of the ACM, 21(4), pp. 280–93 (1978)
(Lesesperre, Copying-Collector); Brooks, Trading Data Space for
Reduced Time and Code Space in Real-time Garbage Collection on Stock Hardware,
in Conference Record of the 1984 ACM Symposium on Lisp and Functional
Programming, Austin, Texas, pp. 256–262 (1984) (Schreibsperre,
Copying-Collector); und Dawson, Improved Effectiveness from a Real-time
Lisp Garbage Collector, Conference Record of the 1992 ACM Symposium
on Lisp and Functional Programming, San Francisco, Kalifornien,
pp. 159–167
(1982) (Schreibsperre, Copying-Collector).
-
Der
Symbolics 3600 stellte Hardware-Lesesperren- und -Schreibsperrenunterstützung für Copying-Collection
im Stil von Baker und zum Abfangen intergenerationeller Zeiger bereit.
Siehe Moon, Architecture of the Symbolics 3600, Proceedings of the
12th Annual International Symposium on Computer
Architecture, pp. 76–83
(1985). Die MIT Lisp-Maschine und der TI Explorer stellten ebenfalls
Hardware-Lesesperrenunterstützung für Copying-Collection
im Stil von Baker bereit. Nilsen und Schmidt beschreiben im US-Patent
Nr. 5,560,003 ein Garbage-Collected-Speichermodul, das Hardware-Lese- und
-Schreibsperren implementiert.
-
Zusätzlich zu
der grundlegenden Herausforderung des Verwaltens von Mutator-Zugriffen zum Verhindern
von Änderungen
der Konnektivität
des Speicherobjekt-Referenzgraphs
auf eine Weise, die das Durchlaufen des Collectors davon stören würde, sollte
ein Collector für
die Relokation mit begrenzter Pausezeit die zum Relozieren eines
großen
und/oder populären
Speicherobjektes erforderliche beträchtliche Zeitdauer ansprechen.
Ein Garbage-Collector kann sicherstellen, dass Speicherobjekte innerhalb
eines begrenzten Intervalls vollständig reloziert werden können, indem
große
Objekte, die mit dem begrenzten Intervall unverträglich sind, in
einen Bereich für
große
Objekte abgeschoben werden, die mit einem nichtrelozierenden Verfahren
gesammelt werden können
(siehe z.B. Ungar und Jackson, Tenuring Policies for Generation-based
Storage Reclamation, ACM SIGPLAN Notices, 23(11), pp. 1–17 (1988))
oder nicht gesammelt werden können.
Ansätze
für faules
oder inkrementelles Kopieren werden aber bevorzugt.
-
Bakers
Lösung
bestand darin, in den Kopf großer
Objekte ein zusätzliches
Verbindungswort aufzunehmen. In einer FromSpace-Instanz des Objekts
speicherte das Verbindungswort eine Weiterleitungsadresse zu einer
ToSpace-Instanz des Objekts. Nach dem Setzen der Weiterleitungs-
und Rückwärtsverbindungen
wurde das Objekt inkrementell kopiert. Felder großer Objekte
wurden wie kleine Objekte kopiert und auf Zeiger zurück in FromSpace-Objekte,
die noch nicht kopiert worden waren, abgetastet. Baker benutzte
die von einer Garbage-Collection-Variable, scan, definierte abgetastete/nicht
abgetastete Grenze, um Schreibzugriffe auf das teilweise kopierte
große
Objekt zu lenken. Die Kosten von Bakers Schema, abgesehen von einem
zusätzlichen Kopfwort,
waren eine Software-Schreibsperre für Schreibvorgänge in die
ToSpace-Instanz des großen
Objekts. Wenn die Adresse größer als
scan war, wurde der Schreibvorgang unter Verwendung der Rückwärtsverbindung
in der OldSpace-Instanz
durchgeführt;
ansonsten wurde der Schreibvorgang in der NewSpace-Instanz durchgeführt.
-
Nilsen
und Schmidt stellten eine Hardware-Lösung auf der Basis von Bakers
Copying-Collector vor. Im Besonderen sahen Nilsen und Schmidt ein
Garbage-Collected-Speichermodul
vor, bei dem eine Hardware-Lesesperre die Illusion aufrecht erhält, dass
das Sammeln abgeschlossen ist. Ein Hardware-Arbiter in dem Garbage-Collected-Speichermodul
stellte eine Hardware-Lesesperre vom Baker-Typ bereit und stellte außerdem Lese-
und Schreibsperren für
Zugriffe in einen noch nicht kopierten Teil einer Objektinstanz
in ToSpace bereit. Das Garbage-Collected-Speichermodul pflegte die
Speicheradressregister, um den Anfang und das Ende des unkopierten
Teils anzuzeigen. Lese- und Schreibzugriffe auf den unkopierten
Teil wurden zur FromSpace-Instanz geleitet.
-
US 5 293 614 beschreibt
einen weiteren Garbage-Collector, der eine Schreibsperre implementiert,
die Objektaktualisierungen zu einer ersten und zweiten Instanz davon
sendet.
-
ZUSAMMENFASSUNG
DER ERFINDUNG
-
Gemäß der vorliegenden
Erfindung ist eine Vorrichtung zur Verwendung in einem Garbage-Collection-System
zum Verwalten der Konsistenz von Speicherobjektinstanzen während der
Relokation eines bestimmten Speicherobjekts in einem Computersystem
vorgesehen, das Relokation des genannten bestimmten Speicherobjekts
mit begrenzter Pausezeit bereitstellt, wobei die Vorrichtung einen
Speicher umfasst, bei dem darin gebildete Objekte von jeweiligen
FromSpace-Instanzen zu jeweiligen ToSpace-Instanzen davon relozierbar
sind, wobei die Vorrichtung ferner gekennzeichnet ist durch: einen
Kennzeichnerspeicher für
teilweise relozierte Objekte, der aktualisiert werden kann, um eines
der genannten Objekte, falls vorhanden, für das die Relozierung unvollständig ist,
zu kennzeichnen, und eine Schreibsperre für einen speicherorientierten
Speicherzugriff, die ausgeführt
ist, um auf die genannte FromSpace-Instanz des genannten bestimmten
Objekts abzuzielen, und für
einen speicherorientierten Speicherzugriff zum Abzielen auf die
genannte ToSpace-Instanz des genannten bestimmten Objekts, wobei
die genannte Schreibsperre die Konsistenz zwischen der genannten
ToSpace-Instanz und wenigstens einem kopierten Teil der genannten
FromSpace-Instanz aufrecht erhält, und
wobei die genannte Schreibsperre die inkrementelle Aktualisierung
von Zeigern auf das genannte bestimmte Objekt zulässt, wobei
die genannte Schreibsperre auf eine Übereinstimmung zwischen einem
Objektkennzeichner für
den genannten speicherorientierten Speicherzugriff und dem Inhalt
des genannten Kennzeichnerspeichers für teilweise relozierte Objekte
reagiert, wobei die genannte Schreibsperre in Reaktion auf die Übereinstimmung
Speicherdaten für
den genannten speicherorientierten Speicherzugriff zu der genannten FromSpace- und der genannten
ToSpace-Instanz sendet.
-
Dementsprechend
wurde entdeckt, dass eine Schreibsperre für Speichervorgänge in ein
teilweise reloziertes großes
und/oder populäres
Speicherobjekt Implementierungen mit begrenzter Pausezeit von relozierenden
Garbage-Collectors, einschließlich
z.B. Copying-Collectors und Kompaktierung bietende Collectors, erleichtert.
Kennzeichnerspeicherung für
teilweise relozierte Objekte und eine darauf reagierende Schreibsperre
erlauben die Unterbrechung der Relokation großer und/oder populärer Speicherobjekte
durch eine Garbage-Collector-Implementierung, um Garantien für begrenzte
Pausezeiten gegenüber
einem Mutator-Prozess zu erfüllen.
-
Ein
Kennzeichnerspeicher für
teilweise relozierte Objekte, der für Schreibsperrenlogik zugängliche „Kopieren
von"-Kennzeichner-
und „Kopieren
zu"-Kennzeichnerspeicherung
hat, erlaubt der Schreibsperrenlogik, die Konsistenz zwischen FromSpace-
und ToSpace-Instanzen eines teilweise relozierten Speicherobjekts
ohne Software-Trap-Handler-Overhead aufrecht zu erhalten. Fakultativer „Wie weit"-Anzeigespeicher
erleichtert die Unterscheidung durch die Schreibsperrenlogik zwischen
einem kopierten Teil und einem unkopierten Teil des teilweise relozierten
Speicherobjekts. Eine fakultative „Modus"-Anzeige erleichtert die Unterscheidung
durch die Schreibsperrenlogik zwischen einer Kopierphase und einer
Zeigeraktualisierungsphase der Relokation durch die Garbage-Collector-Implementierung.
In einigen Ausgestaltungen können
Zeigeraktualisierungs- und Kopierphasen überlappen. „Kopieren zu"-Kennzeichnerspeicherung
erleichtert das Senden eines speicherorientierten Speicherzugriffs
auf die FromSpace-Instanz zu der FromSpace- und der ToSpace-Instanz.
Desgleichen erleichtert während
der Zeigeraktualisierung „Kopieren
zu"- und „Kopieren
von"-Kennzeichnerspeicherung
das Senden eines speicherorientierten Speicherzugriffs auf die FromSpace-Instanz
oder die ToSpace-Instanz zu der FromSpace- und auch der ToSpace-Instanz.
-
Einige
Ausgestaltungen unterscheiden eventuell nicht zwischen Zeigeraktualisierungs-
und Kopierphasen oder zwischen kopierten und unkopierten Teilen
des teilweise relozierten Objekts. Darüber hinaus erlaubt „Kopieren
zu"- und „Kopieren
von"-Kennzeichnerspeicherung
zwar vorteilhaft, dass die Schreibsperrenlogik die Konsistenz zwischen
FromSpace- und ToSpace-Instanz eines teilweise relozierten Speicherobjekts ohne
Software-Trap-Handler-Overhead aufrecht erhält, aber einige Ausgestaltungen
können
einen solchen Software-Trap-Handler aufweisen. Verschiedene alternative
Funktionalitätszuweisungen
zwischen Schreibsperrenlogik und einem Trap-Handler für teilweise
relozierte Objekte sind vorgesehen und fallen in den Umfang der
Ansprüche.
-
KURZE BESCHREIBUNG DER
ZEICHNUNGEN
-
Die
vorliegende Erfindung kann durch Bezugnahme auf die Begleitzeichnungen
besser verständlich werden
und ihre zahlreichen Aufgaben, Merkmale und Vorteile können fachkundigen
Personen ersichtlich gemacht werden.
-
1a und 1b (die
hierin kollektiv als 1 bezeichnet
werden) sind jeweils ein Blockdiagramm einer beispielhaften Ausgestaltung
eines Hardware-Prozessors
einer virtuellen Maschine, der Unterstützung für Garbage-Collector-Implementierungen
mit begrenzter Pausezeit gemäß dieser
Erfindung aufweist.
-
2 ist
eine Abbildung der „zugrunde
liegenden" Beziehungen
zwischen Software- und Hardware-Komponenten einer JAVA-Anwendungsumgebung
mit Hardware-Prozessor (1) und Software-Komponenten
einer beispielhaften Implementierung einer JAVA virtuellen Maschine.
-
3 illustriert
mehrere mögliche
Zusätze
(Add-ons) für
den Hardware-Prozessor
von 1.
-
4a und 4b (die
hierin kollektiv als 4 bezeichnet
werden) sind Abbildungen einer Ausgestaltung eines Kennzeichnerspeichers
für teilweise
relozierte Objekte und eines beispielhaften Speicherobjekt-Referenzgraphs
gemäß einer
Semispace-Speicherorganisation für
einen Copying-Garbage-Collector vor dem Kopieren.
-
5 ist
eine Abbildung des Kennzeichnerspeichers für teilweise relozierte Objekte
und die Semispace-Speicherorganisation von 4 während des
Kopierens eines großen
Objekts von FromSpace zu ToSpace.
-
6 ist
eine Abbildung von Zugriffen eines Copying-Collector-Prozesses und
eines Mutator-Prozesses von FromSpace- und ToSpace-Teilen eines
Sammel-Speicherbereichs,
der ein teilweise reloziertes großes Objekt aufweist. 6 illustriert
die Funktionsweise einer Schreibsperre des Hardware-Prozessors von 1 in Verbindung mit dem Kennzeichnerspeicher
für teilweise
relozierte Objekte der 4 und 5.
-
7 ist
eine Abbildung einer Ausgestaltung eines Garbage-Collection-Systems
mit begrenzter Pausezeit mit einer Sperre zu einer Kopieren-von-Instanz
eines teilweise relozierten Objekts und einem Trap-Handler dafür.
-
8 ist
eine Abbildung einer Ausgestaltung eines Garbage-Collection-Systems
mit begrenzter Pausezeit mit einer Hardware-Sperre zu Speichervorgängen zu
einer Kopieren-von-Instanz eines teilweise relozierten Objekts und
mit einem Kennzeichnerspeicher für
teilweise relozierte Objekte mit Kopieren-von- und Kopieren-zu-Instanz-Kennzeichnern.
Die Ausgestaltung von 8 sendet selektiv Speichervorgänge zu der
Kopieren-von-Instanz und der Kopieren-zu-Instanz des teilweise relozierten
Objekts.
-
9 ist
eine Abbildung einer Ausgestaltung eines Garbage-Collection-Systems
mit begrenzter Pausezeit mit einer Hardware-Sperre zu Speichervorgängen zu
einer Kopieren-von-Instanz eines teilweise relozierten Objekts und
mit einem Kennzeichnerspeicher für
teilweise relozierte Objekte mit einem Kopieren-von-Instanz-Kennzeichner, einem
Kopieren-zu-Instanz-Kennzeichner und einem Kennzeichner für die Kopiert/Unkopiert-Grenze.
Die Ausgestaltung von 9 leitet oder sendet Speichervorgänge je nach
dem Zustand der teilweisen Relokation des teilweise relozierten
Objekts selektiv, um inkrementelles Kopieren zuzulassen.
-
10 ist
eine Abbildung einer Ausgestaltung eines Garbage-Collection-Systems mit begrenzter
Pausezeit mit Sperren zu Kopieren-von- und Kopieren-zu-Instanzen eines teilweise
relozierten Objekts und mit einem Kennzeichnerspeicher für teilweise
relozierte Objekte mit Kopieren-von- und Kopieren-zu-Instanz-Kennzeichnern. Die
Ausgestaltung von 10 lässt inkrementelles Kopieren
und die inkrementelle Zeigeraktualisierung zu.
-
11 ist
eine Abbildung einer Ausgestaltung eines Garbage-Collection-Systems mit begrenzter
Pausezeit mit Sperren zu Speichervorgängen zu Kopieren-von- und Kopieren-zu-Instanzen
eines teilweise relozierten Objekts und mit einem Kennzeichnerspeicher
für teilweise
relozierte Objekte mit einem Kopieren-von-Instanz-Kennzeichner, einem
Kopieren-zu-Instanz-Kennzeichner, einem Kennzeichner für die Kopiert/Unkopiert-Grenze
und einem Garbage-Collection-Phasenkennzeichner. Die Ausgestaltung
von 11 leitet oder sendet selektiv Speichervorgänge je nach
dem Zustand der teilweisen Relokation des teilweise relozierten
Objekts und der Garbage-Collection-Phase,
um inkrementelles Kopieren und die inkrementelle Zeigeraktualisierung
zuzulassen.
-
12 ist
eine Abbildung einer Ausgestaltung eines Garbage-Collection-Systems mit begrenzter
Pausezeit mit Sperren zu Ladevorgängen von einer Kopieren-von-Instanz eines
teilweise relozierten Objekts und zu Speichervorgängen zu
der Kopieren-von-Instanz und mit einem Kennzeichnerspeicher für teilweise
relozierte Objekte mit einem Kopieren-von-Instanzkennzeichner, einem
Garbage-Collection-Phasenanzeiger
und einem Trap-Handler für
teilweise relozierte Objekte. Die Ausgestaltung von 12 leitet
oder sendet selektiv Speichervorgänge und leitet selektiv Ladevorgänge selektiv,
um inkrementelles Kopieren und die inkrementelle Zeigeraktualisierung
und in einigen Variationen überlappende
Kopieren-von- und Kopieren-zu-Instanzen zuzulassen.
-
13 ist
eine Abbildung einer Ausgestaltung eines Garbage-Collection-Systems mit begrenzter
Pausezeit mit Sperren zu Ladevorgängen von einer Kopieren-von-Instanz eines
teilweise relozierten Objekts und zu Speichervorgängen zu
der Kopieren-von-Instanz und mit einem Kennzeichnerspeicher für teilweise
relozierte Objekte mit einem Kopieren-von-Instanzkennzeichner, einem
Kopieren-zu-Instanzkennzeichner
und einem Garbage-Collection-Phasenanzeiger. Die Ausgestaltung von 13 leitet
oder sendet selektiv Speichervorgänge und leitet selektiv Ladevorgänge um,
um inkrementelles Kopieren und die inkrementelle Zeigeraktualisierung
zuzulassen.
-
14 ist
eine Abbildung einer Ausgestaltung eines Garbage-Collection-Systems mit begrenzter
Pausezeit mit Sperren zu Ladevorgängen von einer Kopieren-von-Instanz eines
teilweise relozierten Objekts und zu Speichervorgängen zu
der Kopieren-von-Instanz und mit einem Kennzeichnerspeicher für teilweise
relozierte Objekte mit einem Kopieren-von-Instanzkennzeichner, einem
Kopieren-zu-Instanzkennzeichner,
einem Kennzeichner für
die Kopiert-/Unkopiert-Grenze und einem Garbage-Collection-Phasenanzeiger.
Die Ausgestaltung von 13 leitet oder sendet selektiv
Speichervorgänge
und leitet selektiv Ladevorgänge
um, um inkrementelles Kopieren, die inkrementelle Zeigeraktualisierung
und überlappende
Kopieren-zu- und Kopieren-von-Instanzen zuzulassen.
-
15 ist
eine Abbildung des Betriebs eines Garbage-Collection-Systems mit
begrenzter Pausezeit, der überlappende
FromSpace- und ToSpace-Teile eines teilweise relozierten großen Objekts
zulässt.
-
16 ist
eine Abbildung eines Objektreferenz(objectref)-Formats gemäß einer
Ausgestaltung dieser Erfindung.
-
17A ist eine Abbildung eines Objektformats gemäß einer
Ausgestaltung dieser Erfindung.
-
17B ist eine Abbildung eines alternativen mit
Handle versehenen Objektformats gemäß einer Ausgestaltung dieser
Erfindung.
-
Die
Benutzung derselben Bezugssymbole in verschiedenen Zeichnungen zeigt ähnliche
oder identische Teile an.
-
BESCHREIBUNG DER BEVORZUGTEN
AUSGESTALTUNG(EN)
-
Im
Folgenden wird eine ausführliche
Beschreibung der besten erwogenen Ausführungsart für die Erfindung dargelegt.
Die Beschreibung soll die Erfindung veranschaulichen und darf nicht
als begrenzend ausgelegt werden.
-
Zu
der architekturellen Unterstützung
für Implementierungen
mit begrenzter Pausezeit von relozierenden Garbage-Collectors zählen Speicher
zum Kennzeichnen von Stellen, von denen (und, in einigen Ausgestaltungen,
zu denen) ein großes
und/oder populäres
Speicherobjekt reloziert wird. Ein großes Objekt, wie hierin benutzt,
ist ein beliebiges Speicherobjekt einer/eines solchen Größe, Struktur
oder Inhalts, dass die Relokation des vollständigen Speicherobjekts, möglicherweise
mit Aktualisierungen von Referenzen darauf, unter Worst-Case-Bedingungen
mit Garantien für
begrenzte Pausezeit einer Garbage-Collector-Implementierung unverträglich sein
kann. Ausgestaltungen gemäß der vorliegenden
Erfindung weisen unterschiedliche Grade an Konservatismus mit Bezug
auf operative Definitionen eines großen Objekts auf. Beispielsweise
können
einige Ausgestaltungen eine Größenschwelle
einsetzen, während
andere in der Berechnungsart für
große
Objekte Referenzzahlen beinhalten können. Noch andere Ausgestaltungen,
besonders diejenigen, die im Wesentlichen auf Hardware basieren,
können
die hierin beschriebene architekturelle Unterstützung ungeachtet der Speicherobjektgröße nutzen.
Ein populäres
Objekt, wie hierin benutzt, ist ein beliebiges Speicherobjekt, das
eine Referenzzahl hat, so dass die Relokation des Speicherobjekts,
einschließlich
Aktualisierungen von Referenzen darauf, unter Worst-Case-Bedingungen
mit Garantien für
begrenzte Pausezeit einer Garbage-Collector-Implementierung unverträglich sein
kann. Wie oben weisen Ausgestaltungen gemäß der vorliegenden Erfindung
unterschiedliche Grade an Konservatismus mit Bezug auf operative
Definitionen eines populären Objekts
auf.
-
Allgemein
können
Ausgestaltungen gemäß der vorliegenden
Erfindung hierin beschriebene architekturelle Unterstützung zum
Relozieren von großen
Objekten, populären
Objekten, großen
und populären
Objekten, allen Objekten (einschließlich großen und/oder populären Objekten,
aber nicht darauf begrenzt) usw. einsetzen. Derartige architekturelle
Unterstützung
kann zwar in Hardware, in Software oder in einer Kombination aus
Hardware und Software bereitgestellt werden, aber Ausgestaltungen,
in denen die architekturelle Unterstützung im Wesentlichen in Hardware
erfolgt, bieten meist Vorteile hinsichtlich besserer Leistung und
geringerem Speicherbedarf. Aus diesem Grund wird hierin eine beispielhafte
Hardware-Prozessor-Ausgestaltung
beschrieben. Auf der Grundlage dieser Beschreibung können fachkundige
Personen aber alternative Ausgestaltungen erkennen, die in den Umfang
der nachfolgenden Ansprüche
fallen.
-
Der
relozierende Garbage-Collector (Relocating Garbage Collector), wie
hierin benutzt, ist ein beliebiger Garbage-Collector, der als Teil
seines Betriebs Speicherobjekte reloziert, einschl. z.B. Copying-Collectors, generationelle
Collectors und Collectors, die Kompatierung oder Objektrelokation
zum Verringern der Fragmentierung und/oder Verbessern der Lokalität bereitstellen.
Echtzeit-Implementierungen
oder Implementierungen mit begrenzter Pausezeit derartiger relozierender
Garbage-Collectors werden meist als ein inkrementeller Garbage-Collection-Softwareprozess
implementiert, dessen Berechnungen mit Benutzerprozesstätigkeit
verschachtelt sind. Fachkundige Personen werden aber verzahnte Garbage-Collection-Implementierungen
auf der Basis der Beschreibung hierin erkennen. Des Weiteren werden
fachkundige Personen geeignete Modifikationen, einschließlich dem
Bereitstellen von Speicher zum Identifizieren von mehrfachen teilweise
relozierten Objekten, zum Unterstützen von Implementierungen
paralleler Collection erkennen.
-
Eine Ausgestaltung eines
Prozessors für
Anweisungen der JAVA virtuellen Maschine
-
1 zeigt eine beispielhafte Hardware-Ausgestaltung
eines Prozessors für
Virtuelle-Maschine-Anweisungen 100, im Folgenden Hardware-Prozessor 100 genannt,
der Unterstützung
für relozierende
Garbage-Collection mit begrenzter Pausezeit gemäß der vorliegenden Erfindung
beinhaltet und Prozessorarchitektur-unabhängige JAVA Virtuelle-Maschine-Anweisungen
direkt ausführt.
Die Leistung des Hardware-Prozessors 100 beim
Ausführen
von Virtuelle-Maschine-Anweisungen ist meist besser als High-End-CPUs,
wie der Intel PENTIUM-Mikroprozessor oder der Sun Microsystems ULTRASPARC-Prozessor
(alle SPARC-Marken werden unter Lizenz benutzt und sind Marken oder
eingetragene Marken von SPARC International, Inc., in den Vereinigten
Staaten und anderen Ländern.
SPARC-Marken tragende Produkte basieren auf einer von Sun Microsystems,
Inc. entwickelten Architektur. PENTIUM ist eine Marke der Intel
Corp. von Sunnyvale, Kalifornien), wobei die gleichen Virtuelle-Maschine-Anweisungen
mit einem Software-JAVA-Interpreter oder mit einem JAVA Just-in-Time(JTT-)Compiler
interpretiert werden. Außerdem
ist der Hardware-Prozessor 100 kostengünstig und weist einen niedrigen
Energieverbrauch auf. Infolgedessen eignet sich der Hardware-Prozessor 100 gut
für portable
Anwendungen.
-
Weil
der Hardware-Prozessor 100 eine Prozessorimplementierung
für JAVA
Virtuelle-Maschine-Anweisungen im Wesentlichen in Hardware bereitstellt,
können
25–50
Kilobyte (KByte) Speicher, z.B. Festwertspeicher oder Arbeitsspeicher,
die sonst von einem Software-Interpreter benötigt werden, eliminiert oder
alternativ alloziert werden. Hardware-Unterstützung für Garbage-Collection stellt
weitere Vorteile für
eine JAVA Virtuelle-Maschine-Implementierung mit begrenztem Speicher
bereit, indem Inline-Code für
Garbage-Collection (z.B. vom Compiler gelieferte Lese- und/oder
Schreibsperrenunterstützung)
reduziert wird, eine bessere Nutzung von begrenztem Speicher gefördert wird
und Garbage-Collection-Overheads und -Pausezeiten verringert werden.
In Umgebungen, wo die Kosten eines großen Speichers untragbar sind,
einschließlich
z.B. einem Internet-Chip für
Netzgeräte,
einem Mobiltelefonprozessor, anderen integrierten Telekommunikationsschaltungen
oder anderen kostengünstigen
Anwendungen mit geringem Energieverbrauch wie eingebetteten Prozessoren
und tragbaren Geräten,
ist der Hardware-Prozessor 100 vorteilhaft.
-
Selbst
in Umgebungen, in denen großer
Speicher tragbar ist, reduziert Hardware-Unterstützung für Garbage-Collection mit Sperrenimplementierungen verbundene
Oberheads, fördert
eine bessere Speichernutzung und reduziert Pausezeiten für relozierende
Garbage-Collector-Implementierungen. Im Besonderen ergibt der Hardware-Prozessor 100 Vorteile
für Garbage-Collection-Verfahren
und -Implementierungen im Rahmen einer beispielhaften Implementierung
einer JAVA virtuellen Maschine. Auf der Grundlage der Beschreibung hierin
erkennen fachkundige Personen aber Variationen für andere Implementierungen
der JAVA virtuellen Maschine, einschließlich z.B. interpretierte und
JIT-Compiler-Implementierungen der JAVA virtuellen Maschine, sowie
andere nicht-JAVA virtuelle-Maschine-Implementierungen.
-
Eine
virtuelle Maschine, wie hierin benutzt, ist eine abstrakte Rechenmaschine,
die wie eine reale Rechenmaschine einen Anweisungssatz hat und verschiedene
Speicherbereiche benutzt. Eine virtuelle Maschinenspezifikation
definiert einen Satz von Prozessorarchitektur-unabhängigen Virtuelle-Maschine-Anweisungen,
die von einer Virtuelle-Maschine-Implementierung ausgeführt werden.
Allgemein kann eine Virtuelle-Maschine-Implementierung in Hardware
(z.B. wie im Fall des Hardware-Prozessors 100),
in Software (z.B. wie im Fall von interpretierten und JIT-Compiler-Implementierungen)
oder in Hardware und Software sein. Jede Virtuelle-Maschine-Anweisung definiert
eine spezifische durchzuführende
Operation. Es ist nicht notwendig, dass die virtuelle Maschine die
Computersprache, die zum Erzeugen von Virtuelle-Maschine-Anweisungen
verwendet wird, oder die zugrunde liegende Implementierung der virtuellen
Maschine versteht. Nur ein bestimmtes Format für Virtuelle-Maschine-Anweisungen
muss verstanden werden. In einer beispielhaften Ausgestaltung sind
die Virtuelle-Maschine-Anweisungen JAVA Virtuelle-Maschine-Anweisungen. Jede
JAVA Virtuelle-Maschine-Anweisung hat wenigstens ein Byte, das anweisungsidentifizierende
Informationen, Operanden und beliebige andere benötigte Informationen
codiert.
-
In
dieser Ausgestaltung verarbeitet der Hardware-Prozessor 100 (1) die Anweisungen der JAVA virtuellen
Maschine, die Bytecodes beinhalten. Der Hardware-Prozessor 100 führt die
meisten der Bytecodes direkt aus. Die Ausführung einiger der Bytecodes
wird aber über
Mikrocode implementiert. Lindholm & Yellin, The JA JAVATM Virtual
Machine Specification (Addison-Wesley, 1996), ISBN 0-201-63452-X,
das durch Bezugnahme in seiner Ganzheit hierin eingebunden ist,
enthält
einen beispielhaften Satz von Anweisungen der JAVA virtuellen Maschine.
Der von einem Hardware-Prozessor 100 unterstützte jeweilige
Satz von Virtuelle-Maschine-Anweisungen
ist kein essentieller Aspekt dieser Erfindung. Hinsichtlich der
Virtuelle-Maschine-Anweisungen
können
fachkundige Personen die Erfindung aber für einen bestimmten Satz von
Virtuelle-Maschine-Anweisungen oder für Änderungen an der Spezifikation
der JAVA virtuellen Maschine modifizieren.
-
In
einer Ausgestaltung hat der Hardware-Prozessor 100 einen
E/A-Bus und eine Speicherschnittstelle 110, eine Befehls-Cache-Einheit 120 mit
Befehlscache 125, eine Befehls-Decoder-Einheit 130 mit
Unschnell-Schnell-Übersetzer-Cache 131,
eine vereinigte Ausführungseinheit 140,
eine Stack-Management-Einheit 150 mit Stack-Cache 155,
eine Daten-Cache-Einheit 160 mit Daten-Cache 165,
und Programmzähler- und Trap-Steuerlogik 170.
Die Unterstützung
für hierin
beschriebene Garbage-Collection-Merkmale
ruht hauptsächlich
in der Integer-Einheit 142 und dem Register 144 der
Ausführungseinheit 140 mit
etwas zusätzlicher Unterstützung in
der Programmzähler-
und Trap-Steuerlogik 170 (einschließlich z.B. Unterstützung zum
Zwingen des Programmzählers
zu einer nächsten
JAVA Virtuelle-Maschine-Anweisung nach einem abfangenden (Trapping-)Speichervorgang).
Jede dieser Einheiten wird unten beschrieben. Außerdem wird eine beispielhafte
Ausgestaltung des Hardware-Prozessors 100 in
der als WO 97/27536 veröffentlichten
internationalen PCT-Anmeldung
mit dem Titel „INSTRUCTION
FOLDING FOR A STACK-BASED MACHINE" ausführlicher beschrieben.
-
2 ist
eine Abbildung einer „zugrunde
liegenden" Beziehung
zwischen Software- und Hardware-Komponenten einer JAVA-Anwendungsumgebung,
wie z.B. einer Anwendungsumgebung, die von einem Hardware-Prozessor 100 (1) definiert wird und teilweise ausführbar ist.
JAVA Anwendung-/Applet-Software 210 nutzt Software-Komponenten,
die eine Applet-/Anwendungsprogrammierschnittstelle 220 mit
den Software-Komponten AWT-Klassen 214, Netz- und E/A-Klassen 242 und
JAVA OS-Fenster 243, JAVA OS-Grafik 248, TCP 244,
NFS 245, UDP 246, IP 247, Ethernet 222,
Tastatur 249 und Maus 221 definieren, die in einer Ausgestaltung
JAVA Bytecodes aufweisen. In der Ausgestaltung von 2 können die
Software-Komponenten
JAVA OS-Grafik 248 und Ethernet 222 auch erweiterte
Bytecodes einschließen,
die über
die von der Basislinien-Spezifikation der JAVA virtuellen Maschine
definierten hinausgehen. Zu den Komponenten einer eingebetteten
Anwendungsprogrammierschnittstelle (EAPI) 230 zählen Grundklassen 231 und
Hardware- und Software-Komponenten der Implementierung der JAVA
virtuellen Maschine 250 gemäß der Spezifikation der JAVA
virtuellen Maschine.
-
Die
Implementierung der JAVA virtuellen Maschine 250 hat Hardware-Prozessor 100 und
darin ausführbaren
Trap-Code zum Evaluieren von JAVA Virtuelle-Maschine-Anweisungen. Außerdem hat
die Implementierung der JAVA virtuellen Maschine 250 Hardware-Unterstützung für erweiterte
Bytecodes (einschließlich
z.B. Zeigerspeicher-Bytecodes und Speicherzugriffssperren, die unten
im Kontext der Garbage-Collection beschrieben werden); Software
für Klassenlader 252,
Bytecode-Verifier 253,
Thread-Manager 254 und Garbage-Collector 251 sowie
Mikrokernel 255. Die Implementierung der JAVA virtuellen
Maschine 250 hat einen mit der Spezifikation der JAVA virtuellen
Maschine konformen Teil 250a sowie implementierungsabhängige Teile. Die
Spezifikation der JAVA virtuellen Maschine schreibt zwar vor, dass
Garbage-Collection bereitgestellt wird, das jeweilige eingesetzte
Garbage-Collection-Verfahren ist aber implementierungsabhängig.
-
Hierin
im Kontext einer beispielhaften Ausgestaltung als Hardware-Prozessor 100 der
Implementierung der JAVA virtuellen Maschine 250 beschriebene
Architekturmerkmale für
die Garbage-Collection sind speziell für generationelle Garbage-Collection-Verfahren
ausgeführt.
Auf der Grundlage dieser Beschreibung erkennen fachkundige Personen
aber die Anwendung von Unterstützung
für begrenzte
Pausezeit dieser Erfindung für
relozierende Collectors im Allgemeinen, darunter z.B. nichtgenerationelle
Collector-Implementierungen, inkrementelle Mark-Compact-Collectors, Copying
Collectors usw.
-
3 illustriert
mehrere mögliche
Zusätze
(Add-ons) für
den Hardware-Prozessor 100 zum
Schaffen eines komplizierteren Systems. Jede beliebige der acht
gezeigten Funktionen, d.h. NTSC-Codierer 501, MPEG 502,
Ethernet-Controller 503, VIS 504, ISDN 505,
E/A-Controller 506, ATM-Assemblieren/Neuassemblieren 507 und
Funkverbindung 508 unterstützende Schaltungen können in
den gleichen Chip wie der Hardware-Prozessor 100 dieser
Erfindung integriert werden.
-
Außerdem erkennen
fachkundige Personen eine große
Palette von den Hardware-Prozessor 100 einbindenden Computersystemen,
darunter Ausgestaltungen des Hardware-Prozessors 100 mit
einer beliebigen der oben beschriebenen Zusatzschaltungen. Eine
beispielhafte Computersystemausgestaltung hat physischen Speicher
(z.B. RAM und/oder ROM), Zugriffseinrichtungen für maschinenlesbare Datenträger (z.B.
Diskette, CD-ROM, Band und/oder auf Speichertechnologie gestützte Zugriffseinrichtungen
für maschinenlesbare Datenträger), Eingabe-/Ausgabegerätschnittstellen
(z.B. Schnittstellen für
Tastatur und/oder Zeigegeräte,
für Sichtgeräte usw.)
und Kommunikationsvorrichtungen und/oder -schnittstellen. Zu den
geeigneten Kommunikationsvorrichtungen und/oder -schnittstellen
gehören
diejenigen für
netz- und telefoniegestützte
Kommunikation, für
den Anschluss an Kommunikationsnetze einschließlich Drahtleitungs- und/oder
drahtlose Abschnitte eines öffentlichen
Wählnetzes,
Privatnetze usw. In einigen Ausgestaltungen dieser Erfindung werden
Anweisungsströme
(einschließlich
z.B. JAVA Bytecodes) über
derartige Kommunikationsvorrichtungen oder -schnittstellen zur Ausführung durch
den Hardware-Prozessor 100 gesendet und/oder empfangen.
-
Architekturelle
Unterstützung
für Garbage-Collection
-
Hardware-Prozessor 100 stellt
Hardware-Unterstützung
für verschiedene
Garbage-Collection-Verfahren bereit, einschließlich relozierenden Collector-Verfahren,
die als darin ausführbare
Garbage-Collection-Software implementiert sind. Im Besonderen hat
der Hardware-Prozessor 100 einen Kennzeichnerspeicher für teilweise
relozierte Objekte und Sperrenunterstützung. In einigen Ausgestaltungen
beinhaltet eine solche Sperrenunterstützung Schreibsperrenunterstützung für vom Programmierer
auswählbares
Filtern von Speichervorgängen
und/oder Unterstützung
für Ausführungszeitauflösung von
Speicherbytecodes zu zeigerspezifischen Bytecodes zum Fördern des
Abfangens (Trapping) von Zeigerspeichervorgängen.
-
Kennzeichnerspeicher für teilweise
relozierte Objekte
-
4A ist
eine Abbildung einer Ausgestaltung eines Kennzeichnerspeichers für teilweise
relozierte Objekte 410 mit einem Von-Feld (From-Feld) 411,
einem Zu-Feld (To-Feld) 412 und einem Wie-weit-Feld (Howfar-Feld) 413. 4B zeigt
Speicherteile FromSpace 420 und ToSpace 430 gemäß einem
Copying-Collector-Verfahren. In einer generationellen Collector-Implementierung
können
die Teile FromSpace 420 und ToSpace 430 Semispace-Bereiche
einer einzelnen Generation bzw. Teile von jungen und alten Generationsbereichen
sein. Alternativ können
die Teile FromSpace 420 und ToSpace 430 Semispace-Bereiche
in einem nichtgenerationellen Collection-Bereich sein. Des Weiteren
können
die Bereiche FromSpace 420 und ToSpace 430 überlappen,
einzeln zusammenhängend
oder nichtzusammenhängend
sein, haben nicht unbedingt eine feste Größe oder haben feste Stellen
im Speicher. Außerdem
werden in einigen Ausgestaltungen mehrere FromSpace- und ToSpace-Teile
mit geeigneten Modifikationen an dem Kennzeichnerspeicher für teilweise
relozierte Objekte 410 und den Sperren, die hierin beschrieben
werden, unterstützt. 4B bildet
einen ersten Referenzierungszustand von lebenden Speicherobjekten
A, B, C und dem großen
Objekt 450 vor dem Kopieren in den ToSpace 430 ab.
Der Wurzelzeigersatz 440 ist für jeden beliebigen Wurzelzeigersatz
in die Referenzstruktur repräsentativ,
einschließlich
z.B. Zeiger, die aus Einträgen
des Operanden-Stacks und/oder dem von Stack-Cache 155 repräsentierten
lokalen Variablenspeicher stammen.
-
5 ist
eine Abbildung eines zweiten Referenzierungszustands des Kennzeichnerspeichers
für teilweise
relozierte Objekte 410, des FromSpace 420 und
des ToSpace 430 bei Unterbrechung der Relokation des großen Objektes 450.
Lebende Objekte A und B wurden zu entsprechenden Instanzen A' und B' in ToSpace 430 kopiert.
Bei der Unterbrechung des Kopierens hat das große Objekt 450 einen
kopierten Teil 551 und einen unvollständig kopierten Teil 552.
Der Inhalt des kopierten Teils 551 des großen Objekts 450 wurde zu
einem entsprechenden Teil 551a einer ToSpace 430-Instanz des großen Objekts 450 kopiert.
ToSpace-430-Speicher für
den restlichen unvollständig
kopierten Teil des großen
Objekts 450 wird als Teil 552a gezeigt. Das Von-Feld 411 kennzeichnet
das große
Objekt 450 in FromSpace 420, Zu-Feld 412 kennzeichnet die
entsprechende teilweise relozierte Instanz 450a des großen Objekts 450 und
Wie-weit-Feld 413 kennzeichnet eine Grenze zwischen dem
kopierten Teil 551 und dem unvollständig kopierten Teil 552 des
großen
Objekts 450. Ein Überlappungskopierrichtungsfeld
(nicht gezeigt) ist fakultativ. In einer Ausgestaltung hat ein solches Kopierrichtungsfeld
ein Kopierrichtungsbit, dessen Zustand eine Vorwärts- oder Rückwärtsrichtung für das Kopieren
von überlappten
FromSpace- und ToSpace-Instanzen anzeigt. In anderen Ausgestaltungen
wird die Kopierrichtung von den relativen Werten des Von-Feldes 411 und
des Zu-Feldes 412 abgeleitet, wie fachkundige Personen
erkennen können.
-
Das
Wie-weit-Feld 413 zeigt den Fortschritt beim Kopieren eines
großen
Objekts an und/oder aktiviert Schreibsperrenhardware und einen Trap-Handler
für teilweise
relozierte Objekte zum entsprechenden Handhaben von Mutatorzugriffen
auf ein teilweise kopiertes großes
Objekt. In der Ausgestaltung von 5 zeigt das
Wie-weit-Feld 413 die
Adresse im Speicher der Grenze zwischen dem kopierten Teil 551 und
dem unkopierten Teil 552 an. Trotzdem werden fachkundige
Personen auf der Grundlage dieser Beschreibung eine Reihe verschiedener
geeigneter alternativer Codierungen erkennen, darunter z.B. einen
Index ab der vom Von-Feld 411 angezeigten Speicherstelle,
eine Anzeige einer entsprechenden Grenze in der ToSpace-Instanz 550a des
großen
Objekts 450 usw. Das Wie-weit-Feld 413 codiert
jede derartige geeignete Anzeige.
-
In 6,
auf die jetzt Bezug genommen wird, wird der Kennzeichnerspeicher 410 für das teilweise
relozierte Objekt im Kontext des Mutator-Prozesses 610 und
des Garbage-Collector-Prozesses 620 gezeigt. In der Ausgestaltung
von 6 werden der Mutator-Prozess 610 und
der Garbage-Collector-Prozess 620 jeweils von JAVA Virtuelle-Maschine-Anweisungen
definiert, die von dem Hardware-Prozessor 100 ausführbar sind. Garbage-Collector-Prozess 620 beinhaltet
jeden beliebigen relozierenden Collector. Die folgende Beschreibung
ist zwar für
den oben mit Bezug auf 5 beschriebenen Semispace-Copying-Collector,
fachkundige Personen erkennen aber die Anwendbarkeit auf andere
relozierende Collectors. Im Lauf des Kopierens des großen Objekts 450 von
FromSpace 420 zu ToSpace 430 liest der Garbage-Collector-Prozess 620 aus
dem Sammelbereich 630 und schreibt in ihn.
-
In
einer Ausgestaltung aktualisiert der Garbage-Collector-Prozess 620 Von-Feld 411 und
Zu-Feld 412 am Anfang des Kopierens des großen Objekts 450 und
aktualisiert das Wie-weit-Feld 413 während des Kopierens, so dass
das Wie-weit-Feld 413 bei der Unterbrechung durch den Mutator-Prozess 610 die
Grenze zwischen dem kopierten Teil 551 und dem unkopierten
Teil 552 anzeigt. In Ausgestaltungen für einem simultanen Ablauf von
Mutator-Prozess 610 und Garbage-Collection-Prozess 620 (z.B.
in einem Multiprozessor) wird das Sperren (Lock) von Wie-weit-Feld 413 bereitgestellt
und fachkundige Personen werden geeignete Verfahren dafür erkennen.
Alternative Ausgestaltungen können
fakultativ auf inkrementelles Aktualisieren des Wie-weit-Feldes 413 zugunsten
einer Aktualisierung bei Unterbrechung verzichten.
-
Mutator-Prozess 610 liest
aus dem und schreibt in den Speicher, der den Sammelbereich 630 hat.
In einer Ausgestaltung hat der Hardware-Prozessor 100 Unterstützung durch
Integer-Einheit 142 für
eine Sperre 660, die Objektreferenzinformationen (z.B.
eine objectref) mit Inhalt des Von-Felds 411, des Zu-Felds 412 oder beiden
vergleicht. Eine Übereinstimmung
mit Inhalt des Von-Felds 411 zeigt an, dass das referenzierte
Objekt die FromSpace 420-Instanz des teilweise relozierten
großen
Objekts 450 ist. Eine Übereinstimmung
mit Inhalt des Zu-Felds 412 zeigt an, dass das referenzierte
Objekt die teilweise kopierte ToSpace 430-Instanz 450a ist. In
einigen Ausgestaltungen wird die Evaluierung des jeweiligen Feld-Offsets
in das referenzierte Objekt zum Verfeinern der Handhabung kopierter
und unkopierter Teile des referenzierten Objekts durch die Sperre 660 mit
dem Inhalt des Wie-weit-Felds 413 verglichen.
-
In
verschiedenen Ausgestaltungen, die unten spezifischer beschrieben
werden, hat die Sperre 660 eine Schreibsperrenunterstützung, die
auf den Kennzeichnerspeicher für
teilweise relozierte Objekte 410 reagiert. In einigen Ausgestaltungen
hat die Sperre 660 auch eine Lesesperrenunterstützung, die
auf den Kennzeichnerspeicher für
teilweise relozierte Objekte 410 reagiert. In einigen Ausgestaltungen
hat die Sperre 660 Hardware-Lese- und/oder -Schreibsperrenunterstützung zum
Abfangen zu einem Software-Trap-Handler für teilweise relozierte Objekte,
der den Abfangzugriff (z.B. durch Senden eines Schreibzugriffs,
Umleiten eines Schreibzugriffs, Umleiten eines Lesezugriffs oder
Zulassen eines normalen Abschließens eines Zugriffs) entsprechend
handhabt. In anderen Ausgestaltungen stellt eine Hardware-Lese-
und/oder -Schreibsperre selbst ein geeignetes Handhaben ohne Software-Trap-Handler-Overhead
bereit.
-
In
einigen Ausgestaltungen wird Relokation mit begrenzter Pausezeit
von Elementen der Sperre 660 bereitgestellt, die inkrementelles
Kopieren eines großen
und/oder populären
Objekts erlauben, während
Zeigeraktualisierungen daran über
ein Objekt-Referenz-Handle erfolgen. In solchen Ausgestaltungen
werden Zeigeraktualisierungen zu geraden populären Objekten trivial durch
die Aktualisierung eines einzelnen Zeigers bereitgestellt, d.h.
des Objekt-Referenz-Handles. In anderen Ausgestaltungen weist von
Elementen der Sperre 660 bereitgestellte Relokation mit
begrenzter Pausezeit Unterstützung
für inkrementelles
Aktualisierungen von Zeigern auf ein populäres und möglicherweise großes Objekt
auf. Relokation mit begrenzter Pausezeit, wie hierin benutzt, beinhaltet
Kopieren und Zeigeraktualisierung. Fachkundige Personen werden die
Anwendbarkeit von hierin beschriebenen Ausgestaltungen auf die Relokation
mit begrenzter Pausezeit von großen Objekten, auf Relokation
mit begrenzter Pausezeit von populären Objekten und auf Relokation
mit begrenzter Pausezeit von großen, populären Objekten erkennen. Objektreferenzierung
mit und ohne Handle wird unten noch ausführlicher beschrieben.
-
Je
nach dem/den von einer bestimmten Ausgestaltung des Hardware-Prozessors 100 unterstützten Garbage-Collection-Verfahren
kann Schreib- und/oder Lesesperrenunterstützung bereitgestellt sein,
um zu verhindern, dass der Mutator-Prozess 610 den Garbage-Collector-Prozess 620 stört, indem
die Konnektivität des
Speicherobjekt-Referenzgraphs so geändert wird, dass das Durchlaufen
der Collectors durch ihn gestört wird.
Beispielsweise sind in einer Ausgestaltung des Hardware-Prozessors 100 vom
Programmierer auswählbare
Hardware-Schreibsperren für
intergenerationelle Zeigerspeichervorgänge, für alle Zeigerspeichervorgänge und
für alle
Speichervorgänge
(einschließlich
Unterstützung
für gefilterte
Sperrenvarianten von jedem) bereitgestellt.
-
In
einer Ausgestaltung der Sperre 660 ist die Unterstützung für derartige
zusätzliche
Sperren in die oben beschriebene Sperre zu Speichervorgängen in
ein teilweise reloziertes großes
Objekt integriert.
-
In
Ausgestaltungen gemäß 1 hat ein Trap-Handler für teilweise
relozierte Objekte JAVA Virtuelle-Maschine-Anweisungsbytecodes,
die auf dem Hardware-Prozessor 100 ausführbar sind
und von der Programmzähler-
und Trap-Steuerlogik 170 eingeleitet werden. Garbage-Collection-Traps,
einschließlich
z.B. ein Trap für
teilweise relozierte Objekte, werden ausgelöst, bevor der Abfangschreibvorgang
selbst evaluiert wird. Daher emuliert der Trap-Handler für teilweise
relozierte Objekte 650 den abfangenden Schreibvorgang zusammen
mit den zusätzlichen
mit der Garbage-Collection
verwandten Funktionen, um zu verhindern, dass der Prozessor unendlich
abfängt.
In einer Ausgestaltung zwingt die Programmzähler- und Trap-Steuerlogik 170 dann nach
dem abfangenden Schreibvorgang den Programmzähler zur nächsten JAVA Virtuelle-Maschine-Anweisung.
Auf der Grundlage der folgenden ausführlicheren Beschreibung werden
fachkundige Personen eine Reihe gültiger Verhalten für einen
Trap-Handler für
teilweise relozierte Objekte erkennen, je nach den erzwungenen Konsistenzrichtlinien.
-
Garbage-Collection
wurde zwar oben allgemein mit Bezug auf die veranschaulichende Ausgestaltung in 6 des
Kennzeichnerspeichers für
teilweise relozierte Objekte 410 mit Von-Feld 411,
Zu-Feld 412, Wie-weit-Feld 413 und im Kontext
einer Sperre 660, die möglicherweise
einen Trap-Handler für
teilweise relozierte Objekte aufweist, beschrieben, verschiedene
alternative Ausgestaltungen sind aber ebenfalls geeignet. In vielen
dieser alternativen Ausgestaltungen kann ein Trap-Handler für teilweise
relozierte Objekte eliminiert werden und Mutator-Prozess-Zugriffe können mit
Hardware-Sperrenunterstützung
richtig gehandhabt werden, wodurch mit einem Trap-Handler verbundener
Overhead verringert wird. Auf der Grundlage der folgenden Beschreibung
von beispielhaften Ausgestaltungen werden fachkundige Personen verschiedene
zusätzliche Kombinationen
und Variationen erkennen, die in den Umfang der Ansprüche fallen.
-
Mit Kopieren-von-Instanz-Kennzeichnerspeicher
verbundene Schreibsperre
-
7 ist
eine Abbildung einer Ausgestaltung mit einem Kopieren-von-Registerfeld mit
einer assoziierten Schreibsperre. Im Besonderen hat die Ausgestaltung
von 7 das Von-Feld 411 des Kennzeichnerspeichers
für teilweise
relozierte Objekte 410 (siehe 4),
die Hardware-Schreibsperre 740 und den Trap-Handler für teilweise
relozierte Objekte 750. In der Ausgestaltung von 7 wird
das Von-Feld 411 in Registern 144 des Hardware-Prozessors 100 repräsentiert.
Mutator-Prozess 610, Garbage-Collector-Prozess 620 und Trap-Handler
für teilweise
relozierte Objekte 650 weist im Hardware-Prozessor 100 ausführbare Software
auf. Diese Ausgestaltung erleichtert das inkrementelle Kopieren
großer
Objekte. Ohne zusätzliche
Unterstützung ist
diese Ausgestaltung aber zum inkrementellen Aktualisieren großer Mengen
von Zeigern auf die ToSpace 430-Instanz eines populären relozierten
Objekts nicht so gut geeignet. Für
Garbage-Collection-Systeme, in denen Objekte beispielsweise über Handles
referenziert werden, wie unten mit Bezug auf 17B beschrieben wird,
verringert eine solche Ausgestaltung aber trotzdem Hardware-Anforderungen
und ist für Relokation
mit begrenzter Pausezeit realisierbar, da Aktualisieren eines einzelnen
Handles zu der ToSpace 430-Instanz trivial sein kann.
-
Der
Mutator-Prozess 610 führt
Lese- und Schreibzugriffe auf den und aus dem Sammelbereich 630 durch.
Lesezugriffe werden von der Garbage-Collection-Unterstützung nicht beeinflusst. Schreibzugriffe
werden aber von der Hardware-Schreibsperre 740 selektiv
abgefangen. Die Hardware-Schreibsperre 740 löst den Trap-Handler für teilweise
relozierte Objekte 750 in Reaktion auf eine Entsprechung
zwischen dem Inhalt des Von-Felds 411 und dem mit dem Schreibzugriff 701 assozierten
Ziel objectref aus. In dieser Ausgestaltung bestimmt der Trap-Handler
für teilweise
relozierte Objekte 750 Speicherplatz für die Kopieren-zu-Zielortinformationen,
wie die sonst im Zu-Feld 412 gespeicherten, oder pflegt
fakultativ Speicher dafür.
Außerdem
kann Garbage-Collection-Software fakultativ Speicher für Wie-weit-Informationen
wie die sonst im Wie-weit-Feld 413 gespeicherten pflegen.
Wenn der Mutator-Prozess 610 zu der FromSpace 420-Instanz
des großen
Objekts speichert, werden Speicherdaten entweder zu der Kopieren-von-Instanz 450 und
der Kopieren-zu-Instanz 450A gesendet oder in Ausgestaltungen,
die Speicher für
Wie-weit-Informationen
bereitstellen, wird der Wie-weit-Speicher überprüft und der Speichervorgang
zu beiden Instanzen gesendet, wenn das Gespeichert-zu-Feld des großen Objekts
bereits kopiert wurde, und ansonsten zu der Kopieren-von-Instanz 450 geleitet.
Fachkundige Personen werden verschiedene Verfahren erkennen, mit
denen der Garbage-Collector-Prozessor 620 die dem Trap-Handler
für teilweise
relozierte Objekte 750 verfügbaren Speichervariablen des
Zu-Felds und des Wie-weit-Felds 751 aktualisieren kann.
Die Aktualisierung 701 erfolgt nach einem solchen geeigneten
Verfahren.
-
Wie
oben beschrieben, aktualisiert der Garbage-Collector-Prozess 620 das
Von-Feld 411 des
Kennzeichnerspeichers für
teilweise relozierte Objekte 410 zum Kennzeichnen der Kopieren-von-Instanz 450 des großen Objekts.
In dieser Ausgestaltung stehen dem Mutator-Prozess 610 keine
Zeiger auf die Kopieren-zu-Instanz
zur Verfügung,
bis das Handle für
das große
Objekt nach Abschluss des Kopierens aktualisiert worden ist. Daher
brauchen keine Sperren für
Zugriffe auf die Kopieren-zu-Instanz 450A aufrecht erhalten
zu werden. Diese Ausgestaltung ist nicht für überlappte Kopieren-von- und
Kopieren-zu-Instanzen konfiguriert, Unterstützung für überlappte Instanzen ist aber
für viele
relozierende Collector-Verfahren, z.B. generationelle heraussuchende
(Scavenging) oder kopierende Collector-Verfahren, nicht nötig.
-
In
einer Ausgestaltung wird die Hardware-Schreibsperre
740 von
der Logik der Integer-Einheit
142 (
1)
bereitgestellt, die für
die Evaluierung eines speicherorientierten Bytecodes (z.B. putfield_quick,
putfield, aastore usw.) zuständig
ist. In einer solchen Ausgestaltung fangt die logikimplentierende
Hardware-Schreibsperre
740 Schreibvorgänge zu der Kopieren-von-Instanz
ab, die durch den Inhalt des Von-Felds
411 gekennzeichnet
wird. Beispielsweise wird das erwünschte Verhalten der Hardware-Schreibsperre
640A mit
den folgenden Logikgleichungen beschrieben:
wobei gc_notify ein beispielhafter
Trap-Handler ist. Fachkundige Personen werden verschiedene geeignete Logikimplementierungen
erkennen, einschließlich
Logikimplementierungen, die andere Schreibsperrenfunktionalität, wie intergenerationelles
Zeigerspeicherungsabfangen, wie oben beschrieben, kombinieren. Fakultativ können Wie-weit-Informationen
als Wie-weit-Feld
413 in Registern
144 (siehe
4, in
7 nicht
abgebildet) bereitgestellt werden, um das Abfangen durch die Hardware-Schreibsperre
740 besser
nur auf jene Situationen zuzuschneiden, in denen Rundsenden notwendig
ist, wodurch mit Aufrufen des Trap-Handlers für teilweise relozierte Objekte
750 verbundene
Overheads verringert werden.
-
8 ist
eine Abbildung einer Ausgestaltung mit einem Kopieren-zu-Registerfeld (z.B.
Zu-Feld 412) zusätzlich
zu einem Kopieren-von-Registerfeld (z.B. Von-Feld 411)
mit zugehöriger
Schreibsperre 840. Die Ausgestaltung von 8 stellt
eine Schreibsperre für
Speichervorgänge
zu Feldern eines Objekts bereit, die von dem Inhalt des Von-Felds 411 gekennzeichnet
werden, und vorteilhaft den Trap-Handler für teilweise relozierte Objekte 750 und
die mit ihm verbundenen Overheads eliminiert. Diese Ausgestaltung
erleichtert das inkrementelle Kopieren (mit begrenzter Pausezeit)
großer
Objekte, wie das von 7 eignet es sich aber nicht so
gut für
die Aktualisierung mit begrenzter Pausezeit von großen Mengen
von Zeigern auf die ToSpace 430-Instanz eines kopierten
Objekts. Wie oben können
Objektreferenzen mit Handle diese Begrenzung mildern, was allgemeine
Relokation mit begrenzter Pausezeit selbst von populären großen Objekten
erlaubt, wenn auch auf Kosten einer zusätzlichen Indirektionsebene.
-
Durch
Pflegen eines Kopieren-zu-Registerfelds in Hardware, z.B. als Zu-Feld
412 in
Registern
144, können
Schreibzugriffe auf die Kopieren-von-Instanz von der Hardware-Schreibsperre
840 ohne
Intervention durch den Software-Trap-Handler zu der Kopieren-von-
und der Kopieren-zu-Instanz gesendet werden. In einer Ausgestaltung
wird die Hardware-Schreibsperre
840 von der Logik der Integer-Einheit
142 (
1) bereitgestellt, die für die Evaluierung
eines speicherorientierten Bytecodes zuständig ist. In einer solchen
Ausgestaltung sendet die logikimplementierende Hardware-Schreibsperre
840 store_data
zu der Kopieren-von- und der Kopieren-zu-Instanz, die von objectref
bzw. dem Inhalt des Zu-Felds
412 gekennzeichnet werden.
Eine beispielhafte Hardware-Schreibsperre
840 wird mit
den folgenden Logikgleichungen beschrieben:
wobei offset der Offset des
mit dem speicherorientierten Bytecode assoziierten Zielfelds in
das große
Objekt ist. Fachkundige Personen werden verschiedene geeignete Logikimplementierungen
erkennen, einschließlich Logikimplementierungen,
die andere Schreibsperrenfunktionalität, wie intergenerationelles
Zeigerspeicherungsabfangen, wie oben beschrieben, kombinieren. Weil
das Zu-Feld
412 für
die Hardware-Schreibsperre
840 verfügbar ist, kann das Rundsenden
in Hardware durchgeführt
werden und der Software-Trap-Overhead wird eliminiert.
-
9 ist
eine Abbildung einer Ausgestaltung mit Kopieren-zu- und Wie-weit-Registerfeld (z.B.
Zu-Feld 412 und Wie-weit-Feld 413) zusätzlich zu
einem Kopieren-von-Registerfeld
(z.B. Von-Feld 411) mit assoziierter Hardware-Schreibsperre 940.
Die Ausgestaltung von 9 stellt eine Schreibsperre
für Speichervorgänge zu Feldern
eines Objekts bereit, die durch den Inhalt des Von-Felds 411 gekennzeichnet
werden, und erlaubt es der Hardware-Schreibsperre 940 vorteilhaft,
auf das Senden von Speichervorgängen
zu einem noch nicht kopierten Teil des großen Objekts zu verzichten,
während
es den Trap-Handler für
teilweise relozierte Objekte 650 und die mit ihm verbundenen
Overheads eliminiert. Wie die obigen Ausgestaltungen erleichtert
auch diese Ausgestaltung inkrementelles Kopieren von großen Objekten,
ist aber für
die Aktualisierung mit begrenzter Pausezeit von großen Mengen
von Zeigern auf die ToSpace 430-Instanz eines kopierten
Objekts nicht so gut geeignet. Wie zuvor können mit Handle versehene Objektreferenzen
diese Begrenzung mildern, was allgemeine Relokation mit begrenzter
Pausezeit selbst von populären
großen
Objekten erlaubt, wenn auch auf Kosten einer zusätzlichen Indirektionsebene.
-
Durch
Pflegen eines Kopieren-zu-Registerfelds in Hardware, z.B. als Zu-Feld
412 in
Registern
144, können
Schreibzugriffe auf die Kopieren-von-Instanz von der Hardware-Schreibsperre
940 zu
der Kopieren-von- und der Kopieren-zu-Instanz gesendet werden. Indem
ferner ein Wie-weit-Registerfeld in Hardware, z.B. als Wie-weit-Feld
413 in
Registern
144, gepflegt wird, kann das Rundsenden auf jene
Schreibzugriffe begrenzt werden, für die das betreffende Zielfeld
des Schreibzugriffes bereits zu ToSpace
430 kopiert wurde.
In jedem Fall erfolgt die Handhabung des Schreibzugriffs auf das
teilweise relozierte Objekt ohne Software-Trap-Handler-Intervention. In
einer Ausgestaltung wird die Hardware-Schreibsperre
940 von
der Logik der Integer-Einheit
142 (
1)
bereitgestellt, die für
die Evaluierung eines speicherorientierten Bytecodes zuständig ist.
In einer solchen Ausgestaltung sendet die logikimplementierende
Hardware-Schreibsperre
940 store_data zu der Kopieren-von- und der Kopieren-zu-Instanz,
wenn das Zielobjektfeld in einem bereits kopierten Teil des großen Objekts
ist, und leitet store_data zu der Kopieren-von-Instanz, wenn das
Zielobjektfeld in einem noch nicht kopierten Teil des großen Objektes
ist. Eine beispielhafte Hardware-Schreibsperre
940 wird von
den folgenden Logikgleichungen beschrieben.
wobei offset der Offset des
mit dem speicherorientierten Bytecode assoziierten Zielfelds in
das große
Objekt ist. In einigen Ausgestaltungen kann das Leiten von store_data
zu der Kopieren-von-Instanz bereitgestellt werden, indem einfach
der Schreibzugriff ohne Intervention der Hardware-Schreibsperre
940 normal
abgeschlossen werden darf. Fachkundige Personen werden verschiedene
geeignete Logikimplementierungen erkennen, einschließlich Logikimplementierungen,
die andere Schreibsperrenfunktionalität, wie intergenerationelles
Zeigerspeicherungsabfangen, wie oben beschrieben, kombinieren. Weil
das Wie-weit-Feld
413 für
die Hardware-Schreibsperre
940 verfügbar ist,
kann die Hardware-Schreibsperre
940 selektiv auf das Schreiben
von store_data zu der Kopieren-zu-Instanz verzichten. Diese leichte
Optimierung kann die Leistung verbessern, indem nur ein einziger
Schreibvorgang durchgeführt
wird, anstatt dass zwei Schreibvorgänge gesendet werden.
-
Mit Kopieren-von- und
Kopieren-zu-Instanz-Kennzeichnerspeicher assoziierte Schreibsperre
-
Im
Folgenden werden zusätzliche
Ausgestaltungen mit Bezug auf die 10 und 11 beschrieben. Wie
einige der bereits beschriebenen Ausgestaltungen nutzen diese zusätzlichen
Ausgestaltungen Hardware-Unterstützung
(z.B. eine Hardware-Schreibsperre
und Kennzeichnerspeicher für
teilweise relozierte Objekte 410) zum entsprechenden Handhaben
von Schreibvorgängen
zur FromSpace 420-Instanz eines teilweise relozierten großen Objekts
ohne Intervention durch einen Software-Trap-Handler. Außerdem stellen diese zusätzlichen
Ausgestaltungen aber eine Sperre für Schreibvorgänge zu der
ToSpace 430-Instanz eines teilweise relozierten großen Objekts
bereit. So unterstützen
diese zusätzlichen
Ausgestaltungen inkrementelles Kopieren eines großen Objekts
und inkrementelles Aktualisieren von Zeigern auf ein populäres Objekt
für allgemeine
Relokation mit begrenzter Pausezeit von großen und/oder populären Objekten
ohne mit Handle versehene Objektreferenzen.
-
In
den Ausgestaltungen der 10 und 11 aktualisiert
der Garbage-Collector-Prozess 620 Zeiger (z.B.
objectref) auf das große
Objekt inkrementell. Schreibzugriffe des Mutator-Prozesses 610 auf
die FromSpace 420-Instanz oder die ToSpace 430-Instanz
werden von einer Hardware-Schreibsperre, z.B. Hardware-Schreibsperre 1040 oder
Hardware-Schreibsperre 1140, gesendet (oder entsprechend
geleitet), so dass die zwei Instanzen „synchron" gehalten werden, während die objectrefs aktualisiert
werden. Weil die zwei Instanzen synchron gehalten werden, ist die
Speicherreferenzierungsstruktur zu Referenzierungszuständen robust,
in denen sich einige objectrefs auf eine FromSpace 420-Instanz
beziehen und andere sich auf die entsprechende ToSpace 430-Instanz
beziehen. Die Aktualisierung mit begrenzter Pausezeit von objectrefs
mit Bezug auf das große
Objekt wird durch inkrementelles Aktualisieren derartiger objectrefs
erzielt, so dass sie sich auf die ToSpace 430-Instanz (statt
auf die FromSpace 420-Instanz) beziehen. Es ist zu beachten,
dass die FromSpace 420-Instanz und die ToSpace 430-Instanz
in den Ausgestaltungen von 10 und 11 nicht überlappen
dürfen.
-
Die
Hardware-Schreibsperre 1040, Bezug nehmend auf 10,
stellt eine Sperre für
Schreibzugriffe auf entweder die Kopieren-von-Instanz 450 oder
die Kopieren-zu-Instanz 450A bereit. Die Hardware-Schreibsperre 1040 unterstützt inkrementelles
Kopieren mit begrenzter Pausezeit, wie es oben mit Bezug auf die Hardware-Schreibsperre 840 beschrieben
wird. Die Hardware-Schreibsperre 1040 reagiert auch auf
das Kopieren-zu-Registerfeld (z.B. Zu-Feld 412). Schreibzugriffe
auf die Kopieren-von-Instanz 450 oder die Kopieren-zu-Instanz 450A werden
sowohl zu der Kopieren-von-Instanz 450 als auch der Kopieren-zu-Instanz 450A gesendet,
so dass die Datenzustände
der zwei Instanzen synchronisiert werden. Auf diese Weise können objectrefs
auf das teilweise relozierte große Objekt inkrementell aktualisiert
werden, da ein Lesezugriff auf eine der Instanzen dem gleichen Feldzustand
zugeordnet wird.
-
In
einer Ausgestaltung wird die Hardware-Schreibsperre
1040 von
der Logik der Integer-Einheit
142 (
1),
die für
das Evaluieren eines speicherorientierten Bytecodes zuständig ist,
bereitgestellt. In einer solchen Ausgestaltung sendet die logikimplementierende
Hardware-Schreibsperre
1040 store_data zu der Kopieren-von- und der Kopieren-zu-Instanz,
die durch den Inhalt des Von-Felds
411 bzw. des Zu- Felds
412 gekennzeichnet
wird. Eine beispielhafte Hardware-Schreibsperre
1040 wird
von den folgenden Logikgleichungen beschrieben.
wobei
offset der Offset des mit dem speicherorientierten Bytecode assoziierten
Zielfelds in das große
Objekt ist. Fachkundige Personen werden verschiedene geeignete Logikimplementierungen
erkennen, einschließlich Logikimplementierungen,
die andere Schreibsperrenfunktionalität, wie intergenerationelles
Zeigerspeicherungsabfangen, wie oben beschrieben, kombinieren. Weil
das Von-Feld
411 und das Zu-Feld
412 für die Hardware-Schreibsperre
1040 verfügbar ist,
können
die davon jeweils identifizierten Speichervorgänge zu der Kopieren-von-Instanz
450 bzw.
der Kopieren-zu-Instanz
450A erkannt werden und das Senden
zu beiden Instanzen kann in Hardware ohne Software-Trap-Overhead durchgeführt werden.
-
11 ist
eine Abbildung einer Ausgestaltung, die ein Wie-weit-Registerfeld
(z.B. Wie-weit-Feld 413) und eine Modusanzeige (z.B. Modusfeld 1114 der
Register 144) hinzufügt.
Wie in der Ausgestaltung von 10 stellt
die Hardware-Schreibsperre 1140 eine Sperre für Schreibzugriffe
auf die Kopieren-von-Instanz 450 oder die Kopieren-zu-Instanz 450A bereit.
Die Hardware-Schreibsperre 1140 unterstützt inkrementelles Kopieren
mit begrenzter Pausenzeit, indem sie sicherstellt, dass kopierte
Teile der Instanzen FromSpace 420 und ToSpace 430 synchron
gehalten werden. Die Hardware-Schreibsperre 1140 erlaubt
dem Hardware-Prozessor 100 vorteilhaft, auf das Senden
von Speichervorgängen
zu einem noch nicht kopierten Teil des großen Objekts während einer
Kopierphase zu verzichten, die in der Ausgestaltung von 11 von
einem Copy-Moduszustandfeld 1114 angezeigt wird. Während einer
Zeigeraktualisierungsphase, die von einem PTR_UPDATE-Moduszustandsfeld 1114 angezeigt
wird, werden aber Schreibzugriffe auf die Kopieren-von-Instanz 450 oder
die Kopieren-zu-Instanz 450A zu der Kopieren-von-Instanz 450 und
auch der Kopieren-zu- Instanz 450A gesendet.
Der Garbage-Collector-Prozess 620 aktualisiert das Modusfeld 1114,
so dass es einer aktuellen Phase einer Relokation eines großen Objekts
entspricht.
-
In
einer Ausgestaltung wird die Hardware-Schreibsperre
1140 von
der Logik der Integer-Einheit
142 (
1),
die für
das Evaluieren eines speicherorientierten Bytecodes zuständig ist,
bereitgestellt. In einer solchen Ausgestaltung sendet die logikimplementierende
Hardware-Schreibsperre
1140 store_data zu der Kopieren-von- und der Kopieren-zu-Instanz,
wenn das Zielobjektfeld in einem bereits kopierten Teil des großen Objektes
ist oder wenn das große
Objekt vollständig
kopiert worden ist und die Relokation eine Zeigeraktualisierungsphase
begonnen hat. Während
der Kopierphase leitet die logikimplementiertende Hardware-Schreibsperre
1140 store_data
zu der Kopieren-von-Instanz, wenn das Zielobjektfeld sich in einem
noch nicht kopierten Teil des großen Objekts befindet. Eine
beispielhafte Hardware-Schreibsperre
1140 wird
von den folgenden Logikgleichungen beschrieben.
wobei
im Moduszustandsfeld
1114 MODE eine Relokationsphase (z.B.
COPY oder PTR_UPDATE) anzeigt und offset der Offset des mit dem
speicherorientierten Bytecode assoziierten Zielfelds in das große Objekt
ist. Fachkundige Personen werden verschiedene geeignete Logikimplementierungen
erkennen, einschließlich
Logikimplementierungen, die andere Schreibsperrenfunktionalität, wie intergenerationelles
Zeigerspeicherungsabfangen, wie oben beschrieben, kombinieren. Weil
das Wie-weit-Feld
413 und das Modus-Feld
1114 für die Hardware-Schreibsperre
1140 verfügbar ist,
kann die Hardware-Schreibsperre
1140 selektiv auf das Schreiben
von store_data zu der Kopieren-zu-Instanz während der Kopierphase einer
Relokation eines großen
Objekts verzichten, wobei sie während
der Zeigeraktualisierungsphase Schreibvorgänge sendet. Diese leichte Optimierung
kann die Leistung verbessern, indem während der Kopierphase nur ein
einziger Schreibvorgang durchgeführt
wird, anstatt dass zwei Schreibvorgänge gesendet werden. Außerdem kann
der Relokationsmodus dadurch angezeigt werden, dass der Garbage-Collector-Prozess
620 den
Abschluss der Kopierphase in einem Zustand des Wie-weit-Felds
413 codiert.
Fachkundige Personen werden erkennen, dass in den obigen Logikgleichungen
ein Wert des Wie-weit-Felds
413 von weniger als oder gleich
null (0) verwendet werden kann, um den Abschluss der Kopierphase
zu codieren, wodurch das Modusfeld
1114 vermieden wird.
-
Mit dem Kopieren-von-Instanz-Kennzeichnerspeicher
assoziierte Lese- und Schreibsperren
-
Im
Folgenden werden zusätzliche
Ausgestaltungen mit Bezug auf die 12 bis 14 beschrieben. Wie
einige der bereits beschriebenen Ausgestaltungen nutzen diese zusätzlichen
Ausgestaltungen Hardware-Unterstützung
(z.B. eine Hardware-Schreibsperre
und einen Kennzeichnerspeicher für
teilweise relozierte Objekte 410) zum geeigneten Handhaben
von Schreibvorgängen
zu der FromSpace 420-Instanz eines teilweise relozierten
großen
Objekts. Diese zusätzlichen
Ausgestaltungen stellen aber auch eine Sperre für Lesevorgänge aus einer FromSpace 420-Instanz
eines teilweise relozierten großen
Objektes bereit. So unterstützen
diese zusätzlichen
Ausgestaltungen sowohl Kopieren mit begrenzter Pausezeit als auch
Aktualisierung mit begrenzter Pausezeit von Zeigern auf das große Objekt
ohne mit Handle versehenen Objektreferenzen.
-
In
den Ausgestaltungen der 12 bis 14 kopiert
der Garbage-Collector-Prozess 620 das
große Objekt
während
einer Kopierphase (MODE = COPY) aus einer FromSpace 420-Instanz
zu einer ToSpace 430-Instanz und aktualisiert Zeiger (d.h.
objectrefs) während
einer Zeigeraktualisierungsphase (MODE = PTR_UPDATE) inkrementell.
Während
der Kopierphase der Relokation eines großen Objektes werden Schreibzugriffe
des Mutator-Prozesses 610 zu der FromSpace 420-Instanz
gesendet oder von einem Trap-Handler für teilweise relozierte Objekte,
z.B. Trap-Handler für
teilweise relozierte Objekte 1250 (12), oder
mit einer Hardware-Schreibsperre, z.B. Hardware-Schreibsperre 1340 (13)
oder Hardware-Schreibsperre 1440 (14), entsprechend
geleitet. Während
der Zeigeraktualisierungsphase der Relokation großer Objekte
werden die Mutator-Prozess 610 Schreib- und Lesezugriffe
zu der FromSpace 420-Instanz zu der ToSpace 430-Instanz
umgeleitet.
-
12 ist
eine Abbildung einer Ausgestaltung mit einem Kopieren-von-Registerfeld mit
assoziierten Lese- und Schreibsperren. Im Besonderen weist die Ausgestaltung
von 12 Von-Feld 411, Hardware-Lesesperre 1242,
Hardware-Schreibsperre 1241 und
Trap-Handler für
teilweise relozierte Objekte 1250 auf. Die Hardware-Lesesperre 1242 und
die Hardware-Schreibsperre 1241 werden veranschaulichend
als Lese- und Schreibsperren-Hardware 1240 gezeigt. Je
nach der Implementierung können
die Hardware-Schreibsperre 1241 und die Hardware-Lesesperre 1242 Hardware
aber gemeinsam nutzen oder auf separater Hardware basieren. In einer
Ausgestaltung stellt eine Logik der Integer-Einheit 142 (1), die für die Evaluierung von speicherorientierten
Bytecodes zuständig
ist, die Hardware-Schreibsperre 1241 bereit,
und die Logik der Integer-Einheit 142, die für die Evaluierung
von ladevorgangorientierten Bytecodes (z.B. getfield_quick, getfield, aaload
usw.) zuständig
ist, stellt die Hardware-Lesesperre 1242 bereit.
-
Der
Mutator-Prozess 610 führt
Lese- und Schreibzugriffe von dem und auf den Sammelbereich 630 durch.
Ein bestimmter Lese- oder Schreibzugriff wird von der Lese- und
Schreibsperren-Hardware 1240 selektiv abgefangen, wenn
der Lese- oder Schreibzugriff auf die FromSpace 420-Instanz
eines teilweise relozierten Objekts abzielt. Die Lese- und Schreibsperren-Hardware 1240 löst den Trap-Handler
für teilweise
relozierte Objekte 1250 in Reaktion auf eine Übereinstimmung
zwischen dem Inhalt des Von-Felds 411 und der Ziel-objectref,
die mit dem Schreibzugriff 701 oder dem Lesezugriff 1202 assoziiert
ist. In einer Ausgestaltung spricht die Lese- und Schreibsperren-Hardware 1240 auf
ein Modusfeld 1114 der Register 144 an, das das
Verhalten der Hardware-Lesesperre 1242 auf der Basis des
Zustands des Modusfelds 1114 ändert. In einer solchen Ausgestaltung
fängt die
Hardware-Lesesperre 1242 nur während der Zeigeraktualisierungsphase
der Relokation großer
Objekte selektiv ab.
-
Eine
beispielhafte Hardware-Schreibsperre
1241 wird mit den
folgenden Logikgleichungen beschrieben.
wobei gc_notify ein Trap-Handler
ist, wie ein Trap-Handler für
teilweise relozierte Objekte
1250. Fachkundige Personen
werden verschiedene geeignete Logikimplementierungen erkennen, einschließlich Logikimplementierungen,
die andere Schreibsperrenfunktionalität, wie intergenerationelles
Zeigerspeicherungsabfangen, wie oben beschrieben, kombinieren. Eine
beispielhafte Hardware-Lesesperre
1242 wird mit den folgenden
Logikgleichungen beschrieben.
-
-
Alternative
Ausgestaltungen können
bei entsprechender Handhabung durch den Trap-Handler für teilweise
relozierte Objekte 1250 während der Kopier- und der Zeigeraktualisierungsphase
der Relokation eines großen
Objekts selektiv abfangen, wenn auch auf Kosten eines größeren Trap-Handler-Overheads.
-
Während der
Kopierphase ermittelt der Trap-Handler für teilweise relozierte Objekte 1250 die
Kopieren-zu-Zielortinformationen, wie die sonst in dem Zu-Feld 412 gespeicherten,
oder pflegt fakultativ Speicher dafür. Außerdem kann der Trap-Handler
für teilweise
relozierte Objekte 1250 fakultativ Speicher für Wie-weit-Informationen
pflegen, wie die sonst in dem Wie-weit-Feld 413 gespeicherten.
Wenn der Mutator-Prozess 610 in
die FromSpace 420-Instanz des großen Objektes speichert, werden
die Speicherdaten (store data) entweder zu der Kopieren-von-Instanz 450 und
der Kopieren-zu-Instanz 450A gesendet,
oder in Ausgestaltungen, die Speicher für Wie-weit-Informationen bereitstellen, wird der
Wie-weit-Speicher überprüft und der
Speichervorgang wird zu beiden Instanzen gesendet, wenn das Gespeichert-zu-Feld
des großen
Objekts bereits kopiert wurde, und ansonsten direkt zu der Kopieren-von-Instanz 450 geleitet.
-
Während der
Zeigeraktualisierungsphase leitet der Trap-Handler für teilweise
relozierte Objekte 1250 Lese- und Schreibzugriffe, die
auf eine FromSpace 420-Instanz eines teilweise relozierten
großen
Objekts abzielen, zu der ToSpace 430-Instanz davon. Wie
zuvor ermittelt der Trap-Handler für teilweise relozierte Objekte 1250 die Kopieren-zu-Zielortinformationen,
wie die sonst in dem Zu-Feld 412 gespeicherten, oder pflegt
fakultativ Speicher dafür.
In jedem Fall leitet der Trap-Handler für teilweise relozierte Objekte 1250 Schreib-
und auch Lesezugriffe zu der ToSpace 430-Instanz um. So
wird ein Lesezugriff auf das teilweise relozierte Objekt der ToSpace 430-Instanz
zugeordnet, die garantiert aktuell ist.
-
Beispielhafte
Schreib-Trap- und Lese-Trap-Funktionen für den Trap-Handler für teilweise
relozierte Objekte
1250 sind wie folgt:
wobei
read_destination das Ziel für
einen ladevorgangorientierten Bytecode ist.
-
Allgemein
ist durch Abfangen auferlegter Overhead für den Lesesperrenfall wahrscheinlich
größer als in
dem Fall, in dem nur eine Schreibsperre vorgesehen ist, weil Lesezugriffe
in einem bestimmten Anweisungsstrom meist häufiger sind als Schreibzugriffe
und auf jeden Fall zusätzlich
zu Schreibzugriffen sind. Zum Teil aus diesem Grund ist die Hardware-Lesesperre
1242 für Lesevorgänge der
Zeigeraktualisierungsphase aus der FromSpace
420-Instanz
des teilweise relozierten großen
Objekts selektiv. Die Hardware-Lesesperre
1242 kann aber
fakultativ Lesevorgänge
aus der FromSpace
420-Instanz des teilweise relozierten
großen
Objekts ungeachtet der Relozierungsphase abfangen. In einer solchen
Ausgestaltung kann der Trap-Handler für teilweise relozierte Objekte
1250 zum
intelligenten Handhaben einer Kopieren-von-Instanz
450 und
einer Kopieren-zu-Instanz
450A, die überlappen, konfiguriert sein.
15 illustriert
eine Überlappung
von Von-Instanz
1560 und Zu-Instanz
1570, bei der ein kopierter
Teil
1561 zu Teil
1571 der Zu-Instanz
1570 kopiert
worden ist. Von-Feld
411, Zu-Feld
412 und Wie-weit-Feld
413 codieren
den teilweise relozierten Objektzustand wie oben beschrieben. In
der Ausgestaltung von
15 kopiert der Garbage-Collector-Prozess
620 das
große
Objekt von hinten nach vorne (oder vorne nach hinten), je nach der
relativen Überlappung
der Von-Instanz
1560 und der Zu-Instanz
1570.
Zum Erleichtern überlappter
Von- und Zu-Instanzen sendet der Trap-Handler für teilweise relozierte Objekte
1550 keine
Schreibvorgänge
und leitet stattdessen einen auf einen nicht kopierten Teil
1562 abzielenden
Schreibvorgang zu der Von-Instanz
1560 und leitet einen
auf einen kopierten Teil
1561 abzielenden Schreibvorgang
zu der Zu-Instanz
1570. Eine geeignete Modifikation der
Schreibvorgangs-Trap-Funktion des Trap-Handlers des teilweise relozierten
Objekts
1250 ist wie folgt:
wobei
COPY_DIRECTION aus den relativen Positionen der Von-Instanz
1560 und
der Zu-Instanz
1570, wie von dem Vom-Feld
411 bzw.
dem Zu-Feld
412 codiert, feststellbar ist. Modifikationen
der Lese-Trap-Funktion des Trap-Handlers für teilweise relozierte Objekte
1250 zum
entsprechenden Umleiten von ladevorgangorientierten Zugriffen sind
analog.
-
13 ist
eine Abbildung einer Ausgestaltung mit einem Kopieren-zu-Registerfeld (z.B.
Zu-Feld 412) zusätzlich
zu einem Kopieren-von-Registerfeld (z.B. Von-Feld 411)
mit assoziierter Lese- und Schreibsperren-Hardware 1340.
Wie oben hat diese Ausgestaltung eine Modusanzeige (z.B. Modus-Feld 1114 der
Register 144), das von dem Garbage-Collector-Prozess 620 gepflegt
wird, damit Lese- und Schreibsperren-Hardware 1340 zwischen
einer Kopierphase und einer Zeigeraktualisierungsphase der Relokation
großer
Objekte unterscheiden kann. Verglichen mit der Ausgestaltung von 12 stellt
die von 13 sowohl Lesesperren- als auch Schreibsperrenunterstützung in
Hardware bereit (z.B. als Hardware-Lesesperre 1342 für Speichervorgänge zu Feldern
eines Objekts, die durch den Inhalt des Von-Felds 411 gekennzeichnet werden,
und eine Hardware-Schreibsperre 1341 zu Speichervorängen zu
Feldern eines Objekts, die durch den Inhalt des Von-Felds 411 gekennzeichnet
werden), wodurch der Trap-Handler für teilweise relozierte Objekte 1250 und die
mit ihm verbundenen Overheads vorteilhaft eliminiert werden.
-
Durch
Pflegen eines Kopieren-zu-Registerfelds in Hardware, z.B. als Zu-Feld 412 in
den Registern 144, können
Schreibzugriffe auf die Kopieren-von-Instanz während einer Kopierphase (MODE
= COPY) zu der Kopieren-von- und der Kopieren-zu-Instanz von der Hardware-Schreibsperre 1341 ohne
Software-Trap-Handler-Intervention
gesendet werden. Während
einer Zeigeraktualisierungsphase (MODE = PTR_UPDATE) werden Schreibzugriffe
auf die Kopieren-von-Instanz von der Hardware-Schreibsperre 1341 ebenfalls
ohne Intervention des Software-Trap-Handlers zu der Kopieren-zu-Instanz
umgeleitet. Lesezugriffe von der Kopieren-von-Instanz werden während der
Zeigeraktualisierungsphase auch von der Hardware-Lesesperre 1342 ohne
Intervention des Software-Trap-Handlers zu der Kopieren-zu-Instanz
umgeleitet. Kopierphasen-Lesezugriffe auf die Kopieren-von-Instanz
werden normal abgeschlossen.
-
In
einer Ausgestaltung wird die Lese- und Schreibsperren-Hardware 1340 von
der Logik der Integer-Einheit 142 (1),
die für
die Evaluierung von Bytecodes zuständig ist, bereitgestellt. Die
Hardware-Schreibsperre 1341 wird von der Logik der Integer-Einheit 142,
die für
die Evaluierung von speicherorientierten Bytecodes zuständig ist,
bereitgestellt und die Hardware-Lesesperre 1342 wird von
der Logik der Inter-Einheit 142, die für die Evaluierung von ladevorgangorientierten
Bytecodes zuständig
ist, bereitgestellt.
-
Während der
Kopierphase sendet die logikimplementierende Hardware-Schreibsperre 1342 store_data
zu der Kopieren-von- und der Kopieren-zu-Instanz, die durch objectref
bzw. den Inhalt des Zu-Felds 412 gekennzeichnet werden,
während
die logikimplementieren Hardware-Schreibsperre 1342 während der Zeigeraktualisierungsphase
store_data nur zu der Kopieren-zu-Instanz umleitet. Eine beispielhafte
Hardware-Schreibsperre 1342 wird von den folgenden Logikgleichungen
beschrieben.
-
-
Desgleichen
wird eine beispielhafte Lesesperre
1341 von den folgenden
Logikgleichungen beschrieben.
wobei in jedem Fall offset
der Offset des mit dem speicherorientierten Bytecode assoziierten
Zielfelds in das große
Objekt ist. Fachkundige Personen werden verschiedene geeignete Logikimplementierungen
erkennen, einschließlich
Logikimplementierungen, die die Hardware-Lesesperre
1341 und
die Hardware-Schreibsperre
1342 kombinieren,
sowie Implementierungen, die die Hardware-Schreibsperre
1342 mit anderer
Schreibsperrenfunktionalität,
wie intergenerationelles Zeigerspeicherungsabfangen, wie oben beschrieben,
kombinieren. Weil das Zu-Feld
412 für die Hardware-Schreibsperre
1342 und
die Hardware-Lesesperre
1341 verfügbar ist, kann das Rundsenden
und Umleiten in Hardware durchgeführt werden und der Software-Trap-Overhead
wird eliminiert.
-
14 ist
eine Abbildung einer Ausgestaltung, die ein Wie-weit-Registerfeld
(z.B. Wie-weit-Feld 413) hinzufügt. Wie in der Ausgestaltung
von 13 stellt die Lese- und Schreibsperren-Hardware 1440 Sperren für Lese-
und Schreibzugriffe von der und auf die Kopieren-zu-Instanz 450 bereit.
Die Lese- und Schreibsperren-Hardware 1440 lenkt
Lese- und Schreibzugriffe außerdem
je nachdem, ob das von einem speicher- oder ladevorgangorientierten
Bytecode referenzierte Feld bereits zu der ToSpace 430-Instanz
kopiert wurde, zu einer entsprechenden FromSpace 420- oder
ToSpace 430-Instanz. In Verbindung mit dem Wie-weit-Feld 413 operierend
erlaubt die Hardware-Schreibsperre 1441 dem Hardware-Prozessor 100 vorteilhaft,
auf das Senden von Speichervorgängen
zu einem noch nicht kopierten Teil des großen Objekts während einer
von einem COPY-Zustandsmodusfeld 1114 angezeigten Kopierphase
zu verzichten. Während
der Zeigeraktualisierungsphase ist die ToSpace 430-Instanz
garantiert aktuell; durch Umleiten von Lesezugriffen zu ihr erlaubt
die Hardware-Lesesperre 1442 daher
dem Hardware-Prozessor 100 vorteilhaft, auf das Senden
von Speichervorgängen
während
der Zeigeraktualisierungsphase zu verzichten. Weil gesendete Speichervorgängen eleminiert sind,
eignet sich die Ausgestaltung von 14 besonders
zum Unterstützen
von überlappenden
FromSpace 420- und ToSpace 430-Instanzen.
-
In
einer Ausgestaltung wird die Lese- und Schreibsperren-Hardware 1440 von
der Logik der Integer-Einheit 142 (1),
die für
die Evaluierung von Bytecodes zuständig ist, bereitgestellt. Die
Hardware-Schreibsperre 1441 wird von der Logik der Integer-Einheit 142,
die für
die Evaluierung von speicherorientierten Bytecodes zuständig ist,
bereitgestellt und die Hardware-Lesesperre 1442 wird von
der Logik der Inter-Einheit 142, die für die Evaluierung von ladevorgangorientierten
Bytecodes zuständig
ist, bereitgestellt. Eine beispielhafte Hardware-Schreibsperre 1442 wird
von den folgenden Logikgleichungen beschrieben.
-
-
Desgleichen
wird eine beispielhafte Hardware-Lesesperre
1341 von den
folgenden Logikgleichungen beschrieben.
wobei
read_destination der Zielort für
einen ladevorgangorientierten Bytecode ist und wobei in jedem Fall
offset der Offset des mit speicher- oder ladevorgangorientiertem
Bytecode assoziierten Zielfeldes in das große Objekt ist. Fachkundige
Personen werden verschiedene geeignete Logikimplementierungen erkennen,
einschließlich
Logikimplementierungen, die die Hardware-Lesesperre
1441 und
die Hardware-Schreibsperre
1442 kombinieren, sowie Implementierungen,
die die Hardware-Schreibsperre
1442 mit anderer Schreibsperrenfunktionalität, wie intergenerationelles
Zeigerspeicherungsabfangen, wie oben beschrieben, kombinieren.
-
Mit dem Kopieren-zu-Instanz-Kennzeichnerspeicher
assoziierte Lese- und Schreibsperren
-
Zu
einer Reihe von Variationen der Ausgestaltungen der 12 bis 14 zählen Lese-
und Schreibsperren, die mit einem Kopieren-zu-Instanz-Kennzeichnerspeicher
anstatt einem Kopieren-von-Instanz-Kennzeichnerspeicher assoziiert
sind. Wie zuvor fügen
diese Variationen aufeinanderfolgende zusätzliche Hardware-Unterstützungsebenen
hinzu, z.B. Unterstützung
des Von-Felds 411 und Wie-weit-Felds 413, um Software-Trap-Handler-Overhead
zu eliminieren und überlappende
Kopieren-von- und Kopieren-zu-Instanzen 450 und 450A zu
berücksichtigen.
Die Variationen unterstützen
sowohl das Kopieren mit begrenzter Pausezeit als auch die Aktualisierung
mit begrenzter Pausezeit von Zeigern auf ein teilweise reloziertes
großes
Objekt. Diese Variationen werden jetzt durch Analogie zu den Ausgestaltungen
der 12 bis 14 beschrieben,
und fachkundige Personen werden auf der Basis dieser Beschreibung
geeignete Modifikationen erkennen.
-
Der
Garbage-Collector-Prozess 620 aktualisiert Zeiger auf das
große
Objekt, d.h. von der FromSpace 420-Instanz davon zu einer
ToSpace 430-Instanz davon, bevor er die Objektdaten kopiert.
Auf diese Weise wird die Ordnung von Zeigeraktualisierungs- und
Kopierphasen umgekehrt. Vorwärts-Lese-
und -Schreibzugriffe von Lese- und Schreibsperren werden zu der
Kopieren-zu-Instanz 450A anstelle der Kopieren-von-Instanz 450 geleitet.
In einer Ausgestaltung fangen Hardware-Lese- und -Schreibsperren
Zugriffe auf die Kopieren-zu-Instanz 450A ab, was einen
Software-Trap-Handler für
teilweise relozierte Objekte aufruft, der das eigentliche Weiterleiten
zu der Kopieren-von-Instanz durchführt. Der Trap-Handler für teilweise
relozierte Objekte kann fakultativ Speicher für Wie-weit-Informationen pflegen,
wie z.B. die sonst in dem Wie-weit-Feld 413 gespeicherten.
Wenn der Mutator-Prozess 610 zu
der ToSpace 420-Instanz des großen Objekts speichert, werden
Speicherdaten zu der Kopieren-zu-Instanz 450A geleitet,
wenn das Gespeichert-zu-Feld des großen Objekts bereits kopiert
worden ist, und ansonsten zu der Kopieren-von-Instanz 450 geleitet. Desgleichen
wird, wenn der Mutator-Prozess 610 von der ToSpace 420-Instanz
des großen
Objekts lädt,
der Ladevorgang aus der Kopieren-zu-Instanz 450A durchgeführt, wenn
das Gespeichert-zu-Feld des großen
Objekts bereits kopiert worden ist, und sonst aus der Kopieren-von-Instanz 450 durchgeführt. Unterstützung für die überlappten
FromSpace 430- und ToSpace 430-Instanzen wird
wie oben mit Bezug auf die Ausgestaltungen der 12 und 14 beschrieben
bereitgestellt. Alternativ kann die Lesesperre, wenn keine Unterstützung für überlappende Regionen
benötigt
wird, Ladevorgänge
zu der Kopieren-von-Instanz lenken und die Schreibsperre kann Speichervorgänge zu der
Kopieren-von- und der Kopieren-zu-Instanz senden.
-
Wie
oben kann der Software-Trap-Overhead eliminiert werden, indem mehr
Register und komplexeres Verhalten in die Hardware gelegt wird.
Beispielsweise weist eine Ausgestaltung das Zu-Feld 412 und
das Von-Feld 411 auf. Eine Hardware-Schreibsperre, die auf Übereinstimmung
zwischen einem Speicherziel und dem Zu-Feld 412 reagiert,
sendet Speicherungen zu der Kopieren-zu-Instanz 450A und
der Kopieren-von-Instanz 450.
Eine Hardware-Lesesperre, die auf Übereinstimmung zwischen einer
Ladequelle und dem Zu-Feld 412 reagiert, leitet Ladevorgänge zu der
Kopieren-von- Instanz 450 um.
Eine weitere Ausgestaltung weist zusätzlich zu dem Von-Feld 411 und
dem Zu-Feld 412 das Wie-weit-Feld 413 auf. Die
Hardware-Schreibsperre und die Hardware-Lesesperre leiten Speicher-
und Ladevorgänge
zu kopierten Teilen der Kopieren-zu-Instanz 450A und zu
unkopierten Teilen der Kopieren-von-Instanz 450. Fachkundige
Personen werden auf der Grundlage der vorhergehenden Beschreibung
geeignete Logik für
jede der Ausgestaltungen erkennen.
-
Objektreferenzierungsformate
-
16 ist
eine Abbildung einer Ausgestaltung einer Objektreferenz (objectref),
wie sie in dem Hardware-Prozessor 100 repräsentiert
ist. Drei Bits der objectref können
für Garbage-Collection-Hinweise
verwendet werden.
-
Ein
zusätzliches
Handle-Bit H zeigt an, ob das Objekt von der objectref direkt oder
indirekt – durch
ein Handle – referenziert
wird. Die Handles stellen ein Referenzierungsverfahren bereit, das
die Relokation von Speicherobjekten ohne Großaktualisierungen von Zeigern
(oder objectrefs) dafür
erleichtert, wenn auch auf Kosten einer zusätzlichen Indirektionsebene.
Diese Felder werden beide ausgeblendet, bevor sie an die Integer-Einheit 142 (1) des Hardware-Prozessors 100 angelegt
werden.
-
In
einer Ausgestaltung des Hardware-Prozessors 100 und des
Sammelbereichs 630 (6–14) wird
ein Objekt 1700 im Speicher mit einem Kopfteil 1710 und
einem Instanzvariablenspeicherteil 1720 dargestellt. Eine
solche Ausgestaltung ist in 17A abgebildet.
Der Kopfteil 1710 hat ein 32-Bit-Wort, das selbst einen
Methodenvektortabellen-Basisteil 1712 zum Repräsentieren
der Klasse des Objekts und fünf
Bits zusätzlichen
Speicher 1714 hat, die für den Synchronisierungsstatus
des Objekts und Informationen für
den Garbage-Collector reserviert sind. Fakultativ kann ein zweites
Kopfwort, z.B. Monitor-Zeiger 1716, die Adresse einer dem
Objekt zugeordneten Überwachung
enthalten, wodurch alle fünf
Bits des zusätzlichen
Speichers 1714 in dem ersten Kopfwort für Garbage-Collection-Informationen
verfügbar
gemacht werden. In der Ausgestaltung von 17A zeigt
eine Objektreferenz (objectref) auf die Lokation des Methodenvektortabellen-Basisteils 1712,
um den Methodenaufrufungs-Overhead zu minimieren.
-
Drei
Bits des Kopfteils 1710 stehen einem Garbage-Collector
wie den Collector-Prozess 620 zur
Verfügung.
In dem Kopfteil 1710 werden drei Bits niedrigerer Ordnung
(header[2:0]) und zwei Bits hoher Ordnung (header[31:30]) ausgeblendet,
wenn der Kopfteil als ein Zeiger behandelt wird. Drei dieser Bits
(header[31:20,2]) stehen dem Garbage-Collector zum Speichern von
Informationen über
das Objekt 1700 zur Verfügung. Bit 1 und Bit 0 können zum
Enthalten von LOCK- und WANT-Bits für Objektsynchronisierung verwendet
werden. Alternativ kann ein zweites Kopfwort, z.B. Monitor-Zeiger 1716,
zum Aufrechterhalten des Synchronisierungsstatus des Objekts 1700 bereitgestellt
werden, was alle fünf
Bits für
die Garbage-Collection-Unterstützung übriglässt. Wie
die Bits für
die Garbage-Collection-Unterstützung
verwendet werden, hängt
von dem/den jeweiligen Typen von im Collector-Prozess 620 implementierten
Garbage-Collection-Verfahren und Garbage-Collection-Trap-Handler,
falls vorhanden, ab. Mögliche
Verwendungen sind Markierungsbits, Zählerbits zum Altern von Objekten
in einer Generation usw. Wie oben beschrieben, stehen in einer fakultativen
zweiten Kopfwortausgestaltung des Kopfteils 1710 fünf Bits
einem Garbage-Collector wie dem Collector-Prozess 620 zur
Verfügung.
-
In
der Ausgestaltung von 17A beginnt
der Instanzvariablenspeicherteil 1720 ein Wort nach dem Methodenvektortabellen-Basisteil 1712 und
enthält
Instanzvariablen des Objekts 1700. Das niedrigstwertige Bit
einer objectref gibt an, ob die Referenz mit Handle ist (==1) oder
nicht (==0). Ein alternatives „mit
Handle versehenes" Objektformat
ist in 17B abgebildet. Eine mit Handle
versehene Referenz wird eingerichtet, wenn das Objekt 1700b erstellt
wird, und alle nachfolgenden Referenzen gehen über das Handle, d.h. Speicherzeiger 1750b,
zum Zugreifen auf das Objekt. Diese Unterstützung wird für einige
Arten von Garbage-Collectors bereitgestellt, die die Kosten der
Zeigeraktualisierung während
der Objektrelokation durch Kopieren von Handles anstelle des zu
Grunde liegenden Objektspeichers, einschließlich dem für Instanzvariablen, reduzieren.
-
Objektreferenzen
mit Handle erlauben Garbage-Collection-Systemen, wie den oben mit
Bezug auf die 7–9 beschriebenen,
eine Leistung mit begrenzter Pausezeit für Zeigeraktualisierungen zu
einem kopierten Objekt aufzuweisen. In anderen Garbage-Collection-Systemen,
für die
Zeigeraktualisierung mit begrenzter Pausezeit großer Mengen
von Referenzierungszeigern von der dadurch bereitgestellten Sperrenkonfiguration
unterstützt
wird, beispielsweise in den oben mit Bezug auf die 10–14 beschriebenen
Ausgestaltungen, sind direkte Objektreferenzen vorzuziehen.
-
Die
Erfindung wird zwar mit Bezug auf verschiedene Ausgestaltungen beschrieben,
es versteht sich aber, dass diese Ausgestaltungen veranschaulichend
sind und dass der Umfang der Erfindung nicht auf sie begrenzt ist.
Anspruchsbegriffe, wie erste Anweisung, zweite Anweisung, dritte
Anweisung usw. dienen nur zur Kennzeichnung und dürfen nicht
als eine besondere Ordnung erfordernd ausgelegt werden. Viele Variationen, Modifikationen,
Zusätze
und Verbesserungen der beschriebenen Ausgestaltungen sind möglich. Beispielsweise
wurde die vorliegende Erfindung hierin zwar mit Bezug auf beispielhafte
Ausgestaltungen bezüglich
der JAVA Programmiersprache und der JAVA virtuellen Maschine beschrieben,
sie ist aber nicht auf diese begrenzt und umfasst stattdessen Systeme,
Artikel, Verfahren und Vorrichtungen für eine breite Palette von Prozessorumgebungen
(virtuelle und physische). Außerdem
wurden bestimmte beispielhafte Ausgestaltungen zwar bezüglich Hardware
beschrieben, geeignete Virtuelle-Maschine-Implementierungen (JAVA-verwandte oder sonstige),
die einen Kennzeichnerspeicher für
teilweise relozierte Objekte und (eine) darauf ansprechende Sperre(n)
gemäß der obigen
Beschreibung einbinden, haben Software-Implementierungen von Virtuelle-Maschine-Anweisungsprozessoren
wie einen Bytecode-Interpreter oder einen Just-in-Time(JIT)-Compiler. Diese Zusätze und
Verbesserungen fallen in den von den folgenden Ansprüchen definierten
Umfang der Erfindung.