dispose

Status
Nicht offen für weitere Antworten.
M

Michael038945

Gast
Hallo
ich habe mal eine Frage wenn ich ein Programm mit mehreren Fenster habe und dann ein Fenster mit dispose schliesse. werden dann die hashmaps, Strings int s usw... für den Garbage Collector freigegeben oder muß ich das voher mit einer null zuweisung selber frei geben ?

danke Michael
 
M

Michael038945

Gast
Und noch eine Bitte von mir: Antwortet ohne vorher zu googeln. Denn googeln kann ich auch.
 

Zed

Bekanntes Mitglied
Eine Null Zuweisung ist nicht nötig. Wenn es keine Referenz auf ein Object gibt wird es von GC bei nächsten durchlauf freigegeben.
 

Wildcard

Top Contributor
Zed hat gesagt.:
Eine Null Zuweisung ist nicht nötig. Wenn es keine Referenz auf ein Object gibt wird es von GC bei nächsten durchlauf freigegeben.
Fast.
Wenn es keine starke Referenz auf ein Object gibt, wird es vom GC beim übernächsten Durchlauf freigegeben.

PS:
Antwortet ohne vorher zu googeln. Denn googeln kann ich auch.
Ist das ein Quiz und googlen wäre nicht fair, oder was willst du uns damit sagen? :roll:
 

Grasstampfer

Gesperrter Benutzer
Michael038945 hat gesagt.:
Und noch eine Bitte von mir: Antwortet ohne vorher zu googeln. Denn googeln kann ich auch.
hae - wie wir zu der loesung DEINES problems kommen wird uns nun vorgeschrieben ?
und wenn du googlen kannst, meinst du nicht die loesung dann auch zu finden...

komische aussage....
 
S

SlaterB

Gast
gefragt war echte Praxiserfahrung, keine theoretischen Lehrbuchantworten (google)
 
M

Michael038945

Gast
Hallo
ich bin nur für die frage verantwortlich die erste antwort het einer meinen Namen missbraucht (Hilfe)
:meld:
 
M

Michael038945

Gast
dann die nächste dumme Frage,

gehe ich recht in der annahme das ich den GC nicht selber anstossen kann denn wenn ich in meinenTask-Manager
schaue dann tut's sich nicht ausser das mein Programm den speicher immer weiter hoch geht aber nicht mehr nach unten ??

System.gc();

uder liege ich da falsch?

gruß Michael
 
S

SlaterB

Gast
kein Grund sich anzumelden, was? ;)

sorry für Spam zwischendurch
 
M

maki

Gast
Manhcmal ja, manchmal nein, Antworten findest du in Google ;)

Man kann und soll den GC nicht manuell anstossen.
 

Wildcard

Top Contributor
Man kann den GC manuell anstoßen, aber es bringt nichts. Du musst unterscheiden zwischen dem Speicher den der Java Prozess beansprucht und den Teil des Speichers der tatsächlich mit Heap belegt wird.
Nur weil du drei Objekte vom Heap löschst, wird deshalb nicht der Prozessspeicher kleiner.
 
M

Michael038945

Gast
Man kann den GC manuell anstoßen, aber es bringt nichts. Du musst unterscheiden zwischen dem Speicher den der Java Prozess beansprucht und den Teil des Speichers der tatsächlich mit Heap belegt wird.
Nur weil du drei Objekte vom Heap löschst, wird deshalb nicht der Prozessspeicher kleiner.

und wie kann man das einstellen das sich das auswirkt.

denn ich glaube mit Xmx100m kann ich der VM sagen wieviel speicher für die ist.
aber heißt das auch das der speicher auch ausgereitzt wird bevor der gc zuschlägt.
wenn das so ist dann kämme auch kein Heap fehler weil dann vorher der Heap freigemacht werden muß(gc)

oder ???

gruß
 

Wildcard

Top Contributor
Michael038945 hat gesagt.:
und wie kann man das einstellen das sich das auswirkt.
Manche VMs haben eventuell einige nicht-standard Startup Parameter die die Aggressivität der Speicherverwaltung steuert, aber davon abgesehen, nicht.

denn ich glaube mit Xmx100m kann ich der VM sagen wieviel speicher für die ist.
Xmx gibt die maximale Heap Größe an.
aber heißt das auch das der speicher auch ausgereitzt wird bevor der gc zuschlägt.
nicht unbedingt, Leerlaufphasen werden ebenfalls zum Aufräumen verwendet.
wenn das so ist dann kämme auch kein Heap fehler weil dann vorher der Heap freigemacht werden muß(gc)
Welche Kämme? Was ist denn nun dein konkretes Problem, das du lösen möchtest?
 
M

Michael038945

Gast
also wie schon
erwähnt habe ich ein Programm mit mehreren Fenstern(JFrame) und JDialoge

das programm läuft auch richtig gut (Waren-wirtschaft für ein kleines Geschäft(8 Leute) mit mir)

ich habe das selbst geschrieben auf unserem Server ist eine SQL-Datenbank(SQL-Server 2005)

und es wird den ganzen tag daten eingegeben und so nach einer gewissen zeit werden die daten suche und das eingeben immer langsamer und wenn man dan den Task-Manager aufmacht sieht man das er von urspr. 60.345K
dann 496.560 K hoch gegangen ist.
Obwohl die Fenster und Dialoge die nicht mehr benötigt werden mit dispose geschlossen wurden (mir "EXIT_ON_CLOSE") kann ich mit under Fenster ja nicht arbeiten weil dann das ganze Programm geschlossen wird.

das ich das so nicht lassen kann ist doch klar

gruß michael
 
M

maki

Gast
Du hast vielleicht irgendwo ein Memory Leak, vielleicht hilft dir ein Profiler (TPTP?) bei der Suche.

Welchen JDBC Treiber verwendest du denn?
 
G

Guest

Gast
hallo


wie was wo
" Memory Leak" ????

und in dem Netbeans ist ein Profiler drin den habe ich schon mal gestartet aber so richtig was mit anfangen kann ich nicht damit.


ich benutze den sqljdbc.jar

gruß Michael
 
M

maki

Gast
wie was wo
" Memory Leak" ????
Nun, so nennt sich das wenn Speicher nicht wieder freigegeben wird obwohl er das sollte.

ich benutze den sqljdbc.jar
Würde dir da jTDS nahelegen, ist um einiges besser als der Schrott von M$, JDBC Treiber können übrigens auch Memory Leaks haben,a lleine deswegen würde ich den jTDS mal probieren, sollte schnell erledigt sein.
 
W

WilliBaer

Gast
hallo
ich habe genau das gleiche problem nur ich habe eine Mysql-datenbank und den neusten mysql-connector-java-5.1.6-bin.jar
ist der treiber gut oder gibt es einen besseren?

gruß WilliBaer
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben