-
公开(公告)号:DE112018005998T5
公开(公告)日:2020-08-06
申请号:DE112018005998
申请日:2018-11-16
Applicant: IBM
Inventor: MICIC ALEKSANDAR , SIU JORAN , D´SOUZA IRWIN , JEREMIC FILIP , GRACIE CHARLES ROBERT , PIVKINE DMITRI
Abstract: Eine Vorgehensweise, um ein Kopieren eines Datenobjekts in einer gleichzeitig ablaufenden kopierenden Garbage-Collection-Operation zu optimieren, wird bereitgestellt. 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, wobei der Anzeiger zurückgesetzt wird.
-
公开(公告)号:DE112018005998B4
公开(公告)日:2022-06-15
申请号:DE112018005998
申请日:2018-11-16
Applicant: IBM
Inventor: MICIC ALEKSANDAR , SIU JORAN , D´SOUZA IRWIN , JEREMIC FILIP , GRACIE CHARLES ROBERT , PIVKINE DMITRI
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.
-