dispose

  • Themenstarter Themenstarter Michael038945
  • Beginndatum Beginndatum
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
 
Und noch eine Bitte von mir: Antwortet ohne vorher zu googeln. Denn googeln kann ich auch.
 
Eine Null Zuweisung ist nicht nötig. Wenn es keine Referenz auf ein Object gibt wird es von GC bei nächsten durchlauf freigegeben.
 
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:
 
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....
 
gefragt war echte Praxiserfahrung, keine theoretischen Lehrbuchantworten (google)
 
Hallo
ich bin nur für die frage verantwortlich die erste antwort het einer meinen Namen missbraucht (Hilfe)
:meld:
 
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
 
kein Grund sich anzumelden, was? 😉

sorry für Spam zwischendurch
 
Manhcmal ja, manchmal nein, Antworten findest du in Google 😉

Man kann und soll den GC nicht manuell anstossen.
 
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.
 
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ß
 
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?
 
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
 
Du hast vielleicht irgendwo ein Memory Leak, vielleicht hilft dir ein Profiler (TPTP?) bei der Suche.

Welchen JDBC Treiber verwendest du denn?
 
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
 
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.
 
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.

Neue Themen


Zurück
Oben