Referenzen und die Speicherverwaltung in Java [] (Referenzen und die Speicherverwaltung in Java), Lektion, Seite 723530
https://www.purl.org/stefan_ram/pub/referenzspeicherverwaltung_java (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram
Java-Kurs

Referenzen und die Speicherverwaltung in Java

Der Speicher des Computers besteht aus Teilen, die von vorhandene Objekte belegt  sind und daher nur  durch diese Objekte verwendet werden dürfen, und aus Teilen, die derzeit nicht verwendet werden, und daher für die Verwendung durch neue Objekte frei  sind.

In dem folgenden Programmfragment wird ein neues Objekt angelegt und seine Referenz in der Variablen x gespeichert. Dann wir dasselbe noch einmal wiederholt. Dadurch geht die erste Referenz verloren. Das erste Objekt existiert noch, aber es kann nicht mehr erreicht werden. Blockiert es jetzt nicht unnötigerweise Speicherplatz? Nein, denn Java findet solche unerreichbaren Objekte automatisch und gibt ihren Speicher zur erneuten Verwendung frei.

x = new java.lang.Object();

x = new java.lang.Object();

In der folgenden Endlosschleifen werden immer wieder neue Objekte im Speicher angelegt, aber da die nicht erreichbaren Objekte automatisch wieder freigegeben werden, wird der Speicher nie voll.

while( true )x = new java.lang.Object();

Ein Objekt wird gelöscht (also zur Wiederverwendung seines Speichers freigegeben), nachdem es nirgendwo mehr eine Referenz auf das Objekt gibt. Um dies zu erreichen, gibt es keinen speziellen Aufruf. Der Programmierer muß vielmehr darauf achten, daß keine Variable mehr eine Referenz auf dieses Objekt enthält.

Bei Namen mit Blockgültigkeitsbereich kann das Objekt zum Löschen freigegeben werden, wenn der Gültigkeitsbereich endet (falls sonst keine Referenz auf das Objekt kopiert wurde).

{ final java.lang.Object x = new java.lang.Object(); } /* hier ist das Objekt freigegeben */

Wenn eine Referenz auf ein Objekt nur in einer Variablen »x« gespeichert ist, dann wird das Objekt zum Löschen freigegeben, sobald die Variable mit einem neuen Wert beschrieben ist, beispielsweise auf die folgende Weise:

x = null;

Ein Speicherleck kann entstehen, wenn eine Referenz auf ein Objekt noch irgendwo gespeichert ist, obwohl dieses Objekt im weiteren Verlaufe des Programms vorhersehbar nicht mehr verwendet werden soll. Dann wird der Speicherplatz für das Objekt nicht freigegeben geht somit für die anderen Objekte verloren.

Wann genau ein einst von einem Objekt belegte und nun freigegebener Speicher für etwas anderes wiederverwendet wird, kann man nicht genau sagen.

Objekte haben unterschiedliche  Speichergröße, während alle Referenzen gleich groß  sind. Eine Variable für ein Objekt eines unbestimmten  Typs ist also nicht direkt möglich, da dann nicht bekannt wäre, welche Größe  diese Variable haben sollte. Daher enthalten Variablen keine Objekte, sondern immer nur Referenzen.

Seiteninformationen und Impressum   |   Mitteilungsformular  |   "ram@zedat.fu-berlin.de" (ohne die Anführungszeichen) ist die Netzpostadresse von Stefan Ram.   |   Eine Verbindung zur Stefan-Ram-Startseite befindet sich oben auf dieser Seite hinter dem Text "Stefan Ram".)  |   Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram. Schlüsselwörter zu dieser Seite/relevant keywords describing this page: Stefan Ram Berlin slrprd slrprd stefanramberlin spellched stefanram723530 stefan_ram:723530 Referenzen und die Speicherverwaltung in Java Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd723530, slrprddef723530, PbclevtugFgrsnaEnz Erklärung, Beschreibung, Info, Information, Hinweis,

Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram.
https://www.purl.org/stefan_ram/pub/referenzspeicherverwaltung_java