Garbage collector

Status
Nicht offen für weitere Antworten.

Urs

Mitglied
Hallo
Wenn ich mit der Methode freeMemory() mein Memory ansehen, wird der Speicher immer weniger, bis dann irgend wann mal der GC gestartet wird. Nun meine Frage: Muss man den Garbage Collector (GC) selber ausführen oder wird das in jedem Fall vom JM gemacht? Ist es besser wenn man die Methode gc() manuell aufruft? Wenn nicht, für was ist die Methode gc() nötig?
danke Urs
 

L-ectron-X

Gesperrter Benutzer
Die JVM kümmert sich alleine um die Entsorgung nicht mehr referenzierter Objekte aus dem Heap.
Die statische Methode gc() aus System kann explizit aufgerufen werden, um die Garbage Collection anzufordern.
Ich habe von Situationen gehört, in denen dies aus Performance-Gründen gemacht wurde, um eine Operation, in der viele Objekte angelegt wurden abzuschließen.
 
B

Beni

Gast
Der GarbageCollector ruft sich automatisch auf.

System.gc ist für die wenigen Fälle da, wo man wirklich keinen Unterbruch möchte, nur weil der GC ein paar Millisekunden benötigt.

Du musst dich nicht darum kümmern. Das einzige wofür du sorgen musst, ist, dass du ab und zu Referenzen wieder auf null setzt, Listeners entfernst, ... , damit die Objekte dahinter überhaupt vom GC abgeräumt werden können.
 

Sky

Top Contributor
Außerdem ist es auch so, dass System#gc nicht zwingend dazu führt, dass der GC sofort aufgerufen wird.
 
P

perdian

Gast
sky80 hat gesagt.:
Außerdem ist es auch so, dass System#gc nicht zwingend dazu führt, dass der GC sofort aufgerufen wird.
Es ist sogar noch schlimmer :) Es kann sogar sein, dass die Virtual Machine den Aufruf komplett ignoriert, denn man kann der VM nur die "Bitte" senden, dochmal einen GC Lauf zu starten - auf sich darauf verlassen kann man nicht.
 

meez

Top Contributor
perdian hat gesagt.:
Es ist sogar noch schlimmer :) Es kann sogar sein, dass die Virtual Machine den Aufruf komplett ignoriert, denn man kann der VM nur die "Bitte" senden, dochmal einen GC Lauf zu starten - auf sich darauf verlassen kann man nicht.

Ich denke nicht dass die VM den Aufruf komplett ignoriert...Er wird einfach ausgeführt, wenn die VM dazu Zeit und Bock hat...Wann das ist, kann man jedoch nicht sagen...


btw. Runtime.getRuntime().gc(); ist noch ein wenig schneller, da man eine Methode weniger aufrufen muss ;)
 
P

perdian

Gast
meez hat gesagt.:
Ich denke nicht dass die VM den Aufruf komplett ignoriert...
Wenn es eine vernünftige Implementierung ist, dann sollte sie das nicht tun :)

Aber laut Doku:
Java API 5.0 hat gesagt.:
Calling the gc method suggests that the Java Virtual Machine expend effort toward recycling unused objects in order to make the memory they currently occupy available for quick reuse.
Von müssen ist da keine Rede.
 

meez

Top Contributor
Das heisst wohl eher, dass er ihn wohl irgendwann ausführen wird, aber nicht sicher ist, dass auch etwas dabei gelöscht wird...
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben