[ruby-de] GC.start tut wirklich nichts!

Robert Klemme shortcutter at googlemail.com
Do Jun 29 07:25:06 JST 2017


2017-06-28 8:58 GMT+02:00 Die Optimisten <inform at die-optimisten.net>:

> nur leider gibt Ruby auch intern den Speicher   nach der 1.Hälfte ( "2x
> untereinander") nicht frei,
> denn am Schluß wird der doppelte Speicher verbraucht!

Speicher wird nicht verbraucht - höchstens genutzt. ;-) (Und dafür ist
er ja auch da. Das wird manchmal vergessen.)

> Der Programmierer weiß (hoffentlich besser als der GC) wann der Speicher
> freigegeben werden sollte, (und vielleicht für andere Prozesse benötigt
> wird). Daher sollte der GC auch den Prozeß-Speicher freigeben (und dem PC
> dann das Swappen ersparen)

Das ist eine einigermaßen naive Betrachtung von Speicherverwaltung und
GC. Beobachtest Du Swapping auf Deinem System? Hast Du ein
Performanceproblem? Zu 98% nicht - das hättest Du sonst schon gemerkt.

> [kann ich unkompliziert abfragen, ob bestimmte
> Vars im Ram oder Swap liegen?]

Nein, das ist ja der Witz von Virtuellem Speicher, dass der Prozess
sich nicht darum kümmert und insbesondere keine Vorstellung von
Speicherseiten hat und wo die gerade liegen.

> Ich denke ein free ist im Vergleich zur Arbeit vom  GC eine Kleinigkeit. Das
> Betriebssystem entscheidet dann (besser!), was geswappt wird (als wenn der
> Ruby viel ungenutztes Ram nicht freigibt)

Lies mal die Artikel zu den Kosten von Speicherreservierung und GC in
Java, die es im Netz gibt - die sind viel kleiner, als sie es mal
waren und als Du hier anzunehmen scheinst. Es ist auch so, dass
Speicherprobleme in Sprachen wie C und C++ so ein häufiges (immer
noch!) Problem sind, dass es ganze Werkzeuge gibt, die nur dazu
dienen, solche Programmierfehler zu finden. Bei einigermaßen
nicht-trivialen Programmen ist die Pflege der Speicherverwaltung
unheimlich aufwändig. Eigentlich sollte man das im 21. Jahrhundert
nicht mehr machen - Entwicklerproduktivität ist viel wichtiger als
drei CPU-Zyklen zu sparen, auch wenn es immer noch einige gibt, die
das anders sehen. (Und natürlich gibt es ein paar Ausnahmen von
Algorithmen, die wirklich schnell sein müssen.)

Du theoretisierst wieder herum...

Ciao

robert

-- 
[guy, jim, charlie].each {|him| remember.him do |as, often| as.you_can
- without end}
http://blog.rubybestpractices.com/


Mehr Informationen über die Mailingliste ruby-de