-
Gebiet der Erfindung
-
Die Erfindung betrifft allgemein
Computersysteme, und spezieller betrifft sie die Verwaltung der Speicherabschnitte
derartiger Systeme.
-
Hintergrund
der Erfindung
-
Viele Computersysteme verwalten Information
unter Verwendung von Objekten. Ein Objekt entspricht Daten, die
ein spezielles Attribut gemeinsam haben und einen Bereich eines
Direktzugriffsspeichers (RAM) belegen. Objekte dürfen im Speicher nicht überlappen.
Aktive Objekte sind solche, wie sie im aktuell durch ein Computersystem
ausgeführten Rechenprozess
benötigt
werden. Wenn alle Objekte in einem System dauernd aktiv sind, bestehen
keine Probleme hinsichtlich der Speicherverwaltung. Der Raum, wie
er jedem Objekt beim Systemstart zugewiesen wird, muss nie wiedergewonnen
oder neu beansprucht werden. In den meisten Systemen weisen aktive
Objekte jedoch variierende Lebensdauern auf, die nicht vorab vorhergesagt
werden können.
In derartigen Systemen ist ein gewisses Verfahren zum Erkennen abgelaufener
oder toter Objekte und zum zwangsweisen Entfernen derselben aus
dem Speicher erforderlich, wenn Speicherressourcen einzusparen sind.
-
Wertlose Daten oder "Garbage" betrifft in einem
Computersystemspeicher gespeicherte Daten, die bei der Ausführung eines
Programms, einer Methode, einer Funktion oder einer Unterroutine,
die derartige Daten zugeordnet hat, nicht mehr benutzt werden. Der
Zweckdienlichkeit halber werden ein Pro gramm, eine Methode, eine
Funktion oder eine Unterroutine, die Daten zuordnet, einfach als
Programm oder Funktion bezeichnet. Das Sammeln wertloser Daten oder
Speicherbereinigung ist der Prozess des Lokalisierens von Daten
in dynamisch zugeordneten Speichern, die nicht mehr benutzt werden,
und Wiedergewinnen des Speichers, um zukünftigen Speicherzuordnungsanforderungen
zu genügen.
Die Speicherbereinigung bietet die Möglichkeit deutlicher Gewinne
hinsichtlich der Produktivität von
Programmierern, da sich diese wegen der Funktion der Speicherbereinigung
nicht darum kümmern müssen, Daten
aus dem Speicher zu entfernen, wenn sie nicht mehr benötigt werden,
wenn das Programm endet. Demgemäß unterstützt die
Speicherbereinigung Programmierer und Systemdesigner dahingehend,
ihre Anstrengungen vielen auf höherer Ebene
zu widmen, wie dem Design der grundlegenden Algorithmen, der Benutzerschnittstellen
und der allgemeinen Programmfunktion. Auch verringert die Speicherbereinigung
durch Beseitigen vieler Programmierprobleme auf niedriger Ebene
die Wahrscheinlichkeit von Programmierfehlern. Diese Vorteile der
Speicherbereinigung gehen damit einher, dass verbesserte Softwarefunktion
und Zuverlässigkeit
bei niedrigeren Entwicklungskosten geboten werden.
-
Speicherbereinigung kann in einer
Anzahl von Situationen auftreten. Wenn z. B. die Menge des im verfügbaren Speicher
verbliebenen Speicherraums unter einen vorbestimmten Wert fällt, wird
eine Speicherbereinigung ausgeführt,
um alles an Speicherraum rückzugewinnen,
das rückgewinnbar
ist. Auch kann ein Programm oder eine Funktion Speicherbereinigung
dadurch erzwingen, dass eine Speicherbereinigungseinrichtung oder
ein "Garbagekollektor" aufgerufen wird.
Schließlich
kann die Speicherbereinigungseinrichtung als Hintergrundtask laufen,
der nach wiederzugewinnenden Objekten sucht. Aber obwohl sie aufgerufen
werden können,
arbeiten herkömmliche
Speicherbereinigungseinrichtungen dadurch, dass sie die Aus führung ⋂von Systemprogrammen
periodisch anhalten, um den gesamten Speicher zu durchlaufen, wenn
sie nach Speicherbereichen suchen, die nicht mehr in Gebrauch sind.
Herkömmliche
Speicherbereinigungseinrichtungen zeigen eine Anzahl von Hauptmängeln. Ein
derartiger Mangel besteht darin, dass, hinsichtlich der Raten der
Zuordnung und der Aufhebung derselben von Objekten, der Speicherdurchsatz
allgemein viel niedriger als z. B. bei Stackzuordnung ist. Auch
sind die zum Zuordnen von Speichern erforderlichen Zeiten nur sehr
lose gebunden – die Grenzen
betreffend Zuordnungszeiten sind ausreichend eng, um ein zuverlässiges Programmieren hoch
interaktiver oder Echtzeitsysteme zu erlauben, wie bei der Mausbewegung,
interaktiver Steuerung von Multimediageräten und Systemen mit virtual
reality. Schließlich
ist ein einigen Speicherbereinigungseinrichtungen der Funktionsaufwand
in Zusammenhang mit Lese- und Schreibvorgängen betreffend den Speicher
so hoch, dass die Gesamtsystemfunktion unakzeptierbar langsam sein
kann.
-
Diese Bedenken sind bei Systemen
mit speziellen Einschränkungen
und Besonderheiten verstärkt.
Zum Beispiel ist Microsoft Windows CE einkompaktes, effizientes
und skalierbares Betriebssystem, das bei einer großen Vielzahl
eingebetteter oder Einbauprodukte verwendet werden kann, von Hand-PCs
bis zu spezialisierten Industriesteuerungen und Geräten der
Verbraucherelektronik. Viele Geräte
unter Verwendung von Microsoft Windows CE sind für einen relativ kleinen Umfang
an Direktzugriffsspeicher (RAM) vorgesehen, wie von einem Megabyte,
um so zu gewährleisten,
dass die Geräte
billig, kompakt und effizient in der Energienutzung bleiben. Darüber hinaus
verfügen
für die
Verwendung von Microsoft Windows CE konzipierte Geräte typischerweise über weniger
leistungsfähige
Prozessoren als sie sich typischerweise in Computern finden, die
dazu konzipiert sind, leistungsfähigere
Betriebssysteme wie Microsoft Windows NT ablaufen zu lassen.
-
Für
Systeme mit derartigen charakteristischen Einschränkungen
und Besonderheiten ist es wesentlich, die Menge des verfügbaren Speichers
zu maximieren. Es besteht Bedarf am effektiven und effizienten Maximieren
der in derartigen Systemen verfügbaren
Speichermenge.
-
Der Artikel "Garbage Collection Software Integrated
With the System Swapper in a Virtual Memory System" von Jack D. Katzberg
et al., der in Proceedings of the IEEE WESCANEX '93 Conference: Communications, Computers
an Power in the Modern Environment, 17.–18. Mai 1993, Saskatoon, Kanada
veröffentlicht
ist, offenbart Interpreter Software zur Verwendung beim Bewerten
des Funktionsvermögens
einer Speicherbereinigungseinrichtung. Das US-Patent Nr. 5,535,390
für Hildebrandt
offenbart ein Verfahren, bei dem Felder von einem Untertyp, wie sie
in einem Objekt enthalten sind, untersucht werden, um zu ermitteln,
ob für
den Speicher, auf den das Objekt Bezug nimmt, eine Aufhebung der
Zuordnung oder eine Neuzuordnung vorgenommen werden kann, ohne dass
zusätzlicher
Speicher oder CPU-Ressourcen verbraucht werden. Das Dokument "Inside the Java Virtual
Machine" von Jordan
Olin, auf der dem Buch von Joseph Weber et al., 2. Auflage, QUE
Corporation, 1996, ISBN: 0-7897-0936-8 beigefügten CD-ROM erörtert Speicherbereinigung in
Zusammenhang mit einer virtuellen Java-Maschine.
-
Zusammenfassung
der Erfindung
-
Die Erfindung ist auf ein Verfahren
zum Entfernen so vieler zeitweiliger Objekte wie möglich während des
Ausführens
eines Programms oder einer Funktion, ohne dass eine Haupt-Speicherbereinigungseinrichtung
ausgelöst
wird, gerichtet.
-
Bestimmte Befehle im Programm ordnen Objekte
zu, wohingegen dies andere Befehle nicht tun. Typischerweise werden
derar tige Objekte aus einem Heap zugeordnet. Gemäß einer Erscheinungsform der
Erfindung wird, wenn ein Programmbefehl ein Objekt zuordnet, Information
zu einem solchen Objekt gespeichert, die seine Identifizierung zu
einem späteren
Zeitpunkt nach dem Ende des Programms erleichtert. Zu derartiger
Information gehören
z. B. eine Threadkennung, die Stacknummer und ein Markierungsbit.
-
Die Erfindung erlaubt ein Wiedergewinnen derartigen
Raums, ohne dass auf die Haupt-Speicherbereinigungseinrichtung zu
warten wäre.
Während
des Ausführens
eines Programms kann, wenn ein zugeordnetes Objekt nie in ein anderes
Objekt gespeichert wird, ein derartiges Objekt verworfen werden
und der von ihm belegte Raum kann wiedergewonnen werden. Anders
gesagt, würde,
wenn die Haupt-Speicherbereinigungseinrichtung aktiviert wäre, der
durch ein solches Objekt belegte Raum wiedergewonnen werden. Demgemäß besteht
einer der Vorteile der Erfindung im Freigeben des Speichers zu einem
früheren
Zeitpunkt als dem, zu dem die Speicherbereinigungseinrichtung ihre Aufgabe
ausführt,
da die Erfindung, wie oben angegeben, das Wiedergewinnen von Raum
ermöglicht, sobald
das Programm beendet wird, das diesen Raum zugeordnet hat. Ferner
erlaubt es die erfindungsgemäße inkrementelle
Speicherbereinigungseinrichtung, anstatt dass sie den gesamten Heap durchscannt,
wie dies die Speicherbereinigungseinrichtung tun würde, nur
den zugeordneten Teil des Heaps, an Stelle des gesamten Heaps, durchzuscannen.
-
Kurze Beschreibung
der Zeichnungen
-
1 ist
ein Blockdiagramm der Hardware und der Betriebsumgebung in deren
Zusammenhang Ausführungsformen
der Erfindung realisiert werden können.
-
2(a) ist
ein Übersichts-Blockdiagramm auf
Systemebene zu einer Technik zum Entfernen zeitweiliger Objekte.
-
2(b) ist
ein Blockdiagramm, das ein Modul zur inkrementellen Speicherbereinigung
als Ausführungsform
der Erfindung zeigt.
-
3 ist
ein Flussdiagramm des Prozesses zum Zuordnen von Objekten außerhalb
des Heaps.
-
4 zeigt
die Zusatzinformation, wie sie in einem Objekt gespeichert ist,
das im Objektheap zugeordnet ist.
-
5 zeigt
die Schritte, wie sie durch das inkrementelle Speicherbereinigungsmodul
ausgeführt werden,
wenn dieses durch den Heap scannt und die in den Objekten gespeicherte
Zusatzinformation liest.
-
Detaillierte
Beschreibung der Ausführungsformen
-
In der folgenden detaillierten Beschreibung wird
auf die beigefügten
Zeichnungen Bezug genommen, die einen Teil derselben bilden und
die zur Veranschaulichung spezieller Ausführungsformen dargestellt sind,
in denen die Erfindung realisiert werden kann.
-
In der detaillierten Beschreibung
existieren drei Abschnitte. Der erste Abschnitt beschreibt die Hardware-
und Betriebsumgebung, mit der Ausführungsformen der Erfindung
realisiert werden können. Der
zweite Abschnitt gibt eine Beschreibung einer Ausführungsform
der Erfindung auf Systemebene. Schließlich gibt der dritte Abschnitt
Verfahren für
eine Ausführungsform
der Erfindung an.
-
Hardware- und
Betriebsumgebung
-
Die 1 ist
ein Diagramm der Hardware- und Betriebsumgebung in deren Zusammenhang Ausführungsformen
der Erfindung realisiert werden können. Die Beschreibung zur 1 ist dazu vorgesehen, für eine kurze
und allgemeine Beschreibung geeigneter Computerhardware und einer
geeigneten Rechenumgebung zu liefern, in deren Zusammenhang die
Erfindung realisiert werden kann. Obwohl es nicht erforderlich ist,
wird die Erfindung im Allgemeinen in Zusammenhang von computerausführbaren Anweisungen
beschrieben, wie Programmmodulen, die durch einen Computer, wie
einen PC, ausgeführt werden.
Allgemein gesagt, gehören
zu Programmmodulen Routinen, Programme, Objekte, Komponenten, Datenstrukturen
usw., die spezielle Tasks ausführen
oder spezielle abstrakte Datentypen implementieren.
-
Darüber hinaus erkennt der Fachmann,
dass die Erfindung mit anderen Computersystemkonfigurationen realisiert
werden kann einschließlich
Handgeräten,
Multiprozessorsystemen, Verbraucherelektronik auf Mikroprozessorbasis
oder programmierbarer Basis, Netzwerk-PCs, Mikrocomputern, Großrechnern
und dergleichen. Die Erfindung kann auch in verteilten Computerumgebungen
realisiert werden, wo Tasks durch Fernverarbeitungsvorrichtungen ausgeführt werden,
die über
Kommunikationsnetze verbunden sind. In einer verteilten Rechnerumgebung
können
Programmmodule sowohl in lokalen als auch in entfernten Speichervorrichtungen
lokalisiert sein.
-
Die beispielhafte Hardware- und Betriebsumgebung
der 1 zum Realisieren
der Erfindung verfügt über eine
Universal-Rechenvorrichtung in
Form eines Computers 20 mit einer Verarbeitungseinheit 21,
einem Systemspeicher 22 und einem Systembus 23,
der funktionsmäßig verschiedene
Systemkomponenten einschließlich
des Systemspeichers mit der Verarbeitungsein heit 21 verbindet.
Es kann nur eine Verarbeitungseinheit 21 vorhanden sein,
oder mehrere, so dass der Prozessor des Computers 20 über eine
einzelne zentrale Verarbeitungseinheit (CPU) oder über mehrere
Verarbeitungseinheiten verfügt,
was allgemein als parallele Verarbeitungsumgebung bezeichnet wird.
Der Computer 20 kann ein herkömmlicher Computer, ein verteilter Computer
oder beliebiger anderer Computertyp sein; die Erfindung hat keine
diesbezügliche
Beschränkung.
-
Der Systembus 23 kann ein
beliebiger von mehreren Typen von Busstrukturen sein, einschließlich eines
Speicherbusses oder eines Speichercontrollers, eines Peripheriebusses
und eines lokalen Busses unter Verwendung einer beliebigen einer
Anzahl von Busarchitekturen. Der Systemspeicher kann auch einfach
als Speicher bezeichnet werden, und er verfügt über einen Festwertspeicher
(ROM) 24 und einen Direktzugriffsspeicher (RAM) 25.
Im ROM 24 ist ein grundlegendes Eingabe/Ausgabe-System (BIOS) 26 gespeichert,
das die Grundroutinen enthält,
die dazu beitragen, Information zwischen Elementen innerhalb des
Computers 20, wie während des
Starts, zu übertragen.
Der Computer 20 enthält ferner
ein Festplatten-Laufwerk 27, um von einer nicht dargestellten
Festplatte zu lesen und auf sie zu schreiben, ein Magnetplatten-Laufwerk 28,
um von einer entnehmbaren Magnetplatte 29 zu lesen oder auf
sie zu schreiben, und ein optisches Plattenlaufwerk 30,
um von einer entnehmbaren optischen Platte 31 wie einer
CD-ROM oder einem anderen optischen Medium zu lesen oder auf es
zu schreiben.
-
Das Festplatten-Laufwerk 27,
das Magnetplatten-Laufwerk 28 und das optische Plattenlaufwerk 30 sind
durch eine Festplattenlaufwerk-Schnittstelle 32, eine Magnetplattenlaufwerk-Schnittstelle 33 bzw.
eine Schnittstelle 34 für
optische Plattenlaufwerke mit dem Systembus 23 verbunden.
Die Laufwerke und die ihnen zugeordneten computerlesbaren Medien bilden
einen nichtflüchtigen
Speicher mit computerlesbaren Anweisungen, Datenstrukturen, Programmmodulen
und anderen Daten für
die Computer 20. Der Fachmann erkennt, dass in der beispielhaften
Betriebsumgebung jeder beliebige Typ an computerlesbaren Medien
verwendet werden kann, die Daten speichern, auf die ein Computer
zugreifen kann, wie Magnetkassetten, Flashspeicherkarten, digitale
Videoplatten, Bernoulli-Kassetten, Direktzugriffsspeicher (RAMs),
Festwertspeicher (ROMs) und dergleichen.
-
Auf der Festplatte, der Magnetplatte 29,
der optischen Platte 31, dem ROM 24 oder dem RAM 25 kann
eine Anzahl von Programmmodulen gespeichert sein, einschließlich eines
Betriebssystems 35, eines Anwendungsprogramms 36 oder
mehrerer, anderer Programmmodule 37 und Programmdaten 38. Ein
Benutzer kann über
Eingabevorrichtungen wie eine Tastatur 40 und eine Zeigervorrichtung 42 Befehle
und Information in den PC 20 eingeben. Zu anderen Eingabevorrichtungen
(nicht dargestellt) können
ein Mikrofon, ein Joystick, ein Gamepad, eine Satellitenschüssel, ein
Scanner oder dergleichen gehören.
Diese und andere Eingabevorrichtungen sind häufig über eine Schnittstelle 46 mit
seriellem Port, die mit dem Systembus verbunden ist, mit der Verarbeitungseinheit 21 verbunden,
jedoch können
sie durch andere Schnittstellen angeschlossen sein, wie einen Parallelport,
einen Gameport oder eine Universal Serial Bus (USB). Mit dem Systembus 23 ist über eine
Schnittstelle, die einen Videoadapter 48, auch ein Monitor 47 oder
ein anderer Typ einer Anzeigevorrichtung verbunden. Zusätzlich zum
Monitor verfügen
Computer typischerweise über
andere periphere Ausgabevorrichtungen (nicht dargestellt), wie Lautsprecher
und Drucker.
-
Der Computer 20 kann in
einer Netzwerkumgebung unter Verwendung logischer Verbindungen zu
einem oder mehreren entfernten Computern, wie einem entfernten Computer 49,
arbeiten.
-
Diese logischen Verbindungen werden
durch eine Kommunikationsvorrichtung bewerkstelligt, die mit dem
Computer 20 oder einem Teil desselben verbunden ist; die
Erfindung ist auf keinen speziellen Typ einer Kommunikationsvorrichtung
beschränkt. Der
Ferncomputer 49 kann ein anderer Computer, ein Server,
ein Router, ein Netzwerk-PC, ein Client, ein Peer-Gerät oder ein
anderer üblicher
Netzwerkknoten sein, und typischerweise enthält er viele oder alle Elemente,
die oben in Zusammenhang mit dem Computer 20 beschrieben
wurden, obwohl in der 1 nur
eine Speichervorrichtung 50 dargestellt ist. Zu den in
der 1 dargestellten
logischen Verbindungen gehören
ein lokales Netz (LAN) 51 und ein Weitbereichsnetz (WAN) 52.
Derartige Netzwerkumgebungen sind in Büronetzwerken, unternehmensweiten
Computernetzen, Intranets und dem Internet, die alle Typen von Netzwerken
sind, üblich.
-
Wenn der Computer 20 in
einer LAN-Netzwerkumgebung genutzt wird, ist er über eine Netzwerkschnittstelle
oder einen Adapter 53, wobei es sich um einen Typ einer
Kommunikationsvorrichtung handelt, mit dem lokalen Netzwerk 51 verbunden. Wenn
der Computer 20 in einer WAN-Netzwerksumgebung verwendet
wird, enthält
er typischerweise ein Modem 54, einen Typ einer Kommunikationsvorrichtung,
oder irgendeinen anderen Typ einer Kommunikationsvorrichtung, um
für Kommunikationsvorgänge über das
Weitbereichsnetz 52, wie das Internet, zu sorgen. Das Modem 54,
das intern oder extern sein kann, ist über die Schnittstelle 46 mit
seriellem Port mit dem Systembus 23 verbunden. In einer
Netzwerkumgebung können
Programmmodule, die in Beziehung zum PC 20, oder Teilen desselben,
dargestellt sind, in der Fern-Speichervorrichtung gespeichert sein.
Es ist zu beachten, dass die Netzwerksverbindungen beispielhaft
dargestellt sind und dass andere Maßnahmen und Kommunikationsvorrichtungen
zum Errichten einer Kommunikation-Übertragungsstrecke zwischen
den Computern verwendet werden können.
-
Es wurde die Hardware- und Betriebsumgebung
beschrieben, in deren Zusammenhang Ausführungsformen der Erfindung
realisiert werden können. Der
Computer, in dessen Zusammenhang Ausführungsformen der Erfindung
realisiert werden können, kann
ein herkömmlicher
Computer, ein verteilter Computer oder ein beliebiger anderer Computertyp sein,
wobei die Erfindung hierzu keine Beschränkung zeigt. Ein derartiger
Computer enthält
typischerweise eine oder mehrere Verarbeitungseinheiten als Prozessor
sowie ein computerlesbares Medium wie einen Speicher. Der Computer
kann auch eine Kommunikationsvorrichtung wie einen Netzwerkadapter oder
ein Modem aufweisen, so dass er dazu in der Lage ist, kommunizierend
mit anderen Computern verbunden zu werden.
-
Überblick
auf Systemebene
-
Die 2(a) zeigt
einen Überblick
auf Systemebene über
eine Technik zum Entfernen vorübergehender
Objekte während
des Betriebs eines Programms oder einer Funktion 204 innerhalb
der Umgebung einer virtuellen Java-Maschine (JVM) 208, ähnlich derjenigen,
wie sie im bereits genannten Dokument "Inside the Java Virtual Machine" von Jordan Olin
ist. JVM ist ein natives Programm, das innerhalb eines Betriebssystems
läuft,
um das Programm oder die Funktion 204 zu interpretieren
und auszuführen. Das
Programm oder die Funktion 204 bei dieser Implementation
ist Java-Code.
-
Während
des Ausführens
des Programms oder der Funktion 204 können bestimmte Befehle eine
Zuordnung von Objekten von einem Heap 212 veranlassen,
z. B. durch das Herstellen einer Beziehung einer Variablen mit einem
Objekt. Der Heapmanager 216 verfolgt eine Adresse im Heap 212,
aus dem Objekte zugeordnet werden können. Wenn immer mehr Objekte
aus dem Heap
212 zugeordnet werden, ist es möglich, dass
der Heapmanager 216 beim Betriebssystem zusätzlichen Speicherraum anfordert.
Wenn ein Objekt vom Heap 212 zugeordnet wird, wird ihm
auch ein Bezugszählwert
zugewiesen. Immer dann, wenn ein Bezugswert den Bereich verlässt, wird
der Bezugszählwert
des Objekts, das mit der Variablen in Beziehung steht, inkrementiert.
Jedes Objekt mit dem Bezugszählwert
null ist ein Kandidat zur Speicherbereinigung.
-
Die Speicherbereinigungseinrichtung 220 scannt,
wenn sie aktiviert ist, den Heap 212 nach Objekten mit
dem Bezugszählwert
0 durch, und sie macht den durch ein solches Objekt belegten Speicher
für zukünftigen
Gebrauch frei. Die Funktion der Speicherbereinigungseinrichtung 220 ist
in der Technik bekannt, jedoch führt
Java im Wesentlichen eine Speicherbereinigung unter den folgenden
Bedingungen aus: (1) immer dann wenn es erforderlich ist (wenn die
Menge des im Heap 212 verbliebenen Speichers unter einen
vorbestimmten Wert fällt,
wird eine Speicherbereinigung ausgeführt, um alles an Speicher wiederzugewinnen,
was wiedergewinnbar ist; (2) immer dann wenn Speicherbereinigung
angefordert wird – eine
Speicherbereinigung kann durch Java dadurch erzwungen werden, dass "System.gc" aufgerufen wird,
wobei es sich um Speicherbereinigungseinrichtung von Java handelt;
oder (3) immer dann, wenn Java einen Hintergrundtask ausführt, der nach
wiederzugewinnenden Objekten sucht.
-
Die 2(b) zeigt
eine inkrementelle Speicherbereinigungseinrichtung 270 als
Ausführungsform
der Erfindung. Die inkrementelle Speicherbereinigungseinrichtung 270 ist
ein integraler Teil der JVM. Wie beim Stand der Technik verfolgt der
Heapmanager 266 eine Adresse im Heap 262, aus
den Objekte zugeordnet werden können.
Wenn einmal eine Funktion 254 aktiviert ist oder ausgeführt wird,
speichert die inkrementelle Speicherbereinigungseinrichtung 270 die
Adresse vom Heapmanager 266, die den nächsten Speicher anzeigt, aus
dem Objekte zugeordnet werden können.
Wenn die Funktion 254 verlassen wird, speichert die inkrementelle Speicherbereinigungseinrichtung 270 die
Adresse des letzten Objekts, das aus dem Heap 262 zugeordnet
wurde. Während
des Ausführens
der Funktion 254 innerhalb der Umgebung der JVM 258 wird, wenn
Objekte vom Heap 262 aus zugeordnet werden, Zusatzinformation
im Objekt gespeichert, was die Identifizierung eines derartigen
Objekts durch das inkrementelle Speicherbereinigungsmodul 270 zu
einem späteren
Zeitpunkt erleichtert.
-
Darüber hinaus verfügt, wie
bereits angegeben, die inkrementelle Speicherbereinigungseinrichtung 270 über Information
betreffend den Bereich des Heaps, der durch die Funktion 254 zugeordnet
wurde – im
Wesentlichen die Anfangs- und die Endadresse der Objekte, die vom
Heap 262 weg zugeordnet wurden. Sobald das Programm oder
die Funktion 254 endet oder verlassen wird, scannt das
inkrementelle Speicherbereinigungsmodul 270, ausgehend
von der Anfangs- zur Endadresse der vom Heap aus zugeordneten Objekte,
den Heap durch, und es liest die in den Objekten gespeicherte Zusatzinformation.
Wenn die inkrementelle Speicherbereinigungseinrichtung 270 ein
Objekt als wertlose Daten identifiziert, führt sie sofort eine Wiedergewinnung
des durch dieses Objekt belegten Raums aus und macht ihn zum Gebrauch
verfügbar.
Demgemäß führt die
inkrementelle Speicherbereinigungseinrichtung 270 eine
Wiedergewinnung des durch das Objekt belegten Raums aus, ohne dass
sie auf den Betrieb der Speicherbereinigungseinrichtung 274 warten
würde.
Außerdem muss
die inkrementelle Speicherbereinigungseinrichtung 270 nicht
den gesamten Heap durchscannen, sondern nur von der Anfangs- zur
Endadresse des zugeordneten Bereichs des Heaps anstatt des gesamten
Heaps.
-
Obwohl die Speicherbereinigungseinrichtung 220 und 272 oben
hinsichtlich einer Bezugswert-Zähltechnik
beschrieben sind, sind in der Technik andere Techniken zur Speicherbereinigung
bekannt. Zu diesen anderen Techniken gehören z. B. zurückgestellten
Bezugswertzählen
(deferred reference counting), durchfahrendes Sammeln von Markierungen
(mark-sweep collection), kompaktes Sammeln von Markierungen (mark-compact
collection) und kopierende Speicherbereinigung.
-
Verfahren einer
Ausführungsform
der Erfindung
-
Der vorige Abschnitt beschreibt den
Betrieb einer Ausführungsform
der Erfindung aus Systemebene. Dieser Abschnitt beschreibt Verfahren,
wie sie durch einen Computer einer derartigen Ausführungsform
ausgeführt
werden.
-
In einem Schritt 300 im
Flussdiagramm der 3 wird
ein Programm- oder Funktionsbefehl oder ein Code ausgeführt. In
einem Schritt 302 wird ermittelt, ob der ausgeführte Code
eine Zuordnung von Objekten vom Heap weg benötigt. Wenn im Schritt 302 ermittelt
wird, dass der Code keine Objekte vom Heap weg zuordnet, geht die
Steuerung zu einem Schritt 306 über. Andernfalls, wenn nämlich im
Schritt 302 ermittelt wird, dass der Code Objekte vom Heap weg
zuordnet, geht die Steuerung zu einem Schritt 304 weiter.
-
Im Schritt 304 wird Information
zum Objekt im Objekt, das zugeordnet wird, abgespeichert. Die im
Objekt abgespeicherte Information wird unten vollständiger erörtert. Dann
geht die Steuerung mit dem Schritt 306 weiter, in dem ermittelt
wird, ob das Ende des Programms oder der Funktion erreicht ist.
Wenn das Ende des Programms oder der Funktion noch nicht erreicht
ist, wird in einem Schritt 308 der nächste Befehl abgerufen und
dann geht die Steuerung zum Schritt 300 über. Wenn
jedoch im Schritt 306 ermittelt wird, dass das Ende des Programms
oder der Funktion erreicht ist, wird in einem Schritt 310 eine
inkrementelle Speicherbereinigung ausge führt.
-
Die 4 zeigt
die zum Objekt hinzugefügte Information,
wie oben erörtert.
Diese Information beinhaltet (1) eine Threadkennung 315 für die Funktion oder
das Programm, das das Objekt zuordnet (2) eine Funktions- oder Stacknummer 320 und
(3) ein Markierungsbit 325, das dann, wenn es gesetzt ist, anzeigt,
dass das Objekt in jedem Fall außerhalb der Funktion gespeichert
ist. Die Threadkennung 315 wird entweder vom Betriebssystem
oder der JVM erfasst, und sie ist in der Technik bekannt. Die Funktions-
oder Stacknummer 320 ist eine Art zum Kennzeichnen, welche
Funktion das Objekt zugeordnet hat. Wenn eine Funktion ("Funktion 1") eine andere Funktion
("Funktion 2") aufruft, haben
beide dieselbe Threadkennung. Es ist wesentlich, dass dann, wenn die
Funktion 2 verlassen wird und die inkrementelle Speicherbereinigungseinrichtung
aktiviert wird, die durch die Funktion 1 zugeordneten Objekte für die Funktion
1 immer noch verfügbar
sind.
-
Das Markierungsbit 325 wird,
wie oben angegeben, dann gesetzt, wenn das Objekt auf irgendeine Weise
außerhalb
der Funktion gespeichert wird. Ein Objekt, das nicht außerhalb
der Funktion gespeichert wird, die das Objekt zugeordnet hat, wird
als lokal für die
Funktion bezeichnet. Zum Beispiel wird das Markierungsbit 325 dann
gesetzt, wenn das Objekt in einer globalen Variablen gespeichert,
rückgeliefert oder
als Ausnahme ausgeworfen wird.
-
Normalerweise wird das Markierungsbit 325 auch
dann für
ein Objekt ("Objekt
1") gesetzt, wenn das
Objekt 1 in ein anderes Objekt ("Objekt
2") gespeichert
wird. Wenn jedoch das Objekt 2 (in dem das Objekt 1 gespeichert
wird) derselben Funktion zugeordnet ist, die das Objekt 1 zuordnete,
und wenn auf das Objekt 2 nicht außerhalb derselben Funktion Be zug
genommen wird, wird das Markierungsbit 325 weder für das Objekt
1 noch das Objekt 2 gesetzt. Wenn jedoch das Markierungsbit 325 des
Objekts 2 später
gesetzt wird untersucht die inkrementelle Speicherbereinigungseinrichtung
alle im Objekt 2 gespeicherten Objekte. Wenn ein im Objekt 2 gespeichertes
Objekt über
kein gesetztes Markierungsbit verfügt, setzt die inkrementelle
Speicherbereinigungseinrichtung das Markierungsbit zu diesem Zeitpunkt.
Außerdem
wird das Markierungsbit 325 für das genutzte Objekt auch
immer dann gesetzt, wenn einer der folgenden Befehle ausgeführt wird:
AASTORE, ARETURN, ATHROW, PUTFIELD, PUTFIELD FAST, PUTSTATIC oder
PUTSTATIC FAST. Diese Liste nicht erschöpfend – gemäß eine allgemeinen Regel wird
das Markierungsbit 325 für solche Objekte gesetzt, die
von Befehlen (wie den oben aufgelisteten) verwendet werden, die
die Objekte außerhalb der
Funktion speichern können
oder dies tatsächlich vornehmen.
-
Die 5 zeigt
die Schritte, wie sie vom inkrementellen Speicherbereinigungsmodul
ausgeführt
werden, wenn es den Heap durchscannt und die in den Objekten gespeicherte
Zusatzinformation liest. Die inkrementelle Speicherbereinigungseinrichtung ruft
in einem Schritt 400 ein Objekt vom Heap ab, und dann ermittelt
sie in einem Schritt 402, ob die im Objekt gespeicherte
Threadkennung derjenigen der Funktion oder des Programms entspricht,
das die inkrementelle Speicherbereinigungseinrichtung aufgerufen
hat. Wenn die Threadkennung des Objekts keine Entsprechung zeigt,
geht die Steuerung zu einem Schritt 416 weiter. Wenn die
Threadkennung Entsprechung zeigt, geht die Steuerung zu einem Schritt 404 über, in
dem ermittelt wird, ob die Stacknummer der durch die aufrufende
Funktion zugewiesenen Nummer entspricht. Wenn die Stacknummer keine Entsprechung
zeigt, geht die Steuerung zum Schritt 316 über. Wenn
die Stacknummer Entsprechung zeigt, geht die Steuerung zu einem
Schritt 406 über, in
dem ermittelt wird, ob das im Objekt gespeicherte Markierungsbit
gesetzt ist.
-
Wenn das Markierungsbit gesetzt ist,
geht die Steuerung zu einem Schritt 408 über, in
dem ermittelt wird, ob das Objekt in einem anderen Objekt (d. h.
einem Objekt 2) mit derselben Thread-ID und derselben Stacknummer
gespeichert wurde. Falls nicht, geht die Steuerung zum Schritt 416 über, in dem
ermittelt wird, ob das Ende des Objektheaps erreicht ist. Wenn das
Objekt in einem anderen Objekt mit derselben Thread-ID und derselben
Stacknummer gespeichert ist, geht die Steuerung zu einem Schritt 410 über, in
dem ermittelt wird, ob das Markierungsbit für das Objekt 2 gesetzt ist.
Wenn dies der Fall ist, geht die Steuerung zum Schritt 416 über. Wenn
das Markierungsbit für
das Objekt 2 nicht gesetzt ist, geht die Steuerung zu einem Schritt 412 über, in
dem ermittelt wird, ob irgendwo sonst auf das Objekt Bezug genommen
ist. Wenn dies der Fall ist, geht die Steuerung zum Schritt 416 über. Wenn
nirgendwo sonst auf das Objekt Bezug genommen wird, wird der durch
das Objekt belegte Raum in einem Schritt 414 wiedergewonnen.
-
Wenn im Schritt 406 das
Markierungsbit nicht gesetzt ist, wird der durch das Objekt belegte Raum
im Schritt 414 wiedergewonnen und die Steuerung geht zum
Schritt 416 über.
Im Schritt 416 wird ermittelt, ob das Ende des Objektheaps
erreicht ist. Wenn das Ende des Objektheaps noch nicht erreicht ist,
zeigt die inkrementelle Speicherbereinigungseinrichtung auf das
nächste
Objekt, wie im Schritt 418 dargestellt, und die Steuerung
geht zum Schritt 400 über.
Andernfalls, wenn das Ende des Objektheaps erreicht ist, beendet
inkrementelle Speicherbereinigungseinrichtung ihre Arbeit.
-
Fig. 1
- 21
- Verarbeitungseinheit
- 23
- Systembus
- 25
- Systemspeicher
- 32
- Schnittstelle
für das
Festplatten-Laufwerk
- 33
- Schnittstelle
für das
Magnetplatten-Laufwerk
- 34
- Schnittstelle
für das
optische Laufwerk
- 35
- Betriebssystem
- 36
- Anwendungsprogramme
- 37
- Andere
Programmmodule
- 38
- Programmdaten
- 47
- Monitor
- 48
- Videoadapter
- 51
- Lokales
Netzwerk
- 52
- Weitbereichsnetz