Kein freier Speicher-trotz Löschen!

    Kein freier Speicher-trotz Löschen!

    Hallo,

    seit einigen Tagen habe ich das Problem, dass ich einfach keinen freien Speicerplatz mehr bekomme, egal wie viel ich von C lösche.
    Habe einen älteren Acer Laptop mit einer geteilten Festplatte (C und D), beide mit je ca. 17 GB.

    Wie gesagt, seit einiger Zeit habe ich auf C dauerhaft nurnoch ca. zwischen 600 und 300 MB frei, obwohl ich schon alle möglichen Programme gelöscht und deinstalliert habe, habe auch den Revo Uninstaller verwendet, hab mir dann nochmal den CCleander geladen und benutzt, defragmentiert habe ich auch schon... alles ohne Erfolg. Ständig bekomme ich die Meldung "nicht genügen Speicherplatz auf C"...

    Was ist das los, hat jemand eine Ahnung?!

    Danke schonmal, die Mieze
    Ha okay, hab in einem anderen ähnlichen Beitrag den Hinweis gefunden "TuneUp Utilities" zu laden, hab das mal laufen lassen und wurde auch fündig. Es war der Temp-Ordner, den ich dachte schon mit CClean gelöscht zu haben... da war wohl einfach nur das eine Programm besser als das andere ;)

    Seltsam ist trotzdem, wieso nach dem Deinstallieren sämtlicher Progr. der Speicher nicht größer wurde, wenn es doch am Temp lag.. hmm wie auch immer, hab jetzt wieder Platz und Danke trotzdem.

    Mieze
    Hallo Mieze-Lemon,

    hast du manchmal auch Java-Programme, die bei dir laufen? Java-Programme "allokieren" Speicherplatz, d.h., der Garbage-Collector gibt Speicher frei, sobald dieser nicht mehr gebraucht wird. Wenn du eine Datei von Java löschst, dann wird dieser trotzdem im Javaspeicher (Heapspace) gehalten. Der Garbage-Collector hat den Vorteil, dass sich der Programmierer nicht mehr um die Freigabe des Speichers kümmern muss. Nachteilig ist, dass er alleine bestimmt, ob dieser noch gebraucht wird. So können logfiles des Programmes noch im Speicher sein usw.

    Du solltest nach dem Löschen also auch mal den Rechner komplett neustarten. Dann wäre diese Möglichkeit ausgeschlossen.

    Viele Grüße,
    Adi
    Mag sein, dass ich mich da irre, aber als routinierter Programmierer würde ich sagen, dass das Allokieren von Speicher in Java sich nur auf Arbeitsspeicher bezieht. Auf die Festplatte wird das erst ausgelagert, wenn
    1. Der Arbeitsspeicher erschöpft ist
    2. Die Auslagerungsdatei aktiviert wurde
    Wenn es so weit kommt, dann wird auch Speicher auf der Festplatte "allokiert". Jedoch kümmert sich Windows nach dem Herunterfahren um das Löschen dieser Auslagerungsdatei und keine Java-GarbageCollection. Es wäre doch nur unlogisch, wenn sich die GarbageCollection auch um Dateien kümmern würde, die vom Programm angelegt wurden, denn dann würde jede erstellte Datei(Savegame, etc) nach dem Schließen des Programms sofort verschwinden, und das würde den Java-Programmieren das Leben nur unnötig erschweren.
    Jedes Programm muss sich selbst darum kümmern, auf der Festplatte abgelegte Dateien zu löschen, oder eben nicht ;)
    Es gibt zwei Dinge, die unendlich sind. Das Universum und die menschliche Dummheit. Aber bei dem Universum bin ich mir noch nicht sicher...
    Albert Einstein
    Hallo soley,

    vielen Dank für deine Nachricht. Irgendwie hast du dich ja selbst korrigiert. Wenn der Arbeitsspeicher voll ist, nutzt Java die Auslagerungsdatei auf der Festplatte. Und die Anwendung schreibt Daten auf diese Platte und verwaltet sie selbst. Als Programmierer solltest du darauf achten, dass du sauber programmierst und die Dateien löschst oder ablegst oder was auch immer du damit machen willst. Dies ist ja abhängig, wofür diese gut sind. (Gamesave, logging-Files, tmp-Files usw.). Leider passiert dies nicht immer.
    Diese Speicherbereiche werden aber auch nur von Windows beendet, wenn du überhaupt Windows beendest. Dies tun aber nicht alle Nutzer, so gibt es u.a. den Zustand des Ruhemodus. Dort wird eben NICHT der Java-Heap-Space gelöscht. (Ich habe früher auch früher gerne in den Modus geschaltet, um meine Startzeiten zu minimieren. )
    Es gibt ja aber auch nicht nur Desktop-Anwendungen und es kann passieren, dass diese auch auf einem Server laufen. Wer will schon gerne z.B. ein Forum neustarten, damit "Windows den Speicher aufräumt". Das nur nebenbei.

    Garbage Collector:
    Auszug aus Java ist auch eine Insel: "Der Garbage-Collector ist ein nebenläufiger Thread im Hintergrund, der nicht referenzierte Objekte markiert und von Zeit zu Zeit entfernt."
    So ein Objekt ist z.B. auch das Objekt java.io.File . Sofern dieses Objekt also referenziert ist, wird es nicht vom Garbage Collector entfernt. Das darf der ja auch nicht, weil er nicht weiss, was damit passieren soll. Und da, wie du sagst, das Programm sich um seine Dateien kümmern muss, sollte es dies auch tun. Allerdings macht es das nicht immer. Und dies ist Sache des Programmierers, welcher es ab und zu mal übersieht.

    Ich habe mich auch desöfteren mit solchen Problemen auseinandersetzen müssen und mich früher gewundert. So habe ich z.B.über einen cronjob loggingfiles und einige temp-files einer Anwendung löschen lassen, damit der Speicherplatz nicht vollläuft. Diese Dateien wurden zwar vom Betriebssystem "gelöscht", der Speicher aber nicht freigegeben. Der freie Speicher wurde immer kleiner, obwohl das Skript einwandfrei lief. Ich konnte mit Linuxmitteln die gelöschten files mit deren Speicherbedarf sehen und musste feststellen, dass nur ein Restart den Festplattenplatz freigibt. So ähnlich sollte Windows eigentlich auch arbeiten, da Java ja plattformunabhängig ist.

    Wie du schon sagst, sollte das Programm selbst seine Dateien löschen. Wenn der Speicher aber nicht reicht und die Daten nicht gelöscht werden können, weil es nicht konfigurierbar ist, wann dies geschehen soll, dann muss man als Anwender entweder manuell löschen oder die Anwendung neustarten. In unten genannten Fall wurde manuell gelöscht. Deshalb hatte ich noch den Neustart erwägt, um eventuellen Speicherplatz freigeben zu lassen.

    Viele Grüße,
    Adi