Vernichtung von objekten mit dem garbage collector

sh33p

Bekanntes Mitglied
Java:
public class Alpha {


  static int nummer;

  public Alpha (){
  nummer++;
  System.out.println("Objekt " + nummer + " wurde erzeugt.");
  }

  protected void finalize() throws Throwable{

    super.finalize();
          System.out.println("Objekt " + nummer + " wurde gelöscht.");
          nummer--;
       }
    }

public class GarbageTest {
static public void main (String[] args) {
int n = 0; /* Anzahl zu erzeugender Objekte */
java.util.Scanner scanner = new java.util.Scanner (System.in);
System.out.println ("Gib die Anzahl " +
"zu erzeugender Objekte ein: ");
try {
n = scanner.nextInt();
}
catch (NumberFormatException e) {
System.out.println (e.toString());
System.exit (1);
}
for (int lv = 0; lv < n; lv++) {
Alpha alphaRef = new Alpha();
}
}

Wenn ich wenige Objekte erzeugen lasse, werden die Objekte nur erzeugt,doch ab einer bestimmten anzahl auch gelöscht. ich versteh das prinzip nicht. Wann löscht der Garbage Collector allgemein und in diesem falle objekte?
 

Der Müde Joe

Top Contributor
>. Wann löscht der Garbage Collector allgemein und in diesem falle objekte?

Wenn keine Referenz mehr auf das Objekt existiert und der GC grad Lust zum arbeiten hat.

EDIT:
Die Referenz in deinem Fall endet bei } der schleife ;-)
 

sambalmueslie

Bekanntes Mitglied
Die Objekte werden vom GC dann gelöscht, wenn niemand sie mehr verwendet.
Dazu läuft der GC nicht ständig, sondern immer mal wieder zwischendurch.
Da brauchst du dir eigentlich keine Sorgen zu machen.
Wenn du trotzdem mal aufräumen möchtest:

Java:
System.gc();

Dann sollten deine Objekte auch wieder gelöscht werden.

(vgl. Entfernen von Objekten )

Gruß Oli
 

nrg

Top Contributor
Es werden garkeine Objekte einfach so gelöscht. Solang eine Referenz auf das Objekt verweißt, bleibt es erhalten...

z.b.:
Object abc = new Object(); //1
abc = new Object(); //2

Hier gibt es eine Referenzvariable und zwei Objekte. //1 ist nicht mehr erreichbar und wird durch den gc beseitigt. (automatisch oder durch System.gc()).

Hier im Forum wurde da auch mal ein schöner Vergleich genannt (weiß nicht mehr wie er genau war ;)):

Ein Mann geht mit seinen 5 Hunden Gassi. Die 5 Hunde sind an der Leine und solange sie das sind hat er die Kontrolle über sie. Die Leinen sind die Referenzvariablen und die Hunde die Objekte. Wenn jetzt ein Hund von der Leine losgelassen wird, rennt er weg (sind anscheinend schlecht erzogen) und wird vom Tierzüchter (gc) eingefangen (der gc löscht das Object natürlich aber sowas wollen wir dem Hund ja nicht antun ;)).

grüße

edit: war mal wieder zu langsam
 

Der Müde Joe

Top Contributor
>Dann sollten deine Objekte auch wieder gelöscht werden.

Nö. Das ist nur ein Hint: Bitte bitte lieber GC, könntest du dich mal in bewegung setzen.
Ob das auch passiert, kann kein System.gc Runtime.runFinalizers (oder wie auch immer) steuern.
 

sambalmueslie

Bekanntes Mitglied
>Dann sollten deine Objekte auch wieder gelöscht werden.

Nö. Das ist nur ein Hint: Bitte bitte lieber GC, könntest du dich mal in bewegung setzen.
Ob das auch passiert, kann kein System.gc Runtime.runFinalizers (oder wie auch immer) steuern.

Hihi aber immerhin passiert mehr, als wenn man es nicht aufruft :) Erinnert mich irgendwie an das Swing-Repaint :D

Gibts nen Fall, wo man das wirklich explizit braucht??

Gruß oli
 

Der Müde Joe

Top Contributor
>Hihi aber immerhin passiert mehr, als wenn man es nicht aufruft

von der API (runtime#gc())
When control returns from the method call, the virtual machine has made its best effort to recycle all discarded objects.

>Gibts nen Fall, wo man das wirklich explizit braucht??

hmm...eher selten. Kann mich nich daran erinnern, das schon oft benutzt zu haben ( einmal vor grösseren Updates (daten) um zu hoffen, das der gc das update nicht noch langsamer macht..(auf gut glück)
 

Marco13

Top Contributor
"Wenn es keine Referenz mehr gibt" ... "Wenn niemand sie mehr verwendet"... so einfach ist das alles nicht. Der Garbage Collector ist WEIT mehr als ein Ding, das permanent die Erreichbarkeit im Graphentheoretischen Sinn überprüft, und löscht, was das Zeug hält. Die einfachste Form (ich denke, das ist das, was man "Mark and Sweep" nennt) kommt dem wohl recht nahe, aber es gibt da noch viele andere Aspekte ... ich bin kein Experte darin, aber ohne solche Begriffe wie Eden- oder Young Generation Space, GC Roots, Dominator Trees usw. kann man die Frage wohl nicht präzise beantworten.

Aber ... lassen wir's: Der GC löscht, wenn das Objekt nicht mehr erreichbar ist ;)
 

fastjack

Top Contributor
Sauber ist auch, wenn Du Deine Objekte selbst auf null setzt, wenn Du sie nicht mehr brauchst. Das vergessen leider immer wieder viele.
 

fastjack

Top Contributor
Das ist richtig. Dadurch, daß das Objekt die Referenz (null oder per Neuzuweisung) verliert wird es aber sofort zur Löschung durch den GC gekennzeichnet und nicht erst irgendwann, wenn die VM einen Block verläßt.

nrg hat gesagt.:
also imho wird dadruch lediglich die Referenz auf das Object gelöscht und nicht das Object selbst. Das hätte den gleichen Effekt wie eine Neuzuweißung.

wie willst Du denn sonst ein Objekt zur Löschung durch den GC kennzeichnen ?
 
Zuletzt bearbeitet:

nrg

Top Contributor
Dann habe ich deinen Post falsch verstanden. Dachte du willst damit sagen, dass durch die null-zuweißung das Object direkt gelöscht wird.
 

fastjack

Top Contributor
Hilft z.B. bei Listenimplementationen, oder da, wo viele Objekte umgehangen werden. Wird auch in aktuellen Java-Api Implementationen benutzt.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Array List mit Objekten sortieren Java Basics - Anfänger-Themen 2
T Kollision von 2 Objekten Java Basics - Anfänger-Themen 2
T Variable von Objekten in einer Methode überprüfen Java Basics - Anfänger-Themen 26
B Reflection ändern von Objekten in Objekten Java Basics - Anfänger-Themen 12
H Kompliziertes Sortieren einer ArrayList mit Objekten(Sortieren nach X und Y) Java Basics - Anfänger-Themen 11
T Permanentes speichern von Objekten in einer ArrayList Java Basics - Anfänger-Themen 6
N Vererbung Queue bestehend aus Superclass- und Subclass-Objekten Java Basics - Anfänger-Themen 7
B Compiler-Fehler Array aus Objekten übergeben Java Basics - Anfänger-Themen 7
YAZZ Schlüsselworte Töten von Objekten Gameover Java Basics - Anfänger-Themen 2
F Abstand zwischen zwei Objekten berechnen wie? Java Basics - Anfänger-Themen 1
districon Vergleichen von Objekten Java Basics - Anfänger-Themen 20
Zeppi OOP Array in Objekten Java Basics - Anfänger-Themen 4
LetsSebi Methode, die einen arry von objekten speichert in einer datei Java Basics - Anfänger-Themen 6
JavaNoobi Try and Catch und übergabe von Objekten Java Basics - Anfänger-Themen 2
A Klasse Menge mit Objekten der Klasse Person Java Basics - Anfänger-Themen 8
S Auf Array aus Objekten zugreifen? Java Basics - Anfänger-Themen 1
D Mit Objekten rechnen, Textfield, JavaFX, Noob Java Basics - Anfänger-Themen 8
N enum Attribut von Objekten einer Hashmap ausgeben Java Basics - Anfänger-Themen 6
A Auf Eigenschaften von Objekten anderer Klassen zugreifen Java Basics - Anfänger-Themen 5
G Problem beim Speichern von Objekten in einer Datei Java Basics - Anfänger-Themen 7
N Klassen Rekursion mit Feldern von Objekten Java Basics - Anfänger-Themen 14
D Operatoren Mit Objekten rechnen Java Basics - Anfänger-Themen 7
E Datentypen Einfügen von Objekten in eine Map Java Basics - Anfänger-Themen 2
S Pane nach speziellen Child Objekten durchsuchen Java Basics - Anfänger-Themen 3
B ID von unterschiedlichen Objekten bekommen? Java Basics - Anfänger-Themen 2
T Daten von Objekten speichern Java Basics - Anfänger-Themen 7
PaperHat Programmieraufgabe - Objekte in Objekten Java Basics - Anfänger-Themen 2
L Rechnen mit Objekten Java Basics - Anfänger-Themen 3
S werte von objekten in schleife verändern Java Basics - Anfänger-Themen 14
D Zusammenarbeit von Objekten Java Basics - Anfänger-Themen 1
Y Begrenzte Anzahl an Objekten? Java Basics - Anfänger-Themen 12
Kornblume Nulltyp eines Arrays von Objekten? Java Basics - Anfänger-Themen 10
A Frage zur Aufgabe Uhrzeit einstellen mit Objekten Java Basics - Anfänger-Themen 18
M Generische Liste aus Comparable-Objekten Java Basics - Anfänger-Themen 6
G Klassen Call by Value auch bei Objekten? Java Basics - Anfänger-Themen 2
R Verständnisfrage zu Objekten u. Übergabeparameter Java Basics - Anfänger-Themen 8
arjoopy Kapselung Übergabe von Objekten aus ArrayList Java Basics - Anfänger-Themen 4
schoenosrockos Unterschied zwischen Objekten und vererbungen Java Basics - Anfänger-Themen 1
M Speichern von Objekten - Verfügbarkeit bei erneutem Aufruf Java Basics - Anfänger-Themen 3
R Methoden Methode ruft Methode auf, ruft Methode auf (mit Objekten) Java Basics - Anfänger-Themen 4
S Serialisierung: Laden von Objekten - Risiken? Java Basics - Anfänger-Themen 4
Shizmo PriorityQueue mit Objekten Java Basics - Anfänger-Themen 10
E Instanzieren von Objekten verkürzen Java Basics - Anfänger-Themen 1
F Interaktion von Objekten verschiedener Klassen... Java Basics - Anfänger-Themen 13
D Effiziente Verwaltung der Objekten und Unterobjekten Java Basics - Anfänger-Themen 18
N Dauer zwischen zwei LocalDateTime Objekten berechnen? Java Basics - Anfänger-Themen 4
L Subklasse von ArrayList nur mit bestimmten Objekten füllen Java Basics - Anfänger-Themen 1
E Erste Schritte Gute Erklärung zu Objekten / Klassen / Methoden / Sichtbarkeiten auf Deutsch Java Basics - Anfänger-Themen 3
S Problem mit augabe von Objekten Java Basics - Anfänger-Themen 3
T Junit Mockito: Instanz von inneren erzeugten Objekten Java Basics - Anfänger-Themen 4
P Zugriff auf Felder in ArrayList Objekten Java Basics - Anfänger-Themen 2
W Was passiert mit Objekten die nicht in Objektvariablen initialisiert werden ? Java Basics - Anfänger-Themen 3
D Zugriff auf von einer anderen Klasse erstellten Objekten Java Basics - Anfänger-Themen 5
S Liste mit Objekten und Listen Java Basics - Anfänger-Themen 9
Y Gleiche Arrays aus einem Array mit Objekten Java Basics - Anfänger-Themen 5
K Min eines Arrays mit Objekten Java Basics - Anfänger-Themen 6
M Array mit Objekten lässt sich nicht auslesen Java Basics - Anfänger-Themen 10
T Statische Arrays von Objekten Java Basics - Anfänger-Themen 2
J Methoden Einfügen von Objekten nach Alphabet in ArrayList funktioniert nicht Java Basics - Anfänger-Themen 2
B Erste Schritte Anzeige von Graphics Objekten einzeln aktualisieren Java Basics - Anfänger-Themen 1
TheSorm Koordinaten von gedrehten Objekten Java Basics - Anfänger-Themen 4
D Bestimmte Werte von Objekten aus einer ArrayList in eine andere ArrayList kopieren Java Basics - Anfänger-Themen 14
B Aliasing bei null-Objekten Java Basics - Anfänger-Themen 3
O Java Erzeugung von neuen Objekten Java Basics - Anfänger-Themen 1
J Verständnisfragen zu dem Thema Objekten Java Basics - Anfänger-Themen 7
J Array von Objekten, wie schauts im Heap / Stack aus ? Java Basics - Anfänger-Themen 7
O Größe von Objekten Java Basics - Anfänger-Themen 5
Y Variable Menge von Objekten erzeugen und mit ihren Attributen rechnen Java Basics - Anfänger-Themen 7
kaoZ Best Practice Verständnisfrage Listener bei lokalen Objekten Java Basics - Anfänger-Themen 8
F Umgang mit referenzierten Objekten bei ArrayList Java Basics - Anfänger-Themen 1
M Löschen von Objekten während Iteration über Liste Java Basics - Anfänger-Themen 9
E Array von Objekten einer selbst definierten Klasse mit eindeutigem Namen Java Basics - Anfänger-Themen 2
C For schleife mit Array und Objekten Java Basics - Anfänger-Themen 17
kaoZ Input/Output Android : Deserialisieren von mehreren Objekten in einer Datei Java Basics - Anfänger-Themen 0
U Übergabe von Objekten Java Basics - Anfänger-Themen 0
C Werte aus zwei Objekten miteinander vergleichen Java Basics - Anfänger-Themen 3
Joew0815 Interface JSON Objekte aus Java Objekten erzeugen Java Basics - Anfänger-Themen 9
D Sortieren von int Werten von Objekten in einer LinkedList, kann nicht auf int Werte zugreifen Java Basics - Anfänger-Themen 3
E Erste Schritte Sortieren von Objekten in doppelt-verlinkter Liste Java Basics - Anfänger-Themen 9
R addition von 2 Array Objekten Java Basics - Anfänger-Themen 5
V Grundlegendes Zu Objekten/Klassen Java Basics - Anfänger-Themen 10
S Problem bei Kollision zwischen Array-objekten! Java Basics - Anfänger-Themen 2
C Probleme mit neuen Objekten Java Basics - Anfänger-Themen 3
S Erste Schritte Bluej Automatisches Einfügen von Objekten Java Basics - Anfänger-Themen 4
D ID von Objekten in Arraylist Java Basics - Anfänger-Themen 3
B Datentypen Inhalt von Objekten miteinander vergleichen Java Basics - Anfänger-Themen 2
R Erste Schritte Objekte mit anderen Objekten als Inhalt Java Basics - Anfänger-Themen 4
V Frage zum Löschen von Objekten Java Basics - Anfänger-Themen 2
C ArrayList mit Objekten Java Basics - Anfänger-Themen 4
P Mindestangaben beim anlegen von Objekten Java Basics - Anfänger-Themen 4
H Array von Klassen Objekten Java Basics - Anfänger-Themen 6
J Array mit Objekten sortieren Java Basics - Anfänger-Themen 11
J Bilder von Objekten Java Basics - Anfänger-Themen 3
G Scrollbares Fenster bei mehr als 5 Objekten Java Basics - Anfänger-Themen 4
B Methoden auf Objekten Java Basics - Anfänger-Themen 12
D OOP Objekt in mehreren Objekten Java Basics - Anfänger-Themen 3
J Datentypen List - gleiche Einträge bei neuen Objekten Java Basics - Anfänger-Themen 31
R Verschieben eines Arrays aus Objekten Java Basics - Anfänger-Themen 16
M Frage zum Casten von Objekten Java Basics - Anfänger-Themen 5
R Polymorphie Array mit Objekten Java Basics - Anfänger-Themen 9

Ähnliche Java Themen

Neue Themen


Oben