Speicher aufräumen



  • Hi,

    jo, aber die Blöcke fragmentieren doch nicht, oder?

    ChrisM



  • @Marc++us:

    Ich mach mich mal schlau. AllocMem ...



  • SetProcessWorkingSetSize



  • BOOL SetProcessWorkingSetSize(
        HANDLE hProcess,	// open handle to the process of interest
        DWORD dwMinimumWorkingSetSize,	// specifies minimum working set size
        DWORD dwMaximumWorkingSetSize 	// specifies maximum working set size
    )
    

    The working set of the specified process can be emptied by specifying the value 0xffffffff for both the minimum and maximum working set sizes.

    Bedeutet das jetzt, wenn ich z.B.

    SetProcessWorkingSetSize(hProcess, 0xffffffff, 0xffffffff);
    

    ausführe, dann werden alle zum Process gehörenden Objekte gekillt?



  • Toll dass ich erst die Suchfunktion bemühen mußte um rauszufinden, wohin mein Beitrag verschoben wurde ...



  • was für objekte meinst du? 🙄 🙄



  • Schön dass sich noch jemand an den 64'er erinnert 🙂

    Ich versuchs mal kurz:
    Eine vom OS unterstützte "garbage collection" gibt es nicht
    und kann es auch nicht geben da das System nicht wissen kann
    welche Variablen oder meinetwegen auch Objecte noch vom jeweiligen
    Prozess benötigt werden (zum 64'er gleich mehr).
    Alle auf den Intel aufbauendeN 32bit Betriebssysteme verwalten
    den Speicher in 4kb großen Blöcken die i.A. an beliebige Stellen
    des physikalischen Speichers oder auf Festplatte etc. verschoben
    werden können.
    Anwendungsprogramme 'sehen' die einzelnen Blöcke als durchgehenden
    Adressraum
    Das was als speicherdefragmentieren bekannt ist ist nix weiteres
    als das der 'Defragmetierer' versucht möglichst allen physikalisch
    vorhanden Speicher für sich zu reservieren um damit das OS dazu zu
    bringen die anderen Prozesse auf Festplatte auzulagern (war auch
    vor ein paar Tagen Thema in einem Thread)achja gibt danach den Speicher
    natürlich wieder frei 😉
    Mit dem 'SetProcessWorkingSetSize' Beispiel -aufgerufen für jeden Prozess-
    wird das gleiche erreicht. (nein es werden keine 'Objekte' gekillt nur
    ausgelagert)

    Aber wirklich tot ist die "Garbage collection" trotzdem nicht:
    Es gibt genügend Programierumgebungen (wie es das 64'er basic
    war) die sich darum bemühen den angeforderten Speicher effizient
    zu benutzen(generell wohl alle interpreter Sprachen, afaik Java und
    Klassen in c++ - implementierungs abhängig)

    Hoffe das war einigermaßen verständlich (sonderfälle wie höhere
    Privilegstufen, Real-mode und gemeinsame Adressräume hab ich mal
    aussen vor gelassen)

    Ich weis ja nicht wie gut du dich mit dem 64'er auskanntest, aber
    ich hätt da noch 'ne nette zusammenfassung:
    OS - 64'er: e000-ffff / win / linux etc. : keine garbage collection
    Interpreter - 64'er:a000-bfff / jscript / perl etc. : garbage collection



  • Ich bin nur deswegen darauf gekommen, weil bei Java so eine GC existiert. Ich nahm also an, dass das betriebsystemseitig erledigt wird, und nicht von der Laufzeitumgebung.



  • Hm... das ist aber genau genommen auch richtig, denn die Java VM ist eine Art BETRIEBSSYSTEM! Demnach ist Deine Erwartung durchaus richtig... aber Du hast im falschen Betriebssystem gesucht. 😉



  • ChrisM schrieb:

    jo, aber die Blöcke fragmentieren doch nicht, oder?

    Sollten sie eigentlich nicht, tun sie aber doch. 😉
    Es gibt nämlich nicht nur die gewöhnlichen 4KB-Pages, sondern auch sogenannte Superpages, die sind 4MB groß und müssen auch so am Stück im physischen Speicher liegen. Und dafür lohnt sich das defragmentieren.

    MfG Jester


Anmelden zum Antworten