# Objekte sofort löschen



## pornopizza (4. Nov 2007)

Moin,

Wie kann ich Objekte löschen? Ich möchte nicht auf den garbage collector warten, ich würde sie gerne direkt löschen. geht das irgendwie? Ansonsten habe ich ständig 500-1000 objekte auf einmal rumfliegen, die keiner mehr braucht.
Kann man da manuell nachhelfen? Habe bis jetzt nichts gefunden.
finalize() scheint ja nicht als Destruktor zu fungieren sondern eher als Event Listener oder sowas.

Danke
porno


----------



## Guest (4. Nov 2007)

Jajn. Du kannst System.gc() aufrufen, was aber keine Garantie dafür ist, dass der GC tatsächlich sofort aufräumt.
Wenn du immer wieder eine grosse Anzahl von Objekten erzeugst und verwirfst, kannst du über die Wiederverwendung
der Objekte nachdenken. Stichwort: Object pool. (z.B. damit: http://commons.apache.org/pool/)

Erste Frage ist aber, warum dich das ganze stört? Wenn rein aus "philosophischen" Gründen und nicht aus Speichermangel,
dann lass den Sch...


----------



## pornopizza (4. Nov 2007)

wenn ich System.gc() aufrufe verballer ich ja unnötig resourcen. Solange wie der dann braucht ist das auch nicht mehr schön.

Ne Speichermangel, kein philosophisches Problem. Werd mich hüten hier nen Glaubenskrieg anzuzetteln^^

Deine Seite kann ich ned öffnen, werd mich aber mal schlau machen. Aber ich glaub das macht die sache unnötig kompliziert, oder?


----------



## Jango (4. Nov 2007)

Anonymous hat gesagt.:
			
		

> Jajn. Du kannst System.gc() aufrufen, was aber keine Garantie dafür ist, dass der GC tatsächlich sofort aufräumt.


Richtig! Du kannst dies machen, oder auch sein lassen. Einen direkten Aufruf des Destruktors gibt es in Java nicht. 
Wenn man sowas wünscht, schreibt man seine Programme beispielsweise in C#. Da kann man die Schnittstelle _IDisposable_ implementieren und mit der Methode_ Dispose()_ den Destruktor aufrufen. Und der würde dann sofort seine Arbeit machen. 
In Java verlässt man sich stur auf den _GC_ - der ja eigentlich für die meisten Dinge ausreicht...


----------



## Guest (4. Nov 2007)

pornopizza hat gesagt.:
			
		

> wenn ich System.gc() aufrufe verballer ich ja unnötig resourcen. Solange wie der dann braucht ist das auch nicht mehr schön.


Einer der Gründe, warum man es nicht verwenden sollte.



			
				pornopizza hat gesagt.:
			
		

> Deine Seite kann ich ned öffnen, werd mich aber mal schlau machen. Aber ich glaub das macht die sache unnötig kompliziert, oder?


Die schliessende Klammer ist da irgendwie noch reingerutscht.
Siehe: http://commons.apache.org/pool/

Du hast verschiedene Möglichkeiten, je nach dem, was das für Daten sind, inwiefern sie so massenhaft benötigt werden
und wie sie präsentiert werden. Es gibt viele Möglichkeiten die Datenmenge zu reduzieren, wenn man den Anwendungsfall
geringfügig ändert.
z.B. Man hat ein Formular, in dem u.a. eine Person ausgewählt werden kann/muss. Statt die Daten direkt alle
in einer ComboBox etc. anzuzeigen, kann man ein zusätzliches Dialogfenster einblenden und darin eine
Filterung ermöglichen. Folge: Beim Start des Formulars werden keine unnötigen Daten geladen, sondern
erst bei Bedarf und das auch noch gefiltert.


----------



## Jango (4. Nov 2007)

Anonymous hat gesagt.:
			
		

> Statt die Daten direkt alle
> in einer ComboBox etc. anzuzeigen, kann man ein zusätzliches Dialogfenster einblenden und darin eine
> Filterung ermöglichen. Folge: Beim Start des Formulars werden keine unnötigen Daten geladen, sondern
> erst bei Bedarf und das auch noch gefiltert.


Man kann die Daten auch in einer Datei, einer Datenbank, oder in Onkel Toms Hütte aufbewahren - das ändert nichts an der Tatsache, dass man sie nicht dynamisch verwalten kann (löschen, wenn nicht mehr gebraucht).  :wink:


----------



## Der Müde Joe (4. Nov 2007)

PhantomReference + ReferenceQueue ?


----------



## Guest (4. Nov 2007)

Jango hat gesagt.:
			
		

> Anonymous hat gesagt.:
> 
> 
> 
> ...


 :bahnhof:


----------



## Jango (4. Nov 2007)

Anonymous hat gesagt.:
			
		

> :bahnhof:


Der OP möchte Objekte verwalten - löschen, wenns sein muss. Und du redest von Dialogfenstern! Was hast du erwartet?


----------



## Guest (4. Nov 2007)

Jango hat gesagt.:
			
		

> Anonymous hat gesagt.:
> 
> 
> 
> ...


Wie kommst du darauf? Was er letztendlich vor hat, weiss keiner.

Dir ist aber klar, dass es nur ein Beispiel ist, wie man unnötiges Laden von Daten vermeiden kann?
Ich nehme an, den Satz hast du überlesen.





> Du hast verschiedene Möglichkeiten, je nach dem, was das für Daten sind, inwiefern sie so massenhaft benötigt werden
> und wie sie präsentiert werden.


----------



## Jango (4. Nov 2007)

Anonymous hat gesagt.:
			
		

> Wie kommst du darauf? Was er letztendlich vor hat, weiss keiner.


Aha...


			
				pornopizza hat gesagt.:
			
		

> Wie kann ich Objekte löschen?


Soso, stimmt - man weiß es nicht genau... :roll:


----------



## Guest (4. Nov 2007)

Jango hat gesagt.:
			
		

> Anonymous hat gesagt.:
> 
> 
> 
> ...


Dann ist deine Glaskugel besser als meine.
Was heisst für dich "Objekte löschen", wenn gleichzeitig der GC genannt wird? Wie du auf Datenbanken kommst, ist mir
ein Rätsel. Für mich klingt es nach "Mir geht der Speicher aus. Wie kann ich es vermeiden Müll im Speicher zu halten".


----------



## Jango (4. Nov 2007)

Anonymous hat gesagt.:
			
		

> Für mich klingt es nach "Mir geht der Speicher aus. Wie kann ich es vermeiden Müll im Speicher zu halten".


Und da der GC nur Objekte aus dem Speicher entfernt, ist es wirklich Hellseherei, auf Objekte zu kommen. Möglicherweise hilft dir das Lesen von dem Beitrag, auf den du antwortest, weiter.
Außerdem wird der Speicher nie voll. Soweit ist sogar der GC von Java, dass er vorzeitig aufgerufen wird.


----------

