OOP Erschaffen und Zerstören, GC

Sorainthy

Mitglied
Hallo zusammen,

ich bin gerade dabei Java zu lernen (Hobby) und habe folgendes Verständnisproblem:
In C++ existiert ein Konsturktor zum erstellen und ein Destruktor zum "vernichten".

In Java gibt es ja "nur" den GC. Erleichtert einiges, doch habe ich ein Problem damit WANN er überflüssige Objekte "löscht".

Um es genauer zu machen: Ich habe ein Array von Objekten welches eingelesen wird.
Nun soll es natürlich möglich sein ein neues Objekt der Quelle hinzufügen. Hierfür schwebt mir vor, nach dem ändern der Quelldatei das Array zu "löschen" und neu zu erstellen, damit das neue Objekt ebenfalls Teil des Arrays ist (oder ist es möglich ein Array im nachhinein zu erweitern?).

Nur wie läuft die Vorgehensweise?
Array = null;
// GC führt sich aus
Array = new Object;

Oder würde es auch einfach reichen das Array mit new Object zu überschreiben?

Grüße,

Sorainthy
 

VfL_Freak

Top Contributor
Moin,

du kannst den GC NICHT mit einen Destruktor vergleichen !!

Der GC entfernt ein Objekt aus dem Speicher, wenn es darauf keine Referenz mehr gibt !!

Gruß
Klaus
 

Sorainthy

Mitglied
Schon klar. Sonst würden sich die weiteren Fragen ja nicht ergeben.
Muss vor der Neubelegung eines Objektes dies erst auf "null" gesetzt werden?
Oder kann es direkt neu belegt werden?`

Dem GC dürfte es egal sein, da in beiden Fällen die "alten" Daten keine Referenz mehr besitzen.

Jedoch würde ich auch gerne ein Performantes Programm schreiben und hier ist es wichtig, ob Java dies ohne durch Fragmente gestört zu werden umsetzen kann.

Grüße,

Sorainthy
 

Natac

Bekanntes Mitglied
Wenn auf ein Objekt keine Referenz mehr existiert, fällt es (irgendwann) dem GC zum Opfer.

Wenn du deine Array-Variable mit einem neuen Objekt belegst, dann hast du keine Referenz mehr auf das alte -> GC. Sie vorher explizit auf null setzen bringt nichts, ist aber auch nicht falsch.

Und ich würde sagen... ja, deine Antwort auf deine Frage ist richtig ;)
 

turtle

Top Contributor
Mir ist aufgefallen, das geschrieben wurde, das nach null-Setzen eines Objektes der GC laufen würde.

Diese Annahme ist (natürlich) FALSCH.

Es gibt KEINE Möglichkeit die JVM dazu zu zwingen eine GC durchzuführen. Selbst der direkte Aufruf
Java:
System.gc();
gibt lediglich den Vorschlag für eine GC an die JVM.

Ob diese das aber auch macht, und zu welchem Zeitpunkt, ist völlig der JVM überlassen. Also kann die JVM auch entscheiden, gar nichts zu tun.
 

Ähnliche Java Themen

Neue Themen


Oben