DE112018005998B4 - Kopieren und weiterleiten für eine gleichzeitig ablaufende kopierende garbage-collection - Google Patents

Kopieren und weiterleiten für eine gleichzeitig ablaufende kopierende garbage-collection Download PDF

Info

Publication number
DE112018005998B4
DE112018005998B4 DE112018005998.7T DE112018005998T DE112018005998B4 DE 112018005998 B4 DE112018005998 B4 DE 112018005998B4 DE 112018005998 T DE112018005998 T DE 112018005998T DE 112018005998 B4 DE112018005998 B4 DE 112018005998B4
Authority
DE
Germany
Prior art keywords
thread
copying
accessing
header
copy
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
DE112018005998.7T
Other languages
English (en)
Other versions
DE112018005998T5 (de
Inventor
Aleksandar Micic
Joran Siu
Irwin D´Souza
Filip JEREMIC
Charles Robert Gracie
Dmitri Pivkine
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by International Business Machines Corp filed Critical International Business Machines Corp
Publication of DE112018005998T5 publication Critical patent/DE112018005998T5/de
Application granted granted Critical
Publication of DE112018005998B4 publication Critical patent/DE112018005998B4/de
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0253Garbage collection, i.e. reclamation of unreferenced memory
    • G06F12/0269Incremental or concurrent garbage collection, e.g. in real-time systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0253Garbage collection, i.e. reclamation of unreferenced memory
    • G06F12/0261Garbage collection, i.e. reclamation of unreferenced memory using reference counting
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1016Performance improvement

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Memory System (AREA)

Abstract

Verfahren, um ein Kopieren eines Datenobjekts (88) in einer gleichzeitig ablaufenden kopierenden Garbage-Collection-Operation zu optimieren, wobei das Verfahren die folgenden durch einen Computer (12, 82) ausgeführten Prozesse umfasst:Erkennen (610) einer Quellenkopie des Datenobjekts (88), das als Teil der Garbage-Collection-Operation kopiert werden soll;Auswählen eines primären zugreifenden Threads (92A) aus einer Mehrzahl von zugreifenden Threads (92), die in einem Wettlauf um die Zuweisung von Speicherbereich für ein einzelnes Datenobjekt (88), das das Datenobjekt (88) ist, in einem Survivor-Bereich (86N) konkurrieren, wobei der primäre zugreifende Thread (92A) als Ergebnis davon ausgewählt wird, dass er ein erster Thread ist, der den Speicherbereich zuweist und einen Quellobjekt-Kopfbereich des Datenobjekts (88) in einer atomaren Operation aktualisiert;Einleiten (620), durch den primären zugreifenden Thread (92A), eines Kopierens der Quellenkopie an einen Zielspeicherort, wobei das Einleiten (620) ein Erstellen eines Zielobjekt-Kopfbereichs (200, 300, 524) für ein Zielobjekt (500) an dem Zielspeicherort umfasst, wobei der Zielobjekt-Kopfbereich (200, 300, 524) einen Anzeiger enthält, der so gesetzt ist, dass er anzeigt, dass das Kopieren im Gange ist, so dass andere zugreifende Threads (92) über einen Status des Kopierens durch Zugriff auf den Zielobjekt-Kopfbereich (200, 300, 524) benachrichtigt werden, wobei der Anzeiger ein Kopierbit (212, 312) in dem Zielobjekt-Kopfbereich (200, 300, 524) ist, das einen Speicherort hat, der einem Speicherort des Weiterleitungsbits (112) in dem Quellenobjekt-Kopfbereich (120) entspricht, und wobei das Setzen des Weiteren ein Setzen des Kopierbits (212, 312) umfasst;Anhalten (630) einer Ausführung eines sekundären zugreifenden Threads (92N), der versucht, das Datenobjekt (88) zu verwenden, und zwar so lange, wie der Anzeiger anzeigt, dass das Kopieren im Gange ist; undErsetzen (640), als Reaktion auf einen Abschluss des Kopierens, des Zielobjekt-Kopfbereichs (200, 300, 524) durch eine Kopie eines Quellenobjekt-Kopfbereichs (120) der Quellenkopie.

Description

  • TECHNISCHES GEBIET
  • Im Allgemeinen betreffen Ausführungsformen der vorliegenden Erfindung die Verwaltung von Computerspeicher. Insbesondere betreffen Ausführungsformen der vorliegenden Erfindung eine Vorgehensweise, um das Kopieren eines Datenobjekts in einer gleichzeitig ablaufenden kopierenden Garbage-Collection-Operation zu optimieren.
  • HINTERGRUND
  • In der modernen Computerverarbeitungsumgebung wird eine effiziente Verwaltung eines Computersystemspeichers, ob physisch oder virtualisiert, immer wichtiger. Der Inhalt eines Hauptspeichers ändert sich oftmals laufend, da neue Datenobjekte von Anwendungsthreads, die auf dem Computersystem ausgeführt werden, erstellt, verwendet und verworfen werden. Jedoch wird ein von einem Anwendungsthread verwendetes Objekt mitunter nicht ganz verworfen, nachdem es verwendet wurde, was zu einem Hauptspeicher führt, der für ein Objekt reserviert bleibt, das nie verwendet wird. Im Laufe der Zeit kann dies zu einem Hauptspeicher führen, der mit einer immer größeren Anzahl von nicht verwendeten Datenobjekten gefüllt ist, wodurch weniger Speicherbereich für neue Datenobjekte zur Verfügung steht und die Effizienz der Verarbeitung von Anwendungsthreads abnimmt.
  • Um dieses Problem zu lösen, nutzen die meisten Computersysteme eine Operation, die als Garbage-Collection (GC) bezeichnet wird. Die GC-Operation analysiert einen Hauptspeicher oder einen Abschnitt davon und entfernt nicht verwendete Datenobjekte. GC kann hierfür eine von mehreren unterschiedlichen Strategien verwenden. Zum Beispiel werden bei einer Strategie mit der Bezeichnung „Mark and Sweep“ aktive Datenobjekte in dem Bereich eines Hauptspeichers, in dem GC durchgeführt werden soll, als aktiv „markiert“ und jedwede Datenobjekte, die unmarkiert bleiben, werden aus dem Hauptspeicher gelöscht (weggeräumt).
  • Eine alternative Strategie zur Durchführung von GC wird als „Copying Collector GC“ bezeichnet. Bei einer GC vom Typ Copying Collector werden alle lebendigen Objekte aus dem Bereich des Hauptspeichers ausgelagert, in dem die GC durchgeführt werden soll. In einigen Ausführungen wird das Datenobjekt in dem Moment, in dem ein lebendiges Objekt in dem Auslagerungsbereich erkannt wird, an einen neuen Speicherort kopiert, der als Survivor-Bereich bezeichnet wird. Dieses Kopieren kann auf eine von mehreren Arten erfolgen. Beim Stop-The-World-Kopieren ordnet der erste Thread, der auf das Datenobjekt zugreift, nachdem die GC-Operation begonnen hat, Speicherbereich für das Datenobjekt in dem Survivor-Bereich zu und führt das Kopieren des Datenobjekts durch, während alle anderen Anwendungsthreads warten, bis das Kopieren abgeschlossen ist. Alternativ, in einer gleichzeitig ablaufenden kopierenden GC-Ausführung, versucht jeder GC- oder Anwendungsthread, der versucht, auf das Datenobjekt zuzugreifen, nachdem die GC-Operation begonnen hat, Speicherbereich für das Datenobjekt in dem Survivor-Bereich zuzuordnen, um das Datenobjekt in seinen eigenen vorab zugeordneten Speicherbereich zu kopieren. In jedem Fall wird die Adresse, die von Anwendungsthreads für den Zugriff auf das Datenobjekt verwendet wird, aktualisiert, nachdem das Datenobjekt kopiert wurde, um auf den neuen Speicherort in dem Survivor-Bereich zu verweisen. Der ausgelagerte Bereich, der jetzt frei von lebendigen Objekten am Ende des Zyklus ist, kann dann in seiner Gesamtheit wiederverwendet werden.
  • Die US 7 716 192 B2 offenbart eine Technologie, mit der ein Echtzeit-Datenverschiebungsmechanismus für Multiprozessor-Umgebungen bereitgestellt wird, der die Unterstützung von sperrfreien Programmen beinhaltet, die parallel laufen. Der Verschiebungsmechanismus verschiebt ein Objekt unter Verwendung eines Zustandsfeldes, das sich auf das Datenfeld bezieht, möglicherweise in einem vorläufigen (breiten) Objektraum, der dann in ein Objekt im Zielraum kopiert wird. Die Zustandsinformationen für jedes Datenfeld des ursprünglichen Objekts umfassen Informationen, die angeben, wo sich eine aktuelle Version der Daten für jedes Feld befindet, d.h. im ursprünglichen Objektraum, im breiten Objektraum oder im Zielraum. In einem Beispiel legt ein Handshake-Mechanismus einer Speicherbereinigungsroutine Vorbereitungs- und Kopierphasen zwischen dem Mechanismus und anderen Threads fest, die feststellen, wo Speicherzugriffe erfolgen. Ebenfalls beschrieben wird die Unterstützung von Programm-Thread-Vergleichs- und Vertauschungsoperationen (CAS) und / oder atomaren Operationen mit mehreren Wörtern.
  • KURZDARSTELLUNG
  • Gemäß der vorliegenden Erfindung wird eine Vorgehensweise bereitgestellt, um ein Kopieren eines Datenobjekts in einer gleichzeitig ablaufenden kopierenden Garbage-Collection-Operation zu optimieren. In einer Ausführungsform wird eine Quellenkopie des Datenobjekts erkannt, das als Teil der Garbage-Collection-Operation kopiert werden soll. Ein Kopieren der Quellenkopie an einen Zielspeicherort wird durch einen primären zugreifenden Thread eingeleitet. Dieses Einleiten des Kopierens umfasst die Erstellung eines temporären Zielobjekt-Kopfbereichs für das Zielobjekt an dem Zielspeicherort, welcher einen Anzeiger enthält, der so gesetzt ist, dass er anzeigt, dass das Kopieren im Gange ist. Während das Kopieren stattfindet, wird die Ausführung von beliebigen anderen zugreifenden Threads, die versuchen, das Datenobjekt zu verwenden, so lange angehalten, wie der Anzeiger anzeigt, dass das Kopieren im Gange ist. Sobald das Kopieren abgeschlossen ist, wird der Zielobjekt-Kopfbereich durch eine Kopie des Quellenobjekt-Kopfbereichs ersetzt, wodurch der Anzeiger zurückgesetzt und zugreifenden Threads die Wiederaufnahme der Ausführung gestattet wird.
  • Ein Aspekt der vorliegenden Erfindung umfasst ein Verfahren, um ein Kopieren eines Datenobjekts in einer gleichzeitig ablaufenden kopierenden Garbage-Collection-Operation zu optimieren. Das Verfahren umfasst das Erkennen einer Quellenkopie des Datenobjekts, das als Teil der Garbage-Collection-Operation kopiert werden soll. Das Verfahren umfasst des Weiteren das Einleiten, durch einen primären zugreifenden Thread, eines Kopierens der Quellenkopie an einen Zielspeicherort, wobei das Einleiten das Erstellen eines Zielobjekt-Kopfbereichs für ein Zielobjekt an dem Zielspeicherort umfasst, welcher einen Anzeiger enthält, der so gesetzt ist, dass er anzeigt, dass das Kopieren im Gange ist. Das Verfahren umfasst des Weiteren das Anhalten einer Ausführung eines sekundären zugreifenden Threads, der versucht, das Datenobjekt zu verwenden, und zwar so lange, wie der Anzeiger anzeigt, dass das Kopieren im Gange ist. Das Verfahren umfasst des Weiteren das Ersetzen, als Reaktion auf einen Abschluss des Kopierens, des Zielobjekt-Kopfbereichs durch eine Kopie eines Quellenobjekt-Kopfbereichs der Quellenkopie.
  • Das Verfahren kann optional des Weiteren das Zuordnen, durch einen zugreifenden Thread als Reaktion auf das Erkennen der Quellenkopie, von Speicherbereich für das Datenobjekt in einem Survivor-Bereich umfassen. Dieses Verfahren umfasst des Weiteren das Speichern des Zielobjekt-Kopfbereichs, der über den Anzeiger in dem zugeordneten Speicherbereich verfügt. Dieses Verfahren umfasst des Weiteren das Speichern, in einer atomaren Operation, eines Weiterleitungsbits und eines Speicherorts des zugeordneten Speicherbereichs als den Zielspeicherort des Quellenobjekt-Kopfbereichs als Reaktion auf das Setzen des Weiterleitungsbits. Dieses Verfahren umfasst des Weiteren das Bezeichnen, infolge dessen, dass die atomare Speicheroperation erfolgreich ist, des zugreifenden Threads als den primären zugreifenden Thread. Dieses Verfahren umfasst des Weiteren das Weiterleiten des sekundären zugreifenden Threads an den Zielspeicherort als Reaktion darauf, dass der sekundäre zugreifende Thread feststellt, dass das Weiterleitungsbit in dem Quellenobjekt-Kopfbereich gesetzt ist. Dieses Verfahren bietet mehrere Vorteile, einschließlich, ohne darauf beschränkt zu sein, des Angebens für andere zugreifende Threads, dass das Datenobjekt weitergeleitet wird, sowie des Speicherorts, an den es weitergeleitet wird.
  • Das Verfahren kann optional des Weiteren Ausführungsformen umfassen, in denen der Anzeiger ein Kopierbit in dem Zielobjekt-Kopfbereich ist, das einen Speicherort hat, der einem Speicherort des Weiterleitungsbits in dem Quellenobjekt-Kopfbereich entspricht, und wobei das Setzen des Weiteren das Setzen des Kopierbits umfasst. Dieses Verfahren bietet mehrere Vorteile, wie beispielsweise, ohne darauf beschränkt zu sein, einen einzelnen Bitanzeiger, der an einem standardisierten Speicherort gespeichert wird.
  • Das Verfahren kann optional des Weiteren das Synchronisieren des Kopierens unter einer Mehrzahl von teilnehmenden Threads umfassen, zu der sowohl der primäre zugreifende Thread als auch der sekundäre zugreifende Thread gehört, deren Ausführung angehalten wird. Dieses Verfahren umfasst des Weiteren das Initialisieren, durch den primären zugreifenden Thread, eines Werts von nicht kopierten Daten in dem Zielobjekt-Kopfbereich auf eine Gesamtgröße des Datenobjekts. Dieses Verfahren umfasst des Weiteren, als Reaktion darauf, dass ein beliebiger sekundärer zugreifender Thread der Mehrzahl der teilnehmenden Threads zu kopieren beginnt, das Erhöhen eines Werts von Daten von kopierenden Threads in dem Zielobjekt-Kopfbereich. Dieses Verfahren umfasst des Weiteren, als Reaktion darauf, dass ein beliebiger teilnehmender Thread mit dem Kopieren eines Abschnitts des Datenobjekts beginnt, ein Verringern des Nicht-kopiert-Werts um eine Größe des Datenabschnitts. Dieses Verfahren umfasst des Weiteren, als Reaktion auf eine Feststellung durch einen beliebigen sekundären zugreifenden Thread, dass der Nicht-kopiert-Wert 0 erreicht hat, das Verringern des Werts von Daten von kopierenden Threads, wobei das Ersetzen des Zielobjekt-Kopfbereichs durch den primären zugreifenden Thread als Reaktion auf eine Feststellung, dass der Wert von Daten von kopierenden Threads auf einen Anfangswert verringert wurde, durchgeführt wird. Dieses Verfahren bietet mehrere Vorteile, wie beispielsweise, ohne darauf beschränkt zu sein, ein durch eine Mehrzahl von zugreifenden Threads durchgeführtes synchronisiertes Kopieren, was die Wartezeit verringert.
  • Das Verfahren kann optional des Weiteren Ausführungsformen umfassen, in denen das Ersetzen des Zielobjekt-Kopfbereichs in einer einzigen Aktualisierung des Hauptspeichers durchgeführt wird und das Zurücksetzen des Anzeigers sowie das Wiederherstellen einer Klasseninformation umfasst. Dieses Verfahren bietet mehrere Vorteile, wie beispielsweise, ohne darauf beschränkt zu sein, die Fähigkeit des primären zugreifenden Threads, eine einzige Operation durchzuführen, um den Zugriff auf das Datenobjekt wiederherzustellen.
  • Das Verfahren kann optional des Weiteren Ausführungsformen umfassen, in denen der primäre zugreifende Thread und der sekundäre zugreifende Thread jeweils entweder ein Garbage-Collection-Thread oder ein Anwendungsthread sind. Dieses Verfahren bietet mehrere Vorteile, wie beispielsweise, ohne darauf beschränkt zu sein, die Fähigkeit von Anwendungsthreads oder aber Garbage-Collection-Threads, das Kopieren durchzuführen.
  • Das Verfahren kann optional des Weiteren Ausführungsformen umfassen, in denen das Erkennen des Weiteren das Lesen, aus einem lebendigen Objekt im Hauptspeicher, eines Objektverweises aufweist, der die Quellenkopie referenziert durch: einen Garbage-Collection-Thread, der eine Durchsuchung von lebendigen Objekten in dem Hauptspeicher durchführt, und/oder einen Anwendungsthread, der das lebendige Objekt während einer normalen Ausführung antrifft. Dieses Verfahren bietet mehrere Vorteile, wie beispielsweise, ohne darauf beschränkt zu sein, das Erkennen von Datenobjekten zum Kopieren.
  • Ein weiterer Aspekt der vorliegenden Erfindung stellt ein System bereit, um ein Kopieren eines Datenobjekts in einer gleichzeitig ablaufenden kopierenden Garbage-Collection-Operation zu optimieren, das aufweist: ein Hauptspeichermedium, das Anweisungen aufweist; einen mit dem Hauptspeichermedium verbundenen Bus; und einen mit dem Bus verbundenen Prozessor, der bei der Ausführung der Anweisungen das System dazu veranlasst: eine Quellenkopie des Datenobjekts zu erkennen, das als Teil der Garbage-Collection-Operation kopiert werden soll; durch einen primären zugreifenden Thread ein Kopieren der Quellenkopie an einen Zielspeicherort einzuleiten, wobei das Einleiten das Erstellen eines Zielobjekt-Kopfbereichs für ein Zielobjekt an dem Zielspeicherort umfasst, welcher einen Anzeiger enthält, der so gesetzt ist, dass er anzeigt, dass das Kopieren im Gange ist; eine Ausführung eines sekundären zugreifenden Threads, der versucht, das Datenobjekt zu verwenden, so lange anzuhalten, wie der Anzeiger anzeigt, dass das Kopieren im Gange ist; und; als Reaktion auf einen Abschluss des Kopierens den Zielobjekt-Kopfbereich durch eine Kopie eines Quellenobjekt-Kopfbereichs der Quellenkopie zu ersetzen.
  • Noch ein weiterer Aspekt der vorliegenden Erfindung stellt ein Computerprogrammprodukt bereit, um ein Kopieren eines Datenobjekts in einer gleichzeitig ablaufenden kopierenden Garbage-Collection-Operation zu optimieren, wobei das Computerprogrammprodukt ein durch einen Computer lesbares Speichermedium und auf dem durch einen Computer lesbaren Speichermedium gespeicherte Programmanweisungen aufweist, die mindestens eine Computereinheit dazu veranlassen: eine Quellenkopie des Datenobjekts zu erkennen, das als Teil der Garbage-Collection-Operation kopiert werden soll; durch einen primären zugreifenden Thread ein Kopieren der Quellenkopie an einen Zielspeicherort einzuleiten, wobei das Einleiten das Erstellen eines Zielobjekt-Kopfbereichs für ein Zielobjekt an dem Zielspeicherort umfasst, welcher einen Anzeiger enthält, der so gesetzt ist, dass er anzeigt, dass das Kopieren im Gange ist; eine Ausführung eines sekundären zugreifenden Threads, der versucht, das Datenobjekt zu verwenden, so lange anzuhalten, wie der Anzeiger anzeigt, dass das Kopieren im Gange ist; und als Reaktion auf einen Abschluss des Kopierens den Zielobjekt-Kopfbereich durch eine Kopie eines Quellenobjekt-Kopfbereichs der Quellenkopie zu ersetzen.
  • Und noch ein weiterer Aspekt der vorliegenden Erfindung stellt ein Verfahren zum Einsetzen eines Systems bereit, um ein Kopieren eines Datenobjekts in einer gleichzeitig ablaufenden kopierenden Garbage-Collection-Operation zu optimieren, wobei das Verfahren umfasst: Bereitstellen einer Computerinfrastruktur, die über mindestens eine Computereinheit verfügt, die betrieben wird, um: eine Quellenkopie des Datenobjekts zu erkennen, das als Teil der Garbage-Collection-Operation kopiert werden soll; ein Kopieren der Quellenkopie an einen Zielspeicherort durch einen primären zugreifenden Thread einzuleiten, wobei das Einleiten das Erstellen eines Zielobjekt-Kopfbereichs für ein Zielobjekt an dem Zielspeicherort umfasst, welcher einen Anzeiger enthält, der so gesetzt ist, dass er anzeigt, dass das Kopieren im Gange ist; eine Ausführung eines sekundären zugreifenden Threads, der versucht, das Datenobjekt zu verwenden, so lange anzuhalten, wie der Anzeiger anzeigt, dass das Kopieren im Gange ist; und als Reaktion auf einen Abschluss des Kopierens den Zielobjekt-Kopfbereich durch eine Kopie eines Quellenobjekt-Kopfbereichs der Quellenkopie zu ersetzen.
  • Figurenliste
  • Diese und andere Merkmale dieser Erfindung lassen sich anhand der folgenden ausführlichen Beschreibung der verschiedenen Aspekte der Erfindung in Zusammenschau mit den beiliegenden Zeichnungen leichter verstehen.
    • 1 stellt eine Datenverarbeitungsumgebung gemäß einer Ausführungsform der vorliegenden Erfindung dar.
    • 2 stellt eine Systemübersicht gemäß einer Ausführungsform der vorliegenden Erfindung dar.
    • 3A stellt einen beispielhaften Datenobjekt-Kopfbereich gemäß einer Ausführungsform der vorliegenden Erfindung dar.
    • 3B stellt einen beispielhaften aktualisierten Quellenkopie-Kopfbereich gemäß einer Ausführungsform der vorliegenden Erfindung dar.
    • 4 stellt einen beispielhaften Zielkopfbereich gemäß einer Ausführungsform der vorliegenden Erfindung dar.
    • 5 stellt einen beispielhaften Zielkopfbereich gemäß einer Ausführungsform der vorliegenden Erfindung dar.
    • 6 stellt einen beispielhaften Prozessablaufplan gemäß einer Ausführungsform der vorliegenden Erfindung dar.
    • 7 stellt ein beispielhaftes Zieldatenobjekt gemäß einer Ausführungsform der vorliegenden Erfindung dar.
    • 8 stellt einen beispielhaften Verfahrensablaufplan gemäß einer Ausführungsform der vorliegenden Erfindung dar.
  • Die Zeichnungen sind nicht unbedingt maßstabsgetreu. Bei den Zeichnungen handelt es sich lediglich um schematische Darstellungen, die keine bestimmten Parameter der Erfindung darstellen sollen. Die Zeichnungen sollen nur typische Ausführungsformen der Erfindung darstellen und sind daher nicht als Einschränkung des Umfangs der Erfindung zu verstehen. In den Zeichnungen stellt eine gleiche Nummerierung gleiche Elemente dar.
  • AUSFÜHRLICHE BESCHREIBUNG
  • Veranschaulichende Ausführungsformen werden unter Bezugnahme auf die beiliegenden Zeichnungen, in denen Ausführungsformen gezeigt sind, hierin nun vollständiger beschrieben. Diese Offenbarung kann jedoch in vielen verschiedenen Formen realisiert werden und sollte nicht als auf die hierin dargelegten Ausführungsformen beschränkt ausgelegt werden. Vielmehr werden diese Ausführungsformen bereitgestellt, damit diese Offenbarung gründlich und vollständig ist und dem Fachmann den Umfang dieser Offenbarung umfassend vermittelt. In der Beschreibung werden Einzelheiten von hinlänglich bekannten Merkmalen und Techniken gegebenenfalls weggelassen, um die dargestellten Ausführungsformen nicht unnötig intransparent zu machen.
  • Die hierin verwendete Terminologie dient lediglich dazu, bestimmte Ausführungsformen zu beschreiben, und sollte nicht als Einschränkung dieser Offenbarung verstanden werden. In der Verwendung hierin sollen die Singular-Formen „ein“, „eine“ und „der“, „die“, „das“ auch die Pluralformen einschließen, sofern der Kontext nicht eindeutig etwas anderes angibt. Darüber hinaus steht die Verwendung der Begriffe „ein“, „eine“ usw. nicht für eine Begrenzung einer Menge, sondern bezeichnet vielmehr das Vorhandensein von mindestens einem der referenzierten Teile. Der Begriff „Satz“ soll eine Menge von mindestens eins bedeuten. Es wird des Weiteren darauf hingewiesen, dass die Begriffe „aufweist“ und/oder „aufweisend“ oder „umfasst“ und/oder „umfassend“, wenn sie in dieser Spezifikation verwendet werden, das Vorhandensein von angegebenen Merkmalen, Bereichen, ganzen Zahlen, Schritten, Operationen, Elementen und/oder Komponenten angeben, das Vorhandensein oder das Hinzufügen von einem oder mehreren anderen bzw. weiteren Merkmalen, Bereichen, ganzen Zahlen, Schritten, Operationen, Elementen, Komponenten und/oder Gruppen davon jedoch nicht ausschließen.
  • Ausführungsformen der vorliegenden Erfindung stellen eine Vorgehensweise bereit, um ein Kopieren eines Datenobjekts in einer gleichzeitig ablaufenden kopierenden Garbage-Collection-Operation zu optimieren. In einer Ausführungsform wird eine Quellenkopie des Datenobjekts erkannt, das als Teil der Garbage-Collection-Operation kopiert werden soll. Ein Kopieren der Quellenkopie an einen Zielspeicherort wird durch einen primären zugreifenden Thread eingeleitet. Dieses Einleiten des Kopierens umfasst die Erstellung eines temporären Zielobjekt-Kopfbereichs für das Zielobjekt an dem Zielspeicherort, welcher einen Anzeiger enthält, der so gesetzt ist, dass er anzeigt, dass das Kopieren im Gange ist. Während das Kopieren stattfindet, wird die Ausführung von beliebigen anderen Anwendungsthreads, die versuchen, das Datenobjekt zu verwenden, so lange angehalten, wie der Anzeiger anzeigt, dass das Kopieren im Gange ist. Sobald das Kopieren abgeschlossen ist, wird der Zielobjekt-Kopfbereich durch eine Kopie des Quellenobjekt-Kopfbereichs ersetzt, wodurch der Anzeiger zurückgesetzt und zugreifenden Threads die Wiederaufnahme der Ausführung erlaubt wird.
  • Unter Bezugnahme auf 1 ist eine schematische Darstellung eines Beispiels einer Datenverarbeitungsumgebung 10 gezeigt. Die Datenverarbeitungsumgebung 10 ist lediglich ein Beispiel einer geeigneten Datenverarbeitungsumgebung und nicht als Hinweis auf eine Einschränkung des Nutzungsumfangs oder der Funktionalität von Ausführungsformen der hierin beschriebenen Erfindung zu verstehen. Ungeachtet dessen kann die Datenverarbeitungsumgebung 10 ausgeführt werden und/oder kann jedwede der vorstehend dargelegten Funktionalität durchführen.
  • In der Datenverarbeitungsumgebung 10 gibt es ein(en) Computersystem/Server 12, das bzw. der mit zahlreichen anderen Umgebungen oder Konfigurationen eines Universal- oder Spezial-Datenverarbeitungssystems betrieben werden kann. Zu Beispielen für hinlänglich bekannte Datenverarbeitungssysteme, -umgebungen und/oder - konfigurationen, die gegebenenfalls zur Verwendung mit dem Computersystem/Server 12 geeignet sind, gehören, ohne auf diese beschränkt zu sein, Personal-Computer-Systeme, Server-Computersysteme, Thin Clients, Thick Clients, tragbare oder Laptop-Einheiten, Mehrprozessorsysteme, auf einem Mikroprozessor beruhende Systeme, Aufsatzgeräte (Set-Top-Boxen), programmierbare Unterhaltungselektronik, Netzwerk-PCs, Minicomputersysteme, Mainframe-Computersysteme und verteilte Cloud-Computing-Umgebungen, die beliebige der vorstehenden Systeme oder Einheiten enthalten, und dergleichen.
  • Das Computersystem/der Server 12 kann in dem allgemeinen Kontext von durch ein Computersystem ausführbaren Anweisungen, wie zum Beispiel Programmmodulen, die durch ein Computersystem ausgeführt werden, beschrieben werden. Im Allgemeinen können Programmmodule Routinen, Programme, Objekte, Komponenten, Logik, Datenstrukturen und so weiter enthalten, die bestimmte Aufgaben durchführen oder bestimmte abstrakte Datentypen ausführen. Das Computersystem/der Server 12 kann in verteilten Cloud-Computing-Umgebungen in die Praxis umgesetzt werden, in denen Aufgaben von fernen Verarbeitungseinheiten durchgeführt werden, die über ein Übertragungsnetzwerk miteinander verbunden sind. In einer verteilten Cloud-Computing-Umgebung können sich Programmmodule sowohl in lokalen als auch in fernen Speichermedien eines Computersystems, darunter Hauptspeichereinheiten, befinden.
  • Wie in 1 gezeigt ist, ist das Computersystem/der Server 12 in der Datenverarbeitungsumgebung 10 in Form einer Universal-Datenverarbeitungseinheit gezeigt. Zu den Komponenten des Computersystems/Servers 12 können, ohne darauf beschränkt zu sein, ein oder mehrere Prozessoren oder Verarbeitungseinheiten 16, ein Systemspeicher 28 und ein Bus 18 gehören, der verschiedene Systemkomponenten verbindet, darunter den Systemspeicher 28 mit dem Prozessor 16.
  • Der Bus 18 stellt eine oder mehrere von beliebigen Busstrukturen von mehreren Arten von Busstrukturen dar, darunter einen Hauptspeicherbus oder einen Hauptspeichercontroller, einen peripheren Bus, einen Accelerated Graphics Port und einen Prozessor- oder lokalen Bus, der beliebige einer Vielzahl von Busarchitekturen verwendet. Beispielhaft, und nicht darauf beschränkt, gehören zu solchen Architekturen der Bus „Industry Standard Architecture (ISA)“, der Bus „Micro Channel Architecture (MCA)“, der Bus „Enhanced ISA (EISA)“, der lokale Bus „Video Electronics Standards Association (VESA)“ und der Bus „Peripheral Component Interconnects (PCI)“.
  • Das Computersystem/der Server 12 enthält üblicherweise eine Vielzahl von Datenträgern, die durch ein Computersystem gelesen werden können. Solche Datenträger können jedwede verfügbaren Datenträger sein, auf die von dem Computersystem/Server 12 zugegriffen werden kann, und zu ihnen gehören sowohl flüchtige und nicht flüchtige als auch auswechselbare und nicht auswechselbare Datenträger.
  • Zum Systemspeicher 28 können durch ein Computersystem lesbare Datenträger in Form von flüchtigem Speicher, wie beispielsweise einem Direktzugriffsspeicher (RAM) 30 und/oder einem Cachespeicher 32, gehören. Das Computersystem/der Server 12 kann des Weiteren weitere auswechselbare/nicht auswechselbare, flüchtige/nicht flüchtige Speichermedien eines Computersystems enthalten. Lediglich als Beispiel kann das Speichersystem 34 für Leseoperationen von und Schreiboperationen auf einen nicht auswechselbaren, nicht flüchtigen Magnetdatenträger (nicht gezeigt und üblicherweise als „Festplattenlaufwerk“ bezeichnet) bereitgestellt werden. Obgleich nicht gezeigt, können ein Magnetplattenlaufwerk für Leseoperationen von und Schreiboperationen auf eine auswechselbare, nicht flüchtige Magnetplatte (z.B. eine „Diskette“) und ein optisches Plattenlaufwerk für Leseoperationen von oder Schreiboperationen auf eine auswechselbare, nicht flüchtige optische Platte, wie beispielsweise ein CD-ROM, DVD-ROM, oder andere optische Datenträger bereitgestellt werden. In diesen Fällen kann jeder Datenträger über eine oder mehrere Datenträgerschnittstellen mit dem Bus 18 verbunden werden. Wie weiter dargestellt und nachstehend beschrieben wird, kann der Systemspeicher 28 mindestens ein Programmprodukt enthalten, das über einen Satz (z.B. zumindest einen) von Programmmodulen verfügt, die so konfiguriert sind, dass sie die Funktionen von Ausführungsformen der Erfindung ausführen.
  • Die Ausführungsformen der Erfindung können als ein durch einen Computer lesbarer Signaldatenträger ausgeführt sein, der ein weitergegebenes Datensignal mit darin realisiertem, durch einen Computer lesbaren Programmcode (z.B. im Basisband oder als Teil einer Trägerwelle) enthalten kann. Solch ein weitergegebenes Signal kann eine beliebige einer Vielzahl von Formen, darunter, ohne darauf beschränkt zu sein, elektromagnetische, optische oder eine beliebige geeignete Kombination daraus, annehmen. Bei einem durch einen Computer lesbaren Signaldatenträger kann es sich um einen beliebigen durch einen Computer lesbaren Datenträger handeln, der kein durch einen Computer lesbares Speichermedium ist und der ein Programm zur Verwendung durch ein Anweisungsausführungssystem, eine Anweisungsausführungsvorrichtung oder -einheit oder zur Verwendung in Verbindung mit einem Anweisungsausführungssystem, einer Anweisungsausführungsvorrichtung oder -einheit übertragen, weitergeben oder transportieren kann.
  • Programmcode, der auf einem durch einen Computer lesbaren Datenträger realisiert ist, kann unter Verwendung eines beliebigen geeigneten Mediums, darunter, ohne darauf beschränkt zu sein, eines drahtlosen, drahtgebundenen Kabels, eines Glasfaserkabels, Hochfrequenz (HF) usw., oder einer beliebigen geeigneten Kombination des Vorstehenden übertragen werden.
  • Das Programm/Dienstprogramm 40, das über einen Satz (zumindest einen) von Programmmodulen 42 verfügt, kann beispielhaft und nicht als Einschränkung im Systemspeicher 28 gespeichert werden, ebenso wie ein Betriebssystem, ein oder mehrere Anwendungsprogramme, andere Programmmodule und Programmdaten. Das Betriebssystem, ein oder mehrere Anwendungsprogramme, andere Programmmodule und Programmdaten oder eine Kombination daraus können jeweils eine Ausführung einer Netzwerkumgebung umfassen. Die Programmmodule 42 führen im Allgemeinen die Funktionen und/oder die Vorgehensweisen von erfindungsgemäßen Ausführungsformen aus, die hierin beschrieben sind.
  • Das Computersystem/der Server 12 kann auch mit einer oder mehreren externen Einheiten 14 wie beispielsweise einer Tastatur, einer Zeigereinheit, einem Bildschirm 24 usw.; mit einer oder mehreren Einheiten, die einem Nutzer den Dialogverkehr mit dem Computersystem/Server 12 ermöglichen; und/oder beliebigen Einheiten (z.B. Netzwerkkarte, Modem usw.), die dem Computersystem/Server 12 den Datenaustausch mit einer oder mehreren anderen Datenverarbeitungseinheiten ermöglichen, Daten austauschen. Ein solcher Datenaustausch kann über E/A-Schnittstellen 22 stattfinden.
  • Dennoch kann das Computersystem/der Server 12 mit einem oder mehreren Netzwerken wie beispielsweise einem lokalen Netz (LAN), einem allgemeinen Weitverkehrsnetz (WAN) und/oder einem öffentlichen Netz (z.B. dem Internet) über den Netzwerkadapter 20 Daten austauschen. Wie dargestellt ist, tauscht der Netzwerkadapter 20 mit den anderen Komponenten des Computersystems/Servers 12 über den Bus 18 Daten aus. Es sollte klar sein, dass auch andere Hardware- und/oder Software-Komponenten in Verbindung mit dem Computersystem/Server 12 verwendet werden könnten, obgleich diese nicht gezeigt sind. Zu Beispielen gehören, ohne darauf beschränkt zu sein: Mikrocode, Einheitentreiber, redundante Verarbeitungseinheiten, externe Anordnungen von Festplattenlaufwerken, RAID-Systeme, Bandlaufwerke und Speichersysteme zur Datenarchivierung usw.
  • Unter Bezugnahme auf 2 ist eine Systemübersicht, die die hierin erörterte Funktionalität beschreibt, gemäß einer Ausführungsform der vorliegenden Erfindung gezeigt. Es sei darauf hingewiesen, dass die hierin angeführten Lehren innerhalb einer beliebigen Art von Datenverarbeitungsumgebung 70, darunter, ohne darauf beschränkt zu sein, einer einzelnen Computereinheit, einer Client/Server-Umgebung, einer Netzwerk-Datenverarbeitungsumgebung (z.B. einer Cloud-Computing-Umgebung 50) und/oder dergleichen in die Praxis umgesetzt werden können. Ein eigenständiges Computersystem/eigenständiger Server 12 ist in 2 lediglich zum Zweck der Veranschaulichung gezeigt. In dem Fall, dass die hierin angeführten Lehren in einer vernetzten Datenverarbeitungsumgebung in die Praxis umgesetzt werden, braucht nicht jeder Client über eine GC-Kopieroptimierungsengine (nachstehend als „System 72“ bezeichnet) zu verfügen. Vielmehr könnte das System 72 auf einen Server oder eine serverfähige Einheit geladen werden, der bzw. die (z.B. drahtlos) mit den Clients Daten austauscht, um eine optimierte GC hierfür bereitzustellen. Dessen ungeachtet ist das System 72, wie dargestellt, innerhalb des Computersystems/Servers 12 gezeigt. Im Allgemeinen kann das System 72 als Programm/Dienstprogramm 40 auf dem Computersystem 12 von 1 ausgeführt sein und die hierin angeführten Funktionen aktivieren. Es sei des Weiteren darauf hingewiesen, dass das System 72 innerhalb einer beliebigen Art von System enthalten sein oder in Verbindung mit einer beliebigen Art von System arbeiten kann, das Befehle in Bezug auf IT-Ressourcen in einer vernetzten Datenverarbeitungsumgebung empfängt, verarbeitet und/oder ausführt. Ein solch anderes System/solche anderen Systeme wurden in 2 der Einfachheit halber nicht gezeigt.
  • Insofern kann das System 72 ähnlich einem Universalcomputer mehrere Funktionen ausführen. Insbesondere kann das System 72, unter anderen Funktionen, ein Kopieren eines Datenobjekts in einer gleichzeitig ablaufenden kopierenden Garbage-Collection-Operation optimieren. Dazu kann das System 72 enthalten: eine Quellenkopie-Erkennungsfunktion 74, eine Kopiereinleitungsfunktion 76, eine Threadausführungs-Anhaltefunktion 77 und eine Kopfbereich-Ersetzungsfunktion 78.
  • Die Quellenkopie-Erkennungsfunktion 74 des Systems 72, die von dem Computersystem/Server 12 ausgeführt wird, ist so konfiguriert, dass sie eine Quellenkopie 88N eines Datenobjekts erkennt, das als Teil der Garbage-Collection-(GC-)Operation kopiert werden soll. Wie vorstehend erwähnt wurde, erkennt eine GC-Operation aktive Datenobjekte 88A bis N und entfernt nicht verwendete Datenobjekte aus einem Hauptspeicher 84 eines Computersystems 82. Insofern können die Lehren dieser Erfindung in einer beliebigen Umgebung, in der GC durchgeführt wird, in die Praxis umgesetzt werden. In einer Ausführungsform kann die GC-Operation in einer verwalteten Laufzeitumgebung (z.B. Java, Python, Ruby, C#, Swift und/oder dergleichen) durchgeführt werden (Java ist eine Marke von Sun Microsystems; Python ist eine Marke von Python USA, Inc.; C# ist eine Marke von Microsoft, Inc.; und Swift ist eine Marke von Apple Inc., in den Vereinigten Staaten und/oder anderswo). In einer solchen Ausführungsform kann der Hauptspeicher 84 ein Heapspeicher sein, der zur Speicherung der Datenobjekte 88A bis N in der verwalteten Laufzeitumgebung verwendet wird.
  • In jedem Fall ist der Hauptspeicher 84, wie veranschaulicht, in mehrere Hauptspeicherpartitionen 86A bis N aufgeteilt. In regelmäßigen Abständen kann festgestellt werden, dass GC auf einer bestimmten Hauptspeicherpartition 86A bis N durchgeführt werden soll. Nehmen wir beispielhalber an, dass festgestellt wird, dass GC auf der Hauptspeicherpartition 86B durchgeführt werden soll. In einer GC-Umgebung vom Typ Copying Collector erkennt eine Quellenkopie-Erkennungsfunktion 74, dass das Datenobjekt 88N ein aktives Objekt innerhalb der Hauptspeicherpartition 86B (z.B. Auslagerungs-/Quellenbereich) ist und somit in einen Survivor-Bereich 86N kopiert werden muss. In einer Ausführungsform wird das Datenobjekt 88N erkannt, wenn ein zugreifender Thread 92 ein Objekt-Adressfeld aus einem beliebigen lebendigen Datenobjekt 88A bis N (z.B. dem Datenobjekt 88A bis N) im Hauptspeicher 82 liest, wenn sich der Wert des Objekt-Adressfelds auf ein Datenobjekt 88A bis N bezieht, das sich im Auslagerungs-/Quellenbereich 86B im Hauptspeicher 82 (z.B. dem Heapspeicher) befindet. Dieses Erkennen kann entweder von einem zugeordneten GC-Thread 96A bis N durchgeführt werden, der eine Durchsuchung, die rekursiv sein kann, von lebendigen Objekten im Hauptspeicher 82 (z.B. als Teil der GC-Operation) durchführt. Das Erkennen kann auch oder alternativ durch einen regulären Anwendungsthread 94A bis N durchgeführt werden, der das lebendige Objekt im Verlauf seiner normalen Ausführung antrifft. In jedem Fall kann das Kopien des Datenobjekts 88N, sobald es erkannt wurde, in den Survivor-Bereich 88N beginnen.
  • Die Erfinder der hierin beschriebenen Erfindung haben bestimmte Unzulänglichkeiten bei den aktuellen Lösungen für das Kopieren eines Datenobjekts 88N in einer gleichzeitig ablaufenden kopierenden GC-Operation festgestellt. Zum Beispiel gibt es bei einer Stop-the-World-GC erst nach dem Abschluss des Kopierens ein Problem mit einem zugreifenden Thread 92, der das Zieldatenobjekt 88N' verwendet (das Zieldatenobjekt 88N' unterliegt letztendlich einer Durchsuchung, möglicherweise durch einen anderen GC-Thread 96N oder die CPU, wird aber nicht an die Durchsuchungswarteschlange gesendet und steht vor dem Abschluss des Kopierens nicht für eine Durchsuchung zur Verfügung). Jedoch können Anwendungsthreads 94A bis N bei einer Stop-the-World-GC, die versuchen, während einer GC-Operation auf Datenobjekte 88A bis N zuzugreifen, Wartezeiten unterworfen werden, die gegebenenfalls länger als notwendig sind, während sie darauf warten, dass die GC-Operation das Kopieren abschließt. Im Gegensatz dazu werden Anwendungsthreads 94A bis N in einer gleichzeitig ablaufenden GC-Operation zusammen mit aktiven GC-Threads 96A bis N ausgeführt. Somit ist es möglich, dass ein zugreifender Thread 92, der versucht, auf ein Datenobjekt 88N zuzugreifen, unmittelbar dem weiterleitenden Zeiger auf das Zieldatenobjekt 88N' folgen und versuchen könnte, auf den Inhalt des Zieldatenobjekts 88N' zuzugreifen, während das Zieldatenobjekt 88N' immer noch kopiert wird.
  • Bei einer aktuellen Lösung dieses Problems in gleichzeitig ablaufenden GC-Operationen tritt jeder zugreifende Thread 92 (sei es ein Anwendungsthread 94A bis N oder ein GC-Thread 96A bis N), der versucht, auf ein Datenobjekt 88N in der Hauptspeicherpartition 86B zuzugreifen, die einer GC unterzogen wird, in einen Wettlauf ein, um das Datenobjekt 88N zu kopieren. Das heißt, jeder zugreifende Thread 92 beginnt damit, seinen eigenen Speicherbereich in dem Survivor-Bereich 86N zuzuordnen und das Datenobjekt 88N in seinen vorab zugeordneten Speicherbereich zu kopieren. Dann, nachdem dessen Kopiervorgang abgeschlossen ist, versucht jeder zugreifende Thread 92, seine Kopie des Datenobjekts 88N in einer atomaren Operation als das neue Zieldatenobjekt 88N' bezeichnen zu lassen. Diese aktuelle Lösung kann jedoch zur Erstellung von mehreren Duplikatkopien führen, von denen nur eine letzten Endes das Zieldatenobjekt 88N' wird. Dies führt mehrere Unzulänglichkeiten ein. Zum Beispiel wird die CPU-Zeit, die von einem beliebigen „verlierenden“ zugreifenden Thread 92 in Anspruch genommen wird, der eine Kopie des Datenobjekts 88N erstellt hat, die letzten Endes nicht als das Zieldatenobjekt 88N' verwendet wurde, sowie jedweder im Survivor-Bereich 86N durch den verlierenden zugreifenden Thread 92 zugeordnete Speicherbereich (z.B. Heapspeicherbereich) verschwendet. Des Weiteren ist der CPU-Cache eines verlierenden zugreifenden Threads 92 infolge des Kopierens letztendlich möglicherweise mit nutzlosen Daten verunreinigt.
  • Diese Unzulänglichkeiten werden noch ausgeprägter, wenn das Datenobjekt 88N, das kopiert wird, verhältnismäßig groß ist. Wenn das Datenobjekt 88N zum Beispiel zu groß für den CPU-Cache ist, können die Kopieroperationen eines beliebigen verlierenden zugreifenden Threads 92 den gemeinsam genutzten Datenbus belegen, wodurch Datenübertragungen für andere Threads möglicherweise langsamer werden. Mit zunehmender Größe (z.B. MBs) und Beliebtheit (z.B. durch mehrere andere Objekte im Heapspeicher referenziert) des Datenobjekts 88N nimmt außerdem die Wahrscheinlichkeit deutlich zu, dass Duplikate erstellt werden. Eine solche Zunahme von Kopien eines solch großen Objekts kann äußerst spürbare negative Auswirkungen auf die Systemperformanz haben. Dies kann insbesondere in Bezug auf den verschwendeten Speicherbereich gelten, der verwendet wird, um mehrere große Kopien zu erzeugen, da ein(e) langsame(r) Thread/CPU tatsächlich nicht in der Lage sein könnte, das Objekt überhaupt zu kopieren (aufgrund dessen, dass der Survivor-Bereich 86N von mehreren Kopien dieses Objekts durch schnellere Threads vollständig in Anspruch genommen wird), so dass der ganze GC-Zyklus abgebrochen werden muss. Solch ein abgebrochener Zyklus kann eine ziemlich kostspielige Wiederherstellungsoperation erforderlich machen, die möglicherweise sehr lange Verzögerungen verursacht, was jedwede Vorteile zunichte macht, die sich aus der gleichzeitig ablaufenden GC-Operation ergeben.
  • Merkmale der aktuellen Erfindung heilen einige oder alle dieser Unzulänglichkeiten, unter möglicherweise anderen, indem sie das Kopieren eines Datenobjekts in einer gleichzeitig ablaufenden kopierenden GC-Operation optimieren. Diese Merkmale erhalten die Vorteile einer gleichzeitig ablaufenden kopierenden GC, während sie das Erstellen des Kopierens von mehreren Kopien entbehrlich machen. Dies erhöht die Effizienz, mit der GC-Operationen durchgeführt werden können. In einigen Ausführungsformen ermöglichen es diese Merkmale der aktuellen Erfindung, mehrere zugreifende Threads 92 gleichzeitig zu verwenden, um eine synchronisierte Kopieroperation durchzuführen, was die Effizienz einer Computeroperation während einer GC-Operation weiter erhöht.
  • Unter Bezugnahme auf die 3A bis B sind Beispiele von Quellenkopie-Kopfbereichen 100 gemäß Ausführungsformen der vorliegenden Erfindung gezeigt. Wie in 3A gezeigt ist, stellt ein Datenobjekt-Kopfbereich 110 einen beispielhaften ursprünglichen, nicht geänderten Kopfbereich für ein Datenobjekt 88A bis N (2) im Hauptspeicher 84 dar, das noch nicht zum Kopieren als Teil der GC-Operation erkannt wurde. Insofern wird das Weiterleitungsbit 112 des Datenobjekt-Kopfbereichs 110 auf 0 gesetzt, was anzeigt, dass es gerade nicht kopiert wird. Des Weiteren wird der Klasseninformationszeiger 114 im Datenobjekt-Kopfbereich 110 so gesetzt, dass er auf Klasseninformationen über das Datenobjekt 88A bis N (2) zeigt.
  • Sobald die Quellenkopie 88N als ein Kandidat für ein Kopieren erkannt wurde, treten, ähnlich wie bei aktuellen nicht gleichzeitigen GC-Lösungen, beliebige zugreifende Anwendungen 92, die versuchen, auf die Quellenkopie 88N zuzugreifen, in einen „Wettlauf“ ein, um den Objektkopfbereich 100 in einer atomaren Operation weiterzuleiten (Speicherbereich für das Zieldatenobjekt 88N' im Survivor-Bereich 86N zuzuordnen) und ihn zu aktualisieren. Der erste bewertende Thread, der dies macht, wird oftmals als der „gewinnende“ Thread und hierin als der primäre zugreifende Thread (nachstehend 92A) bezeichnet. In jedem Fall zeigt 3B einen aktualisierten Objektkopfbereich 120, der sich aus dem atomaren Aktualisieren des Kopfbereichs der Quellenkopie 88N durch den primären zugreifenden Thread 92A ergibt. Wie gezeigt ist, wurde das Weiterleitungsbit 112 auf 1 aktualisiert, was anzeigt, dass das Datenobjekt 88N an einen neuen Zielspeicherort weitergeleitet wird, und anstelle des vorherigen Zeigers auf die Klasseninformation wurde die Adresse dieses neuen Zielspeicherorts an der Klassenspeicherort-Adresse 114 gespeichert. Wie zu sehen ist, braucht die Quellenkopie 88N lediglich ein Bit, um anzuzeigen, dass das Objekt an einen fernen Speicherort weitergeleitet wird. In dieser Ausführung wird die Weiterleitungsadresse mit dem Klassen-/Typzeigerbereich des Objekts gemeinsam genutzt. Das Weiterleitungsbit ist üblicherweise auch Teil dieses Adressworts, da die niedrigstwertigen 2 bis 4 Bits der Weiterleitungsadresse aufgrund der Objektausrichtung (4 bzw. 16 Bytes) und der Klassen-/Typinformation (bei Belegung desselben Bereichs) nicht verwendet werden. Auch müssen aufgrund der erzwungenen Ausrichtung mehrere niedrigstwertige Bits möglicherweise nicht verwendet werden.
  • Unter zusätzlicher Bezugnahme auf 2 ist die Kopiereinleitungsfunktion 76 des Systems 72, die von dem Computersystem/Server 12 ausgeführt wird, so konfiguriert, dass sie durch einen primären zugreifenden Thread 92A ein Kopieren der Quellenkopie 88N von erkannten Daten an einen Zielspeicherort einleitet. Insbesondere kann der Thread, als Teil des Wettlaufs um die Bezeichnung als primärer zugreifender Thread 92A, den Kopiervorgang einleiten. Um dieses Einleiten durchzuführen, erstellt der primäre zugreifende Thread 92A zuerst einen temporären Zielobjekt-Kopfbereich und kopiert den Zielobjekt-Kopfbereich an den Zielspeicherort, an den das Zieldatenobjekt 88N' kopiert wird. Dieser Kopfbereich enthält einen Anzeiger, der so gesetzt ist, dass er anzeigt, dass das Kopieren im Gange ist. In einer Ausführungsform ist der Anzeiger ein Bit, das sich in dem Zielobjekt-Kopfbereich befindet und denselben Speicherort im Zielobjekt-Kopfbereich belegt, den das Weiterleitungsbit in dem Quellenobjekt-Kopfbereich 120 belegt. Insofern erfordert die vorliegende Erfindung kein extra Bit in dem Zielspeicherort-Feld (oder irgendwo in dem ursprünglichen Objekt). Vielmehr wird die (zweifache) Erscheinungsform des Quellendatenobjekts 88N in keiner Weise verändert, sondern lediglich auf die gleiche Weise geändert, in der der Quellenobjekt-Kopfbereich 120 eines beliebigen Quellendatenobjekts 88N in einer kopierenden GC-Lösung geändert würde. Der neue Zustand „wird immer noch kopiert“ wird durch eine nicht verwendete Markierung in dem Zielobjekt-Kopfbereich aufrechterhalten. Da das weitergeleitete Bit 112 normalerweise nicht im Zieldatenobjekt 88N' verwendet wird (Objekte werden innerhalb eines GC-Zyklus nicht rekursiv weitergeleitet), kann genau dieses Bit zur Anzeige des neuen Zwischenzustands verwendet werden, da es an anderer Stelle verwendet wird.
  • Unter Bezugnahme auf 4 ist ein Beispiel eines temporären Zielobjekt-Kopfbereichs 200 gemäß einer Ausführungsform der Erfindung gezeigt. Wie gezeigt ist, wurde der Zielobjekt-Kopfbereich 200 mit einem auf „1“ gesetzten Kopierbit 212 erstellt, was anzeigt, dass das Kopieren im Gange ist. Des Weiteren können in einer Ausführungsform auch andere Teile (z.B. der Teil, der dem Klasseninformationszeiger/der Zielspeicherort-Adresse 114 entspricht) des Zielobjekt-Kopfbereichs 200 verwendet werden, um das Kopieren zu vereinfachen, wie beschrieben werden wird.
  • Nochmals unter Bezugnahme auf 2 in Verbindung mit 3B und 4 ist die Threadausführungs-Anhaltefunktion 77 des Systems 72, die von dem Computersystem/Server 12 ausgeführt wird, so konfiguriert, dass sie eine Ausführung eines sekundären zugreifenden Threads, der versucht, das Datenobjekt zu verwenden, so lange anhält wie der Anzeiger anzeigt, dass das Kopieren im Gange ist. Insbesondere kann der primäre zugreifende Thread 92A den Vorgang des Kopierens der Daten der Quellendatenkopie 88N an das Zieldatenobjekt 88N' durchführen, sobald der Zielobjekt-Kopfbereich 200 mit dem Kopieranzeiger von einem zugreifenden Thread 92 erstellt und der zugreifende Thread 92 als der primäre zugreifende Thread 92A bezeichnet wurde. Während dieses Zeitraums prüft ein beliebiger zugreifender Thread 92, bei dem es sich nicht um den primären zugreifenden Thread 92A handelt (nachstehend sekundärer zugreifender Thread 92N), welcher versucht, auf die Quellendatenkopie 88N zuzugreifen, ob das Quellenobjekt 88N weitergeleitet wird, indem er das Weiterleitungsbit 112 in dem Quellenobjekt-Kopfbereich 100 prüft. Als Reaktion auf eine Feststellung, dass das Weiterleitungsbit 112 in dem Quellenobjekt-Kopfbereich 100 gesetzt ist, wird der sekundäre zugreifende Thread 92N an den Zielspeicherort weitergeleitet (z.B. über die in dem Klasseninformation-Speicherort 114 gespeicherte Zielspeicherort-Adresse). Nach der Ankunft am Zielspeicherort prüft der sekundäre zugreifende Thread 92N, ob das Kopierbit 212 im Zielobjekt-Kopfbereich 200 gesetzt ist. Wenn das Kopierbit 212 gesetzt ist, wird der sekundäre zugreifende Thread 92N eine Zeit lang angehalten (er wartet z.B.), bevor er das Kopierbit 212 erneut prüft. Somit werden beliebige zugreifende Threads 92 daran gehindert, auf das Zieldatenobjekt 88N' und/oder die Zielobjektadresse zuzugreifen, solange das Kopieren im Gange ist, was von dem Anzeiger (z.B. dem Kopierbit 212) angezeigt wird. In den meisten Fällen schließt das Warten einen aktiven Leerlauf nur für einen sehr kurzen Zeitraum ein, da die meisten Objekte, die kopiert werden, verhältnismäßig klein sind und schnell zur Verfügung stehen. Wenn das Zieldatenobjekt 88N' nach einem vorher festgelegten Zeitraum jedoch immer noch nicht zur Verfügung steht, kann der zugreifende Thread 92 noch etwas mehr Leerlauf nutzen, während er auf die CPU verzichtet und schließlich in den Ruhemodus übergeht und in regelmäßigen Abständen wieder aktiv wird.
  • In einer Ausführungsform kann die Threadausführungs-Anhaltefunktion 77 die verlierenden (z.B. sekundären) zugreifenden Threads 92N verwenden, um eine Kopieroperation durchzuführen, bei der das Kopieren der Quellenkopie 88N unter einer Mehrzahl von (teilnehmenden) zugreifenden Threads 92 synchronisiert wird. Dies kann auf einer Feststellung beruhen, dass das zu kopierende Datenobjekt eine vorher festgelegte Größe überschreitet. In jedem Fall können in solch einer Operation sowohl der „gewinnende“ primäre zugreifende Thread 92A als auch beliebige „verlierende“ sekundäre zugreifende Threads 92N in die Kopieroperation eingebunden werden. Die Anzahl der sekundären zugreifenden Threads 92N, die teilnehmen dürfen, kann auf der Grundlage von solchen Faktoren wie der Größe des Datenobjekts 88N, der Menge des verfügbaren Busplatzes und/oder dergleichen begrenzt werden. In jedem Fall können hierfür zusätzliche Informationen, die verwendet werden, um das synchronisierte Kopieren zu vereinfachen, in anderen Teilen (z.B. dem Teil, der dem Klasseninformationszeiger/der Zielspeicherort-Adresse 114 entspricht) des Zielobjekt-Kopfbereichs gespeichert werden.
  • Unter Bezugnahme auf 5 ist ein temporärer Zielobjekt-Kopfbereich 300, der für ein synchronisiertes Kopieren unter Verwendung einer Mehrzahl von zugreifenden Threads 92 (2) ausgelegt wurde, gemäß einer Ausführungsform der Erfindung veranschaulicht. Wie zuvor beschrieben wurde, hat der Zielobjekt-Kopfbereich 300 einen Anzeiger in Form eines Kopierbits 312, das gesetzt wurde. Des Weiteren ist auch ein Feld 314 „Wert von nicht kopierten Daten“ gesetzt, das die Größe des Zieldatenobjekts 88N' speichert, welches noch kopiert werden muss. Ebenso wurde auch ein Teilnehmende-Threads-Feld 316, das die Anzahl der zugreifenden Threads 92 speichert, die an dem synchronisierten Kopieren teilnehmen, gesetzt.
  • Unter Bezugnahme auf 6 ist ein Prozessablaufplan 400, der ein synchronisiertes Kopieren unter Verwendung einer Mehrzahl von teilnehmenden Threads veranschaulicht, gemäß einer Ausführungsform der Erfindung gezeigt. Der Ablauf beginnt mit den vorstehend beschriebenen Prozessen, in denen ein beliebiger zugreifender Thread 92, der versucht, auf das Datenobjekt 88N zuzugreifen, in 402 versucht, Speicherbereich für das Zieldatenobjekt 88N' zuzuordnen (2). Zusätzlich unter Bezugnahme auf 2 und 5 umfasst die Erstellung des Zielobjekt-Kopfbereichs 250 ein Initialisieren des Zielobjekt-Kopfbereichs 250 in 404, indem das Feld 314 „Wert von nicht kopierten Daten“ auf die Gesamtgröße des zu kopierenden Datenobjekts 88N, das Feld 316 „Wert von kopierenden Threads“ auf 0 und das Kopierbit auf 1 gesetzt werden. Bei 406 versucht der zugreifende Thread 92, das Weiterleiten zu gewinnen, wie zuvor beschrieben wurde, und zu dem primären zugreifenden Thread 92A zu werden.
  • In 408 geht, sobald es einem Thread gelingt, das Weiterleiten zu gewinnen, und er der primäre zugreifende Thread 92A wird, das Kopieren der Quellenkopie 88N in den Survivor-Bereich in Abschnitten fester Länge vom Ende zum Anfang vonstatten, wobei der primäre zugreifende Thread 92A bei 410 das Kopieren von jedweden nicht ausgerichteten Daten durchführt (z.B. Daten am Ende der Quellenkopie 88N, die keinen ganzen Längenabschnitt darstellen). Während des Kopierens wird jedes Mal, wenn der primäre zugreifende Thread 92A eine Kopieroperation abgeschlossen hat, das Feld 314 „Wert von nicht kopierten Daten“ in 412 geprüft, um sicherzustellen, dass der Wert von nicht kopierten Daten größer als 0 ist (z.B. gibt es noch mehr Daten, die kopiert werden müssen). In 414, wenn noch mehr Daten zu kopieren sind, wählt der primäre zugreifende Thread 92A einen zu kopierenden Abschnitt aus und versucht, ihn in einer atomaren Operation zu gewinnen. Wenn der Abschnitt in 416 nicht erfolgreich gewonnen wird, schaltet der Ablaufprozess zurück zu 412. Andernfalls verringert der primäre zugreifende Thread 92A den Nicht-kopiert-Wert um die Größe des Datenabschnitts, der kopiert wird, und kopiert den gewonnenen Abschnitt bei 418. Dies wird fortgesetzt, bis der Wert von nicht kopierten Daten 0 ist (z.B. gibt es keine Daten mehr, die kopiert werden müssen), wobei der primäre zugreifende Thread 92A an diesem Punkt in 432 wartet, bis alle anderen Threads in 430 ihre Kopien abgeschlossen haben (z.B. bis der Wert von Daten von kopierenden Threads 0 ist.)
  • Für einen beliebigen zugreifenden Thread 92, bei dem es sich um einen verlierenden/sekundären zugreifenden Thread 92N handelt (z.B. gelingt es ihm bei 408 nicht, das Weiterleiten bei 406 zu gewinnen, oder er versucht, auf die Quellenkopie 88N zuzugreifen, nachdem der primäre zugreifende Thread 92A bestimmt wurde), wird der Thread bei 419 unter Verwendung der durch den primären zugreifenden Thread 92A gesetzten Weiterleitungsadresse weitergeleitet, wobei der sekundäre zugreifende Thread 92N bei 420 den Anzeiger prüft (z.B. ob das Kopierbit 312 gesetzt ist), um festzustellen, ob das Kopieren im Gange ist. Wenn ja, prüft der sekundäre zugreifende Thread 92N, ähnlich dem primären zugreifenden Thread 92A, das Feld 314 „Wert von nicht kopierten Daten“ bei 422, um sicherzustellen, dass der Wert von nicht kopierten Daten größer als 0 ist (z.B. gibt es noch mehr Daten, die kopiert werden müssen). Wenn in 424 noch weitere Daten zu kopieren sind, wählt der sekundäre zugreifende Thread einen zu kopierenden Abschnitt aus und versucht, ihn in einer atomaren Operation zu gewinnen, wodurch der Nicht-kopiert-Wert ebenfalls um die Größe des Datenabschnitts, der kopiert wird, verringert wird und, wenn dies der erste Datenabschnitt ist, der durch den sekundären Thread, 92N, kopiert wird, sich der Wert von Daten von kopierenden Threads in dem Feld 316 „Wert von kopierenden Threads“ erhöht. Der sekundäre Thread 92N kopiert dann den gewonnenen Abschnitt bei 428, woraufhin der Prozess zu 420 zurückkehrt. Wenn der Abschnitt in 426 nicht erfolgreich gewonnen wird, schaltet der Prozess zurück zu 420. Dies wird fortgesetzt, bis der Wert von nicht kopierten Daten 0 ist (z.B. gibt es keine Daten mehr, die kopiert werden müssen), an welchem Punkt der sekundäre zugreifende Thread bei 423 den Wert von Daten von kopierenden Threads in dem Feld 316 „Wert von kopierenden Threads“ in einer atomaren Operation um 1 verringert und wartet, bis der Anzeiger anzeigt, dass das Kopieren abgeschlossen ist (z.B. ob das Kopierbit 212 den Wert 0 hat), wobei der Ablauf zu diesem Zeitpunkt zu 440 schaltet.
  • Unter Bezugnahme auf 7 ist ein Beispiel eines Zieldatenobjekts 500 während des Kopierens durch eine Mehrzahl von zugreifenden Threads (2) gemäß einer Ausführungsform der vorliegenden Erfindung veranschaulicht. Zusätzlich unter Bezugnahme auf 2 gehören, wie veranschaulicht ist, zu den zugreifenden Threads 92, die das synchronisierte Kopieren durchführen, der primäre zugreifende Thread W und die sekundären zugreifenden Threads T1 und T2. Somit ist der Wert von Daten von kopierenden Threads = 2, um die Tatsache widerzuspiegeln, dass die beiden sekundären zugreifenden Threads 92N (zusätzlich zum primären zugreifenden Thread W) an dem Kopieren teilnehmen. Wie gezeigt ist, wurde ein nicht ausgerichteter Abschnitt 520 am Ende des Zieldatenobjekts 88N' durch den primären zugreifenden Thread W kopiert. Andere Abschnitte 522 befinden sich in verschiedenen Phasen des Kopierens, wobei drei Abschnitte bereits kopiert worden sind, drei Abschnitte gerade kopiert werden und zwei Abschnitte noch nicht kopiert worden sind. Somit ist der Wert von nicht kopierten Daten gleich der Größe der beiden Abschnitte, die noch kopiert werden müssen. Des Weiteren muss auch noch die endgültige Version des Objektkopfbereichs 524 kopiert werden, wie beschrieben werden wird.
  • Nochmals unter Bezugnahme auf 2 in Verbindung mit 3A und 4 ist die Threadausführungs-Anhaltefunktion 78 des Systems 72, die von dem Computersystem/Server 12 ausgeführt wird, so konfiguriert, dass sie den Zielobjekt-Kopfbereich 300 durch eine Kopie des ursprünglichen Quellenobjekt-Kopfbereichs 110 der Quellenkopie als Reaktion auf einen Abschluss des Kopierens ersetzt. Insbesondere, unter zusätzlicher Bezugnahme auf 6, schließt der primäre zugreifende Thread 92A, sobald alle zugreifenden Threads 92 das Kopieren abgeschlossen haben, was dadurch angegeben wird, dass sowohl der Wert von nicht kopierten Daten als auch der Wert von Daten von kopierenden Threads „0“ ist, das Kopieren ab, indem er den Zielobjekt-Kopfbereich 300 auf den des vorab kopierten Datenobjekts 88N wiederherstellt, wie in 434, wodurch auch der Anzeiger zurückgesetzt wird (z.B. wird das Kopierbit 212 auf 0 zurückgesetzt). In einer Ausführungsform wird das Ersetzen des Zielobjekt-Kopfbereichs in einer einzigen Aktualisierung des Hauptspeichers durchgeführt, bei der sowohl der Anzeiger zurückgesetzt als auch die Klasseninformation wiederhergestellt wird, ebenso wie beliebige andere Felder, die sich im Zielkopfbereich befinden können, wie beispielsweise, ohne darauf beschränkt zu sein, das Objektalter, Hash-Bits usw. Dieses Zurücksetzen des Anzeigers zeigt allen zugreifenden Threads 92 an, dass das Zieldatenobjekt 88N' zur Verwendung zur Verfügung steht, wodurch das Anhalten der sekundären zugreifenden Threads 92N beendet wird. Daraufhin können von den Anwendungsthreads 96A bis N für den Zugriff auf das Datenobjekt verwendete Adressen zurückgesetzt werden, um auf den Zielspeicherort zu verweisen.
  • Nun Bezug nehmend auf 8 in Verbindung mit 2 ist ein Verfahrensablaufplan 600 gemäß einer Ausführungsform der vorliegenden Erfindung gezeigt. Bei 610 erkennt die Quellenkopie-Erkennungsfunktion 74 des Systems 72, die von dem Computersystem/Server 12 ausgeführt wird, eine Quellenkopie 88N des Datenobjekts, das als Teil der Garbage-Collection-Operation kopiert werden soll. Bei 620 leitet die Kopiereinleitungsfunktion 76 des Systems 72, die von dem Computersystem/Server 12 ausgeführt wird, ein Kopieren der Quellenkopie 88N an einen Zielspeicherort ein. Das Einleiten umfasst das durch den primären zugreifenden Thread 92A erfolgende Erstellen eines Zielobjekt-Kopfbereichs für ein Zielobjekt an dem Zielspeicherort, welcher einen Anzeiger enthält. Dieser Anzeiger wird so gesetzt, dass er anzeigt, dass das Kopieren im Gange ist. Bei 630 hält die Threadausführungs-Anhaltefunktion 77 des Systems 72, die von dem Computersystem/Server 12 ausgeführt wird, die Ausführung eines beliebigen sekundären zugreifenden Threads 92N, der versucht, das Datenobjekt zu verwenden, so lange an, wie die Anzeige anzeigt, dass das Kopieren im Gange ist, wobei sie jedoch optional die angehaltenen Threads in dem Kopiervorgang verwendet. Bei 640 ersetzt die Kopfbereich-Ersetzungsfunktion 78 des Systems 72, die von dem Computersystem/Server 12 ausgeführt wird, den Zielobjekt-Kopfbereich durch eine Kopie des Quellenobjekt-Kopfbereichs der Quellenkopie als Reaktion auf den Abschluss des Kopierens. Dieses Wiederherstellen stellt den Zugriff auf das kopierte Datenobjekt wieder her.
  • Der Ablaufplan von 8 veranschaulicht die Architektur, die Funktionalität und die Betriebsweise von möglichen Ausführungen von Systemen, Verfahren und Computerprogrammprodukten gemäß verschiedenen Ausführungsformen der vorliegenden Erfindung. In diesem Zusammenhang kann jeder Block in dem Ablaufplan ein Modul, ein Segment oder einen Teil von Code darstellen, das bzw. der eine oder mehrere ausführbare Anweisungen zur Ausführung der angegebenen logischen Funktion(en) aufweist. Es sei auch angemerkt, dass die in den Blöcken angegebenen Funktionen in einigen alternativen Ausführungen mitunter in einer anderen als der in den Figuren abgebildeten Reihenfolge auftreten können. Zwei nacheinander gezeigte Blöcke können zum Beispiel in Wirklichkeit im Wesentlichen gleichzeitig ausgeführt werden. Es ist ferner anzumerken, dass jeder Block der Ablaufpläne durch spezielle auf Hardware beruhende Systeme, welche die angegebenen Funktionen oder Schritte durchführen, oder durch Kombinationen aus Spezial-Hardware und Computeranweisungen umgesetzt werden kann.
  • Während sie hierin als eine Vorgehensweise zum Optimieren eines Kopierens eines Datenobjekts in einer gleichzeitig ablaufenden kopierenden Garbage-Collection-Operation gezeigt und beschrieben wurde, sei darauf hingewiesen, dass die Erfindung des Weiteren verschiedene alternative Ausführungsformen bereitstellt. Zum Beispiel stellt die Erfindung in einer einzelnen Ausführungsform ein Verfahren bereit, das den erfindungsgemäßen Prozess auf der Grundlage von Abonnements, Werbung und/oder Gebühren durchführt. Das heißt, ein Serviceanbieter wie beispielsweise ein Solution Integrator könnte das Bereitstellen von Funktionalität anbieten, um ein Kopieren eines Datenobjekts in einer gleichzeitig ablaufenden kopierenden Garbage-Collection-Operation zu optimieren. In diesem Fall kann der Serviceanbieter eine Computerinfrastruktur wie beispielsweise das Computersystem 12 (1) erstellen, verwalten, unterstützen usw., die die erfindungsgemäßen Prozesse für einen oder mehrere Nutzer durchführt. Als Gegenleistung kann der Serviceanbieter im Rahmen eines Abonnements und/oder eines Gebührenvertrags Zahlungen von dem/den Nutzer(n) erhalten und/oder der Serviceanbieter kann Zahlungen aus dem Verkauf von Werbeinhalten an einen oder mehrere Dritte erhalten.
  • In einer weiteren Ausführungsform stellt die Erfindung ein durch einen Computer ausgeführtes Verfahren bereit, um ein Kopieren eines Datenobjekts in einer gleichzeitig ablaufenden kopierenden Garbage-Collection-Operation zu optimieren. In diesem Fall kann eine Computerinfrastruktur wie beispielsweise das Computersystem 12 (1) bereitgestellt werden, und ein oder mehrere Systeme zur Durchführung der erfindungsgemäßen Prozesse können beschafft (erzeugt, gekauft, verwendet, abgeändert usw.) und in der Computerinfrastruktur eingesetzt werden. Insofern kann der Einsatz eines Systems eines oder mehr aufweisen von: (1) Installieren von Programmcode auf einer Datenverarbeitungseinheit, wie beispielsweise dem Computersystem 12 (1) von einem durch einen Computer lesbaren Datenträger; (2) Hinzufügen von einer oder mehreren Datenverarbeitungseinheiten zu der Computerinfrastruktur; und (3) Aufnehmen und/oder Abändern von einem oder mehreren vorhandenen Systemen der Computerinfrastruktur, um es der Computerinfrastruktur zu ermöglichen, die erfindungsgemäßen Prozesse durchzuführen.
  • Einige der in dieser Spezifikation beschriebenen Funktionskomponenten wurden als Systeme oder Einheiten bezeichnet, um ihre Ausführungsunabhängigkeit stärker hervorzuheben. Beispielsweise kann ein System oder eine Einheit als eine Hardwareschaltung ausgeführt sein, die kundenspezifische VLSI-Schaltkreise oder Gatter-Anordnungen, gebrauchsfertige Halbleiter wie zum Beispiel Logikchips, Transistoren oder andere diskrete Bauelemente aufweist. Ein System oder eine Einheit kann auch in programmierbaren Hardware-Einheiten wie beispielsweise im Feld programmierbaren Gatter-Anordnungen, programmierbaren logischen Anordnungen, programmierbaren logischen Schaltungen oder dergleichen ausgeführt sein. Ein System oder eine Einheit kann auch in Software zur Ausführung durch verschiedene Arten von Prozessoren ausgeführt sein. Ein System oder eine Einheit oder eine Komponente von ausführbarem Code kann zum Beispiel einen oder mehrere physische oder logische Blöcke von Computeranweisungen aufweisen, die zum Beispiel als ein Objekt, eine Prozedur oder eine Funktion organisiert sein können. Dennoch brauchen sich die ausführbaren Dateien eines erkannten Systems oder einer erkannten Einheit nicht physisch zusammen an einem Ort zu befinden, sondern können unterschiedliche, an verschiedenen Speicherorten gespeicherte Anweisungen aufweisen, die, wenn sie logisch verknüpft werden, das System oder die Einheit aufweisen und den angegebenen Zweck für das System oder die Einheit erfüllen.
  • Des Weiteren könnte es sich bei einem System oder einer Einheit von ausführbarem Code um eine einzelne Anweisung oder um viele Anweisungen handeln und es bzw. sie kann sogar über mehrere unterschiedliche Codesegmente, zwischen verschiedenen Programmen und über mehrere Hauptspeichereinheiten hinweg verteilt sein. Ebenso können Betriebsdaten hierin innerhalb von Modulen erkannt und veranschaulicht werden und in einer beliebigen geeigneten Form realisiert und innerhalb einer beliebigen geeigneten Art von Datenstruktur organisiert sein. Die Betriebsdaten können als ein einzelner Datensatz erfasst oder über verschiedene Speicherorte, unter anderem zum Beispiel über verschiedene Speichereinheiten und unterschiedliche Hauptspeichereinheiten, verteilt sein.
  • Darüber hinaus können Systeme/Einheiten auch als eine Kombination aus Software und einer oder mehreren Hardware-Einheiten ausgeführt sein. Zum Beispiel kann das System 72 in der Kombination aus einem in Software ausführbarem Code realisiert sein, der auf einem Hauptspeichermedium (z.B. einer Hauptspeichereinheit) gespeichert ist. In einem weiteren Beispiel kann ein System oder eine Einheit die Kombination aus einem Prozessor sein, der an einem Satz von Betriebsdaten Operationen durchführt.
  • Wie vorstehend erwähnt wurde, können einige der Ausführungsformen in Hardware realisiert sein. Die Hardware kann als Hardwareelement bezeichnet werden. Im Allgemeinen kann sich ein Hardwareelement auf beliebige Hardwarestrukturen beziehen, die so angeordnet sind, dass sie bestimmte Operationen durchführen. In einer einzelnen Ausführungsform können die Hardwareelemente zum Beispiel beliebige auf einem Substrat hergestellte analoge oder digitale elektrische oder elektronische Elemente umfassen. Die Herstellung kann zum Beispiel unter Verwendung von auf Silizium basierenden Techniken für integrierte Schaltungen (IC, integrated circuit), wie Techniken für komplementäre Metalloxidhalbleiter (CMOS, complementary metal oxide semiconductor), Bipolar- und Bipolar-CMOS-(BiCMOS-)Techniken, durchgeführt werden. Zu Beispielen von Hardwareelementen können Prozessoren, Mikroprozessoren, Schaltungen, Schaltungselemente (z.B. Transistoren, Widerstände, Kondensatoren, Induktivitäten und so weiter), integrierte Schaltungen, anwendungsspezifische integrierte Schaltungen (ASIC, application specific integrated circuits), programmierbare logische Schaltungen (PLD, programmable logic devices), Digitalsignalprozessoren (DSP), eine im Feld programmierbare Gatter-Anordnung (FPGA, field programmable gate array), Logikgatter, Register, HalbleiterBauelemente, Chips, Mikrochips, Chipsätze und so weiter gehören. Die Ausführungsformen sind in diesem Zusammenhang jedoch nicht beschränkt.
  • Ebenfalls wurde vorstehend erwähnt, dass einige Ausführungsformen in Software realisiert sein können. Die Software kann als ein Softwareelement bezeichnet werden. Im Allgemeinen kann sich ein Softwareelement auf beliebige Softwarestrukturen beziehen, die so angeordnet sind, dass sie bestimmte Operationen durchführen. In einer einzelnen Ausführungsform können zu den Softwareelementen zum Beispiel Programmanweisungen und/oder Daten gehören, die zur Ausführung durch ein Hardwareelement wie beispielsweise einen Prozessor ausgelegt sind. Zu Programmanweisungen kann eine organisierte Liste von Befehlen gehören, die in einer vorher festgelegten Syntax angeordnete Wörter, Werte oder Symbole aufweisen und die, wenn sie ausgeführt werden, einen Prozessor dazu veranlassen können, einen entsprechenden Satz von Operationen durchzuführen.
  • Bei der vorliegenden Erfindung kann es sich auch um ein Computerprogrammprodukt handeln. Das Computerprogrammprodukt kann (ein) durch einen Computer lesbare(s) Speichermedium (oder -medien) umfassen, auf dem/denen sich durch einen Computer lesbare Programmanweisungen befinden, um einen Prozessor dazu zu veranlassen, Aspekte der vorliegenden Erfindung auszuführen.
  • Bei der vorliegenden Erfindung kann es sich um ein System, ein Verfahren und/oder ein Computerprogrammprodukt auf jeder möglichen Integrationsstufe technischer Details handeln. Das Computerprogrammprodukt kann (ein) durch einen Computer lesbare(s) Speichermedium (oder -medien) umfassen, auf dem/denen sich durch einen Computer lesbare Programmanweisungen befinden, um einen Prozessor dazu zu veranlassen, Aspekte der vorliegenden Erfindung auszuführen.
  • Bei dem durch einen Computer lesbaren Speichermedium kann es sich um eine physische Einheit handeln, die Anweisungen zur Verwendung durch ein System zur Ausführung von Anweisungen behalten und speichern kann. Bei dem durch einen Computer lesbaren Speichermedium kann es sich zum Beispiel um eine elektronische Speichereinheit, eine magnetische Speichereinheit, eine optische Speichereinheit, eine elektromagnetische Speichereinheit, eine Halbleiterspeichereinheit oder jede geeignete Kombination daraus handeln, ohne auf diese beschränkt zu sein. Zu einer nicht erschöpfenden Liste spezifischerer Beispiele des durch einen Computer lesbaren Speichermediums gehören die folgenden: eine tragbare Computerdiskette, eine Festplatte, ein Direktzugriffsspeicher (RAM), ein Nur-Lese-Speicher (ROM), ein löschbarer programmierbarer Nur-Lese-Speicher (EPROM bzw. Flash-Speicher), ein statischer Direktzugriffsspeicher (SRAM), ein tragbarer Kompaktspeicherplatte-Nur-Lese-Speicher (CD-ROM), eine DVD (digital versatile disc), ein Speicher-Stick, eine Diskette, eine mechanisch kodierte Einheit wie zum Beispiel Lochkarten oder gehobene Strukturen in einer Rille, auf denen Anweisungen gespeichert sind, und jede geeignete Kombination daraus. Ein durch einen Computer lesbares Speichermedium soll in der Verwendung hierin nicht als flüchtige Signale an sich aufgefasst werden, wie zum Beispiel Funkwellen oder andere sich frei ausbreitende elektromagnetische Wellen, elektromagnetische Wellen, die sich durch einen Wellenleiter oder ein anderes Übertragungsmedium ausbreiten (z.B. durch ein Glasfaserkabel geleitete Lichtimpulse) oder durch einen Draht übertragene elektrische Signale.
  • Hierin beschriebene, durch einen Computer lesbare Programmanweisungen können von einem durch einen Computer lesbaren Speichermedium auf jeweilige Datenverarbeitungs-/Verarbeitungseinheiten oder über ein Netzwerk wie zum Beispiel das Internet, ein lokales Netzwerk, ein Weitverkehrsnetz und/oder ein drahtloses Netzwerk auf einen externen Computer oder eine externe Speichereinheit heruntergeladen werden. Das Netzwerk kann Kupferübertragungskabel, Lichtwellenübertragungsleiter, drahtlose Übertragung, Leitwegrechner, Firewalls, Vermittlungseinheiten, Gateway-Computer und/oder Edge-Server aufweisen. Eine Netzwerkadapterkarte oder Netzwerkschnittstelle in jeder Datenverarbeitungs-/Verarbeitungseinheit empfängt durch einen Computer lesbare Programmanweisungen aus dem Netzwerk und leitet die durch einen Computer lesbaren Programmanweisungen zur Speicherung in einem durch einen Computer lesbaren Speichermedium innerhalb der entsprechenden Datenverarbeitungs-/Verarbeitungseinheit weiter.
  • Bei durch einen Computer lesbaren Programmanweisungen zum Ausführen von Arbeitsschritten der vorliegenden Erfindung kann es sich um Assembler-Anweisungen, ISA-Anweisungen (Instruction-Set-Architecture), Maschinenanweisungen, maschinenabhängige Anweisungen, Mikrocode, Firmware-Anweisungen, zustandssetzende Daten oder entweder Quellcode oder Objektcode handeln, die in einer beliebigen Kombination aus einer oder mehreren Programmiersprachen geschrieben werden, darunter objektorientierte Programmiersprachen wie Smalltalk, C++ o.ä. sowie herkömmliche prozedurale Programmiersprachen wie die Programmiersprache „C“ oder ähnliche Programmiersprachen. Die durch einen Computer lesbaren Programmanweisungen können vollständig auf dem Computer des Benutzers, teilweise auf dem Computer des Benutzers, als eigenständiges Software-Paket, teilweise auf dem Computer des Benutzers und teilweise auf einem fernen Computer oder vollständig auf dem fernen Computer oder Server ausgeführt werden. In letzterem Fall kann der entfernt angeordnete Computer mit dem Computer des Benutzers durch eine beliebige Art Netzwerk verbunden sein, darunter ein lokales Netzwerk (LAN) oder ein Weitverkehrsnetz (WAN), oder die Verbindung kann mit einem externen Computer hergestellt werden (zum Beispiel über das Internet unter Verwendung eines Internet-Dienstanbieters). In einigen Ausführungsformen können elektronische Schaltungen, darunter zum Beispiel programmierbare Logikschaltungen, im Feld programmierbare Gatter-Anordnungen (FPGA, field programmable gate arrays) oder programmierbare Logikanordnungen (PLA, programmable logic arrays) die durch einen Computer lesbaren Programmanweisungen ausführen, indem sie Zustandsinformationen der durch einen Computer lesbaren Programmanweisungen nutzen, um die elektronischen Schaltungen zu personalisieren, um Aspekte der vorliegenden Erfindung durchzuführen.
  • Aspekte der vorliegenden Erfindung sind hierin unter Bezugnahme auf Ablaufpläne und/oder Blockschaltbilder bzw. Schaubilder von Verfahren, Vorrichtungen (Systemen) und Computerprogrammprodukten gemäß Ausführungsformen der Erfindung beschrieben. Es wird darauf hingewiesen, dass jeder Block der Ablaufpläne und/oder der Blockschaltbilder bzw. Schaubilder sowie Kombinationen von Blöcken in den Ablaufplänen und/oder den Blockschaltbildern bzw. Schaubildern mittels durch einen Computer lesbare Programmanweisungen ausgeführt werden können.
  • Diese durch einen Computer lesbaren Programmanweisungen können einem Prozessor eines Universalcomputers, eines Spezialcomputers oder einer anderen programmierbaren Datenverarbeitungsvorrichtung bereitgestellt werden, um eine Maschine zu erzeugen, so dass die über den Prozessor des Computers bzw. der anderen programmierbaren Datenverarbeitungsvorrichtung ausgeführten Anweisungen ein Mittel zur Umsetzung der in dem Block bzw. den Blöcken der Ablaufpläne und/oder der Blockschaltbilder bzw. Schaubilder festgelegten Funktionen/Schritte erzeugen. Diese durch einen Computer lesbaren Programmanweisungen können auch auf einem durch einen Computer lesbaren Speichermedium gespeichert sein, das einen Computer, eine programmierbare Datenverarbeitungsvorrichtung und/oder andere Einheiten so steuern kann, dass sie auf eine bestimmte Art funktionieren, so dass das durch einen Computer lesbare Speichermedium, auf dem Anweisungen gespeichert sind, ein Herstellungsprodukt aufweist, darunter Anweisungen, welche Aspekte der/des in dem Block bzw. den Blöcken des Ablaufplans und/oder der Blockschaltbilder bzw. Schaubilder angegebenen Funktion/Schritts umsetzen.
  • Die durch einen Computer lesbaren Programmanweisungen können auch auf einen Computer, eine andere programmierbare Datenverarbeitungsvorrichtung oder eine andere Einheit geladen werden, um das Ausführen einer Reihe von Prozessschritten auf dem Computer bzw. der anderen programmierbaren Vorrichtung oder anderen Einheit zu verursachen, um einen auf einem Computer ausgeführten Prozess zu erzeugen, so dass die auf dem Computer, einer anderen programmierbaren Vorrichtung oder einer anderen Einheit ausgeführten Anweisungen die in dem Block bzw. den Blöcken der Ablaufpläne und/oder der Blockschaltbilder bzw. Schaubilder festgelegten Funktionen/Schritte umsetzen.
  • Die Ablaufpläne und die Blockschaltbilder bzw. Schaubilder in den Figuren veranschaulichen die Architektur, die Funktionalität und den Betrieb möglicher Ausführungen von Systemen, Verfahren und Computerprogrammprodukten gemäß verschiedenen Ausführungsformen der vorliegenden Erfindung. In diesem Zusammenhang kann jeder Block in den Ablaufplänen oder Blockschaltbildern bzw. Schaubildern ein Modul, ein Segment oder einen Teil von Anweisungen darstellen, die eine oder mehrere ausführbare Anweisungen zur Ausführung der bestimmten logischen Funktion(en) aufweisen. In einigen alternativen Ausführungen können die in den Blöcken angegebenen Funktionen in einer anderen Reihenfolge als in den Figuren gezeigt stattfinden. Zwei nacheinander gezeigte Blöcke können zum Beispiel in Wirklichkeit im Wesentlichen gleichzeitig ausgeführt werden, oder die Blöcke können manchmal je nach entsprechender Funktionalität in umgekehrter Reihenfolge ausgeführt werden. Es ist ferner anzumerken, dass jeder Block der Blockschaltbilder bzw. Schaubilder und/oder der Ablaufpläne sowie Kombinationen aus Blöcken in den Blockschaltbildern bzw. Schaubildern und/oder den Ablaufplänen durch spezielle auf Hardware beruhende Systeme, welche die festgelegten Funktionen oder Schritte durchführen, oder durch Kombinationen aus Spezial-Hardware und Computeranweisungen umgesetzt werden können.

Claims (17)

  1. Verfahren, um ein Kopieren eines Datenobjekts (88) in einer gleichzeitig ablaufenden kopierenden Garbage-Collection-Operation zu optimieren, wobei das Verfahren die folgenden durch einen Computer (12, 82) ausgeführten Prozesse umfasst: Erkennen (610) einer Quellenkopie des Datenobjekts (88), das als Teil der Garbage-Collection-Operation kopiert werden soll; Auswählen eines primären zugreifenden Threads (92A) aus einer Mehrzahl von zugreifenden Threads (92), die in einem Wettlauf um die Zuweisung von Speicherbereich für ein einzelnes Datenobjekt (88), das das Datenobjekt (88) ist, in einem Survivor-Bereich (86N) konkurrieren, wobei der primäre zugreifende Thread (92A) als Ergebnis davon ausgewählt wird, dass er ein erster Thread ist, der den Speicherbereich zuweist und einen Quellobjekt-Kopfbereich des Datenobjekts (88) in einer atomaren Operation aktualisiert; Einleiten (620), durch den primären zugreifenden Thread (92A), eines Kopierens der Quellenkopie an einen Zielspeicherort, wobei das Einleiten (620) ein Erstellen eines Zielobjekt-Kopfbereichs (200, 300, 524) für ein Zielobjekt (500) an dem Zielspeicherort umfasst, wobei der Zielobjekt-Kopfbereich (200, 300, 524) einen Anzeiger enthält, der so gesetzt ist, dass er anzeigt, dass das Kopieren im Gange ist, so dass andere zugreifende Threads (92) über einen Status des Kopierens durch Zugriff auf den Zielobjekt-Kopfbereich (200, 300, 524) benachrichtigt werden, wobei der Anzeiger ein Kopierbit (212, 312) in dem Zielobjekt-Kopfbereich (200, 300, 524) ist, das einen Speicherort hat, der einem Speicherort des Weiterleitungsbits (112) in dem Quellenobjekt-Kopfbereich (120) entspricht, und wobei das Setzen des Weiteren ein Setzen des Kopierbits (212, 312) umfasst; Anhalten (630) einer Ausführung eines sekundären zugreifenden Threads (92N), der versucht, das Datenobjekt (88) zu verwenden, und zwar so lange, wie der Anzeiger anzeigt, dass das Kopieren im Gange ist; und Ersetzen (640), als Reaktion auf einen Abschluss des Kopierens, des Zielobjekt-Kopfbereichs (200, 300, 524) durch eine Kopie eines Quellenobjekt-Kopfbereichs (120) der Quellenkopie.
  2. Verfahren nach Anspruch 1, wobei das Auswählen des Weiteren umfasst: Zuordnen (402), durch einen zugreifenden Thread (92) aus der Mehrzahl von zugreifenden Threads (92) als Reaktion auf das Erkennen (610) der Quellenkopie, von Speicherbereich für das Datenobjekt (88) in einem Survivor-Bereich (86N); Speichern des Zielobjekt-Kopfbereichs (200, 300, 524), der über den Anzeiger in dem zugeordneten Speicherbereich verfügt; Speichern, in einer atomaren Operation, eines Weiterleitungsbits (112) und eines Speicherorts des zugeordneten Speicherbereichs als den Zielspeicherort des Quellenobjekt-Kopfbereichs (120) als Reaktion auf das Setzen des Weiterleitungsbits (112); Bezeichnen, infolge dessen, dass die atomare Speicheroperation erfolgreich ist, des zugreifenden Threads (92) als den primären zugreifenden Thread (92A); und Weiterleiten des sekundären zugreifenden Threads (92N) an den Zielspeicherort als Reaktion darauf, dass der sekundäre zugreifende Thread (92N) feststellt, dass das Weiterleitungsbit (112) in dem Quellenobjekt-Kopfbereich (120) gesetzt ist.
  3. Verfahren nach Anspruch 1, das des Weiteren ein Synchronisieren des Kopierens eines einzelnen Datenobjekts (88) unter einer Mehrzahl von teilnehmenden Threads umfasst, zu der sowohl der primäre zugreifende Thread (92A) als auch der sekundäre zugreifende Thread (92N) gehört, deren Ausführung angehalten wird, wobei das Synchronisieren umfasst: Initialisieren (404), durch den primären zugreifenden Thread (92A), eines Werts von nicht kopierten Daten in dem Zielobjekt-Kopfbereich (200, 300, 524) auf eine Gesamtgröße des Datenobjekts (88); Erhöhen, als Reaktion darauf, dass ein beliebiger sekundärer zugreifender Thread (92N) der Mehrzahl der teilnehmenden Threads zu kopieren beginnt, eines Werts von Daten von kopierenden Threads in dem Zielobjekt-Kopfbereich (200, 300, 524); Verringern, als Reaktion darauf, dass ein beliebiger teilnehmender Thread das Kopieren (410, 418, 428) eines Abschnitts des Datenobjekts (88) beginnt, des Nicht-kopiert-Werts um eine Größe des Datenabschnitts; und Verringern, als Reaktion auf eine Feststellung durch einen beliebigen sekundären zugreifenden Thread (92N), dass der Nicht-kopiert-Wert 0 erreicht hat, des Werts von Daten von kopierenden Threads, wobei das Ersetzen (640) des Zielobjekt-Kopfbereichs (200, 300, 524) durch den primären zugreifenden Thread (92A) als Reaktion auf eine Feststellung, dass der Wert von Daten von kopierenden Threads auf einen Anfangswert verringert wurde, durchgeführt wird.
  4. Verfahren nach Anspruch 1, wobei das Ersetzen (640) des Zielobjekt-Kopfbereichs (200, 300, 524) in einer einzigen Aktualisierung des Hauptspeichers (28, 84) durchgeführt wird und ein Zurücksetzen des Anzeigers sowie ein Wiederherstellen einer Klasseninformation umfasst.
  5. Verfahren nach Anspruch 1, wobei der primäre zugreifende Thread (92A) und der sekundäre zugreifende Thread (92N) jeweils entweder ein Garbage-Collection-Thread (96) oder ein Anwendungsthread (94) sind.
  6. Verfahren nach Anspruch 1, wobei das Erkennen (610) des Weiteren ein Lesen, aus einem lebendigen Objekt im Hauptspeicher (28, 84), eines Objektverweises aufweist, der die Quellenkopie referenziert durch: einen Garbage-Collection-Thread (96), der eine Durchsuchung von lebendigen Objekten in dem Hauptspeicher (28, 84) durchführt, und/oder einen Anwendungsthread (94), der das lebendige Objekt während einer normalen Ausführung antrifft.
  7. System, um ein Kopieren eines Datenobjekts (88) in einer gleichzeitig ablaufenden kopierenden Garbage-Collection-Operation zu optimieren, das aufweist: ein Hauptspeichermedium (28, 84), das Anweisungen (40, 42, 72, 74, 76, 77, 78) aufweist; einen Bus (18), der mit dem Hauptspeichermedium (28, 84) verbunden ist; und einen mit dem Bus (18) verbundenen Prozessor (16), der, wenn er die Anweisungen (40, 42, 72, 74, 76, 77, 78) ausführt, das System dazu veranlasst: eine Quellenkopie des Datenobjekts (88) zu erkennen (610), das als Teil der Garbage-Collection-Operation kopiert werden soll; einen primären zugreifenden Thread (92A) aus einer Mehrzahl von zugreifenden Threads (92) auszuwählen, die in einem Wettlauf um die Zuweisung von Speicherbereich für ein einzelnes Datenobjekt (88), das das Datenobjekt (88) ist, in einem Survivor-Bereich (86N) konkurrieren, wobei der primäre zugreifende Thread (92A) als Ergebnis davon ausgewählt wird, dass er ein erster Thread ist, der den Speicherbereich zuweist und einen Quellobjekt-Kopfbereich des Datenobjekts (88) in einer atomaren Operation aktualisiert; durch den primären zugreifenden Thread (92A) ein Kopieren der Quellenkopie an einen Zielspeicherort einzuleiten (620), wobei das Einleiten (620) ein Erstellen eines Zielobjekt-Kopfbereichs (200, 300, 524) für ein Zielobjekt (500) an dem Zielspeicherort umfasst, wobei der Zielobjekt-Kopfbereich (200, 300, 524) einen Anzeiger enthält, der so gesetzt ist, dass er anzeigt, dass das Kopieren im Gange ist, so dass andere zugreifende Threads (92) über einen Status des Kopierens durch Zugriff auf den Zielobjekt-Kopfbereich (200, 300, 524) benachrichtigt werden, wobei der Anzeiger ein Kopierbit (212, 312) in dem Zielobjekt-Kopfbereich (200, 300, 524) ist, das einen Speicherort hat, der einem Speicherort des Weiterleitungsbits (112) in dem Quellenobjekt-Kopfbereich (120) entspricht, und wobei das Setzen des Weiteren ein Setzen des Kopierbits (212, 312) umfasst; eine Ausführung eines sekundären zugreifenden Threads (92N), der versucht, das Datenobjekt (88) zu verwenden, so lange anzuhalten (630), wie der Anzeiger anzeigt, dass das Kopieren im Gange ist; und als Reaktion auf einen Abschluss des Kopierens den Zielobjekt-Kopfbereich (200, 300, 524) durch eine Kopie eines Quellenobjekt-Kopfbereichs (120) der Quellenkopie zu ersetzen (640).
  8. System nach Anspruch 7, wobei die Anweisungen zum Auswählen das System des Weiteren dazu veranlassen: durch einen zugreifenden Thread (92) aus der Mehrzahl von zugreifenden Threads (92) als Reaktion auf das Erkennen (610) der Quellenkopie Speicherbereich für das Datenobjekt (88) in einem Survivor-Bereich (86N) zuzuordnen (402); den Zielobjekt-Kopfbereich (200, 300, 524), der über den Anzeiger in dem zugeordneten Speicherbereich verfügt, zu speichern; in einer atomaren Operation ein Weiterleitungsbit (112) und einen Speicherort des zugeordneten Speicherbereichs als den Zielspeicherort des Quellenobjekt-Kopfbereichs (120) als Reaktion auf das Setzen des Weiterleitungsbits (112) zu speichern; infolge dessen, dass die atomare Speicheroperation erfolgreich ist, den zugreifenden Thread (92) als den primären zugreifenden Thread (92A) zu bezeichnen; und den sekundären zugreifenden Thread (92N) an den Zielspeicherort als Reaktion darauf weiterzuleiten, dass der sekundäre zugreifende Thread (92N) feststellt, dass das Weiterleitungsbit (112) in dem Quellenobjekt-Kopfbereich (120) gesetzt ist.
  9. System nach Anspruch 7, wobei die Anweisungen (40, 42, 72, 74, 76, 77, 78) das System des Weiteren dazu veranlassen, das Kopieren eines einzelnen Datenobjekts (88) unter einer Mehrzahl von teilnehmenden Threads zu synchronisieren, zu der sowohl der primäre zugreifende Thread (92A) als auch der sekundäre zugreifende Thread (92N) gehört, deren Ausführung angehalten wird, wobei das System umfasst: Initialisieren (404), durch den primären zugreifenden Thread (92A), eines Werts von nicht kopierten Daten in dem Zielobjekt-Kopfbereich (200, 300, 524) auf eine Gesamtgröße des Datenobjekts (88); Erhöhen, als Reaktion darauf, dass ein beliebiger sekundärer zugreifender Thread (92N) der Mehrzahl der teilnehmenden Threads zu kopieren beginnt, eines Werts von Daten von kopierenden Threads in dem Zielobjekt-Kopfbereich (200, 300, 524); Verringern, als Reaktion darauf, dass ein beliebiger teilnehmender Thread das Kopieren (410, 418, 428) eines Abschnitts des Datenobjekts (88) beginnt, des Nicht-kopiert-Werts um eine Größe des Datenabschnitts; und Verringern, als Reaktion auf eine Feststellung durch einen beliebigen sekundären zugreifenden Thread (92N), dass der Nicht-kopiert-Wert 0 erreicht hat, des Werts von Daten von kopierenden Threads, wobei das Ersetzen (640) des Zielobjekt-Kopfbereichs (200, 300, 524) durch den primären zugreifenden Thread (92A) als Reaktion auf eine Feststellung, dass der Wert von Daten von kopierenden Threads auf einen Anfangswert verringert wurde, durchgeführt wird.
  10. System nach Anspruch 7, wobei die Anweisungen (78), die das System dazu veranlassen, den Zielobjekt-Kopfbereich (200, 300, 524) zu ersetzen (640), ersetzt diesen Zielobjekt-Kopfbereich (200, 300, 524) in einer einzigen Aktualisierung des Hauptspeichers (28, 84) und umfasst ein Zurücksetzen des Anzeigers sowie ein Wiederherstellen einer Klasseninformation.
  11. System nach Anspruch 7, wobei der primäre zugreifende Thread (92A) und der sekundäre zugreifende Thread (92N) jeweils entweder ein Garbage-Collection-Thread (96) oder ein Anwendungsthread (94) sind.
  12. System nach Anspruch 7, wobei die Anweisungen (74) zum Erkennen (610) des Weiteren ein Lesen, aus einem lebendigen Objekt im Hauptspeicher (28, 84), eines Objektverweises umfassen, der die Quellenkopie referenziert durch: einen Garbage-Collection-Thread (96), der eine Durchsuchung von lebendigen Objekten in dem Hauptspeicher (28, 84) durchführt, und/oder einen Anwendungsthread (94), der das lebendige Objekt während einer normalen Ausführung antrifft.
  13. Computerprogrammprodukt, um ein Kopieren eines Datenobjekts (88) in einer gleichzeitig ablaufenden kopierenden Garbage-Collection-Operation zu optimieren, wobei das Computerprogrammprodukt ein durch einen Computer lesbares Speichermedium und auf dem durch einen Computer lesbaren Speichermedium gespeicherte Programmanweisungen (40, 42, 72, 74, 76, 77, 78) aufweist, die mindestens eine Computereinheit (12, 82) dazu veranlassen: eine Quellenkopie des Datenobjekts (88) zu erkennen (610), das als Teil der Garbage-Collection-Operation kopiert werden soll; einen primären zugreifenden Thread (92A) aus einer Mehrzahl von zugreifenden Threads (92) auszuwählen, die in einem Wettlauf um die Zuweisung von Speicherbereich für ein einzelnes Datenobjekt (88), das das Datenobjekt (88) ist, in einem Survivor-Bereich (86N) konkurrieren, wobei der primäre zugreifende Thread (92A) als Ergebnis davon ausgewählt wird, dass er ein erster Thread ist, der den Speicherbereich zuweist und einen Quellobjekt-Kopfbereich des Datenobjekts (88) in einer atomaren Operation aktualisiert; durch den primären zugreifenden Thread (92A) ein Kopieren der Quellenkopie an einen Zielspeicherort einzuleiten (620), wobei das Einleiten (620) ein Erstellen eines Zielobjekt-Kopfbereichs (200, 300, 524) für ein Zielobjekt (500) an dem Zielspeicherort umfasst, wobei der Zielobjekt-Kopfbereich (200, 300, 524) einen Anzeiger enthält, der so gesetzt ist, dass er anzeigt, dass das Kopieren im Gange ist, so dass andere zugreifende Threads (92) über einen Status des Kopierens durch Zugriff auf den Zielobjekt-Kopfbereich (200, 300, 524) benachrichtigt werden, wobei der Anzeiger ein Kopierbit (212, 312) in dem Zielobjekt-Kopfbereich (200, 300, 524) ist, das einen Speicherort hat, der einem Speicherort des Weiterleitungsbits (112) in dem Quellenobjekt-Kopfbereich (120) entspricht, und wobei das Setzen des Weiteren ein Setzen des Kopierbits (212, 312) umfasst; eine Ausführung eines sekundären zugreifenden Threads (92N), der versucht, das Datenobjekt (88) zu verwenden, so lange anzuhalten (630), wie der Anzeiger anzeigt, dass das Kopieren im Gange ist; und als Reaktion auf einen Abschluss des Kopierens den Zielobjekt-Kopfbereich (200, 300, 524) durch eine Kopie eines Quellenobjekt-Kopfbereichs (120) der Quellenkopie zu ersetzen (640).
  14. Computerprogrammprodukt nach Anspruch 13, wobei die Anweisungen zum Auswählen die mindestens eine Computereinheit (12, 82) des Weiteren dazu veranlassen: durch einen zugreifenden Thread (92) aus der Mehrzahl von zugreifenden Threads (92) als Reaktion auf das Erkennen (610) der Quellenkopie Speicherbereich für das Datenobjekt (88) in einem Survivor-Bereich (86N) zuzuordnen (402); den Zielobjekt-Kopfbereich (200, 300, 524), der den Anzeiger in dem zugeordneten Speicherbereich hat, zu speichern; in einer atomaren Operation ein Weiterleitungsbit (112) und einen Speicherort des zugeordneten Speicherbereichs als den Zielspeicherort des Quellenobjekt-Kopfbereichs (120) als Reaktion auf das Setzen des Weiterleitungsbits (112) zu speichern; aufgrund dessen, dass die atomare Speicheroperation erfolgreich ist, den zugreifenden Thread (92) als den primären zugreifenden Thread (92A) zu bezeichnen; und den sekundären zugreifenden Thread (92N) an den Zielspeicherort als Reaktion darauf weiterzuleiten, dass der sekundäre zugreifende Thread (92N) feststellt, dass das Weiterleitungsbit (112) in dem Quellenobjekt-Kopfbereich (120) gesetzt ist.
  15. Computerprogrammprodukt nach Anspruch 13, wobei die Anweisungen (40, 42, 72, 74, 76, 77, 78) die mindestens eine Computereinheit (12, 82) des Weiteren dazu veranlassen, das Kopieren eines einzelnen Datenobjekts (88) unter einer Mehrzahl von teilnehmenden Threads zu synchronisieren, zu der sowohl der primäre zugreifende Thread (92A) als auch der sekundäre zugreifende Thread (92N) gehört, deren Ausführung angehalten wird, wobei das Computerprogrammprodukt umfasst: Initialisieren (404), durch den primären zugreifenden Thread (92A), eines Werts von nicht kopierten Daten in dem Zielobjekt-Kopfbereich (200, 300, 524) auf eine Gesamtgröße des Datenobjekts (88); Erhöhen, als Reaktion darauf, dass ein beliebiger sekundärer zugreifender Thread (92N) der Mehrzahl der teilnehmenden Threads zu kopieren beginnt, eines Werts von Daten von kopierenden Threads in dem Zielobjekt-Kopfbereich (200, 300, 524); Verringern, als Reaktion darauf, dass ein beliebiger teilnehmender Thread das Kopieren (410, 418, 428) eines Abschnitts des Datenobjekts (88) beginnt, des Nicht-kopiert-Werts um eine Größe des Datenabschnitts; und Verringern, als Reaktion auf eine Feststellung durch einen beliebigen sekundären zugreifenden Thread (92N), dass der Nicht-kopiert-Wert 0 erreicht hat, des Werts von Daten von kopierenden Threads, wobei das Ersetzen (640) des Zielobjekt-Kopfbereichs (200, 300, 524) durch den primären zugreifenden Thread (92A) als Reaktion auf eine Feststellung, dass der Wert von Daten von kopierenden Threads auf einen Anfangswert verringert wurde, durchgeführt wird.
  16. Computerprogrammprodukt nach Anspruch 13, wobei die Anweisungen (78), die das System dazu veranlassen, den Zielobjekt-Kopfbereich (200, 300, 524) zu ersetzen (640), ein Ersetzen dieses Zielobjekt-Kopfbereichs (200, 300, 524) in einer einzigen Aktualisierung des Hauptspeichers (28, 84), ein Zurücksetzen des Anzeigers sowie ein Wiederherstellen einer Klasseninformation umfassen.
  17. Computerprogrammprodukt nach Anspruch 13, wobei die Anweisungen (74) zum Erkennen (610) des Weiteren ein Lesen, aus einem lebendigen Objekt im Hauptspeicher (28, 84), eines Objektverweises umfassen, der die Quellenkopie referenziert durch: einen Garbage-Collection-Thread (96), der eine Durchsuchung von lebendigen Objekten in dem Hauptspeicher (28, 84) durchführt, und/oder einen Anwendungsthread (94), der das lebendige Objekt während einer normalen Ausführung antrifft.
DE112018005998.7T 2018-01-09 2018-11-16 Kopieren und weiterleiten für eine gleichzeitig ablaufende kopierende garbage-collection Active DE112018005998B4 (de)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US15/865,789 2018-01-09
US15/865,789 US10877884B2 (en) 2018-01-09 2018-01-09 Copying and forwarding for concurrent copying garbage collection
PCT/IB2018/059041 WO2019138276A1 (en) 2018-01-09 2018-11-16 Copying and forwarding for concurrent copying garbage collection

Publications (2)

Publication Number Publication Date
DE112018005998T5 DE112018005998T5 (de) 2020-08-06
DE112018005998B4 true DE112018005998B4 (de) 2022-06-15

Family

ID=67140816

Family Applications (1)

Application Number Title Priority Date Filing Date
DE112018005998.7T Active DE112018005998B4 (de) 2018-01-09 2018-11-16 Kopieren und weiterleiten für eine gleichzeitig ablaufende kopierende garbage-collection

Country Status (6)

Country Link
US (1) US10877884B2 (de)
JP (1) JP7034296B2 (de)
CN (1) CN111566626B (de)
DE (1) DE112018005998B4 (de)
GB (1) GB2581465B (de)
WO (1) WO2019138276A1 (de)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10877884B2 (en) 2018-01-09 2020-12-29 International Business Machines Corporation Copying and forwarding for concurrent copying garbage collection
CN115379263B (zh) * 2022-08-23 2024-06-04 京东方科技集团股份有限公司 一种终端设备的播放内容的管控方法和管控系统

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7716192B2 (en) 2007-05-08 2010-05-11 Microsoft Corporation Concurrent, lock-free object copying

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5088036A (en) * 1989-01-17 1992-02-11 Digital Equipment Corporation Real time, concurrent garbage collection system and method
US7653793B1 (en) 2004-11-17 2010-01-26 Sun Microsystems, Inc. Use of memory protection to implement replicating collection in an incremental, copying garbage collector
US9208081B1 (en) 2007-11-30 2015-12-08 Oracle America, Inc. Concurrent object management
US9110791B2 (en) 2008-03-03 2015-08-18 Microsoft Technology Licensing, Llc Optimistic object relocation
US8065349B2 (en) * 2008-06-30 2011-11-22 Oracle America, Inc. Method and apparatus for performing concurrent garbage collection
EP2315126A4 (de) 2008-08-11 2012-06-20 Fujitsu Ltd Müllabfuhrprogramm, müllabfuhrverfahren und müllabfuhrsystem
US20110264880A1 (en) * 2010-04-23 2011-10-27 Tatu Ylonen Oy Ltd Object copying with re-copying concurrently written objects
US8595462B2 (en) * 2011-03-14 2013-11-26 International Business Machines Corporation Dynamic measurement and adaptation of a copying garbage collector
US9910904B2 (en) * 2011-08-30 2018-03-06 International Business Machines Corporation Replication of data objects from a source server to a target server
JP6044181B2 (ja) * 2012-08-24 2016-12-14 富士通株式会社 ガーベジコレクションのための情報処理方法、プログラム及び装置
US9720819B2 (en) 2015-06-12 2017-08-01 Intel Corporation Concurrent, moving, garbage collector
US10877884B2 (en) 2018-01-09 2020-12-29 International Business Machines Corporation Copying and forwarding for concurrent copying garbage collection

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7716192B2 (en) 2007-05-08 2010-05-11 Microsoft Corporation Concurrent, lock-free object copying

Also Published As

Publication number Publication date
JP7034296B2 (ja) 2022-03-11
US10877884B2 (en) 2020-12-29
US20190213125A1 (en) 2019-07-11
DE112018005998T5 (de) 2020-08-06
GB2581465A (en) 2020-08-19
JP2021509509A (ja) 2021-03-25
GB2581465B (en) 2021-03-10
WO2019138276A1 (en) 2019-07-18
CN111566626A (zh) 2020-08-21
CN111566626B (zh) 2023-10-31
GB202009873D0 (en) 2020-08-12

Similar Documents

Publication Publication Date Title
DE102016103359B4 (de) Singleton-cachespeicher-verwaltungsprotokoll für hierarchische virtualisierte speichersysteme
DE112012000693B4 (de) Ausführen einer Vielzahl von Instanzen einer Anwendung
DE112011102076B4 (de) Neuordnen des Zugriffs zum Verringern der Gesamtsuchzeit auf Bandmedien
DE3151745C2 (de)
DE112007001171T5 (de) Verfahren für virtualisierten Transaktionsspeicher bei globalem Überlauf
DE112010003750T5 (de) Hardware für parallele Befehlslistenerzeugung
DE112014001873T5 (de) Replikation für Hot-Standby-Online-Datenbank
DE102013208554A1 (de) Verfahren und System zum Managen verschachtelter Ausführungsströme
DE112010004931T5 (de) Mehrphasige Wiederherstellung von Dateisystemen mit SelektiverBedarfsweiser Verfügbarkeit von Daten(
DE112010004784T5 (de) Effizientes Laden von Daten in den Speicher eines Rechnersystems
DE112011103276T5 (de) Vorauslese-Verarbeitung in einer Client-Server-Netzwerkarchitektur
DE10297624T5 (de) Steuerung von Kompatibilitätsgraden von Binärcode-Übersetzungen zwischen Befehlssatzarchitekturen
DE102016122297A1 (de) Mehrfach-Durchlauf-Rendering in einer Bildschirm-Raum-Pipeline
DE112020003929B4 (de) Verwaltung von metadaten von virtuellen speichern
DE102013013137A1 (de) Mehrstufige registerumbenennung durch entfernen von abhängigkeiten
DE102017118341B4 (de) Neuaufteilen von Daten in einem verteilten Computersystem
DE112019001821B4 (de) Verfahren und vorrichtung zur wiedergabe eines aktivierungsrahmens für unterbrechungsfreie speicherbereinigung (pause-less garbage collection)
DE102013020485A1 (de) Technik zur Ausführung von Speicherzugriffsoperationen über eine Textur-Hardware
DE112020000146T5 (de) Handhabung einer eingabe-/ausgabe-speicheranweisung
DE112017005014B4 (de) Qualifizieren des Durchsuchens eines Verzweigungsprädiktors unter Verwendung der Vorhersage einer Datenstromlänge
DE112018005998B4 (de) Kopieren und weiterleiten für eine gleichzeitig ablaufende kopierende garbage-collection
DE102013200030B4 (de) Hash-basiertes verwalten von speicher-ids
DE112017005782T5 (de) Warteschlange für Speichervorgänge
DE102013020967A1 (de) Technik zur Ausführung von Speicherzugriffsoperationen über eine Textur-Hardware
DE102017001999A1 (de) RÜCKWÄRTSABBILDUNG MIT EFFIZIENTER UND DYNAMISCHER GRÖßE ZUR HANDHABUNG VON DATEN MIT VARIABLER GRÖßE

Legal Events

Date Code Title Description
R012 Request for examination validly filed
R016 Response to examination communication
R018 Grant decision by examination section/examining division
R084 Declaration of willingness to licence
R020 Patent grant now final