GCCollect und seine funktion?

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Neue Antwort erstellen

Mathias-Kwiatkowski

Betreff: GCCollect und seine funktion?

BeitragFr, Nov 24, 2017 18:19
Antworten mit Zitat
Benutzer-Profile anzeigen
hi ich weiß ich bin lange dabei und nun kommt genau diese frage.

blitzmax sollte ja den speicher automatisch freiräumen (arbeitsspeicher) ich musste immerwieder feststellen das mein "server" programm egal wie klein der server ist ( damit nehm ich bezug auf dieses thread
https://www.blitzforum.de/foru...hp?t=40857 ) nie den speicher geleert hat. also habe ich

Code: [AUSKLAPPEN]
GCSetMode( 1 )

am anfang meines progs gemacht. aber auch dies hat nich geholfen. nun bin ich ein schritt weiter gegangen ob es gut war oder nicht, genau das möchte ich nun herrausfinden.

dieses thread wird danach aufgerufen
Code: [AUSKLAPPEN]
Function FreeMem:Object (data:Object)
   Repeat
      GCCollect()
      Delay 1000
   Forever
End Function


der speicher schwillt nich mehr an, und dadurch bleibt das programm erhalten und wird nich beim speicher overflow von windows gekillt.

ich nutze die vertex.bnet lib (modul)

probleme am spielablauf konnte ich noch nich feststellen. so zurück zu meinen 2 fragen.

1. Was genau macht der befehl GCCollect
2. ist dies so sinvoll wie ich es gemacht habe?
Skype: Anarchie1984
http://projektworks.de/maxbase/
Icq - Erneuert am 21.08.2017
Yahoo - Erneuert am 21.08.2017

Thunder

BeitragSa, Nov 25, 2017 0:42
Antworten mit Zitat
Benutzer-Profile anzeigen
BNetEx managet seinen Speicher selbst unabhängig vom GC, d.h. dort könnte es einen Fehler geben. Glaube ich aber nicht, denn einerseits versucht BNetEx den speicher immer freizugeben, wenn es weniger braucht, andererseits würde es dann nichts bringen GCCollect aufzurufen.

Kompilierst du den Server mit Multithreading?
BlitzMax verwendet nämlich abhängig davon, ob man mit Multithreading oder ohne kompiliert einen anderen GC (multi-threaded -> mark and sweep, single-threaded -> reference counting).

Du kannst noch versuchen:
BlitzMax: [AUSKLAPPEN]
GCSetMode -1


Das ist glaube ich undokumentiert und schaltet den GC in einen aggressiven Modus. Wird wahrscheinlich die performance beeinträchtigen.

Zu deiner 1. Frage:
Multithreaded GC: https://github.com/blitz-resea...tz_gc_ms.c
Singlethreaded GC: https://github.com/blitz-resea...tz_gc_rc.c
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit

FireballFlame

Betreff: Re: GCCollect und seine funktion?

BeitragSo, Nov 26, 2017 3:28
Antworten mit Zitat
Benutzer-Profile anzeigen
GCSetMode 1 ist sinnlos, sofern du nicht vorher einen anderen Modus gesetzt hast. 1 ist die Standardeinstellung und bedeutet automatisches Sammeln. Mit GCCollect löst du explizit einen Durchlauf des Garbage Collectors aus. Normalerweise (und sofern du nicht GCSetMode 2 oder GCSuspend benutzt hast), passiert das von Zeit zu Zeit von allein und räumt dabei dann ungenutzten Speicher frei. GCCollect selbst aufzurufen kann in seltenen Fällen mal sinnvoll sein, das aber ständig in einer Schleife zu tun eigentlich nicht... theoretisch jedenfalls. Das was du hier beschreibst (Memory Leak bis zum Absturz, der durch manuelles Aufrufen des Collectors in einer Schleife plötzlich behoben wird) ist seltsam; allerdings ist mir dasselbe selbst schon in Java passiert, und gerade der BlitzMax-GC ist nicht dafür bekannt, sonderlich gut mit Multithreading zurechtzukommen. Falls du BlitzMax-NG hast, könntest du mal probieren, dein Programm damit zu kompilieren und zu schauen, ob dort der gleiche Effekt zu beobachten ist.
PC: Intel Core i7 @ 4x2.93GHz | 6 GB RAM | Nvidia GeForce GT 440 | Desktop 2x1280x1024px | Windows 7 Professional 64bit
Laptop: Intel Core i7 @ 4x2.00GHz | 8 GB RAM | Nvidia GeForce GT 540M | Desktop 1366x768px | Windows 7 Home Premium 64bit

Mathias-Kwiatkowski

BeitragSo, Nov 26, 2017 14:02
Antworten mit Zitat
Benutzer-Profile anzeigen
nein leider auch da gleicher fehler -bm-ng
und ja unlogisch ist es auch für meine vorstellung, aber ich beschreib hier echt das was mir passiert ist, ich muss dazu sagen mein server prog lief wochen monate stabiel, ohne probleme. auf einmal war es eben nich mehr so, ich hatte kein verständniss warum. habe die fehler bei mir gesucht tagelang. danach hat thunder die bnet gefixt, es lief wieder für stunden sehr gut, dann schloss sich das server programm ständig. ich hatte kein schimmer warum, irgendwann laggte mein gemieteter server, was unvorstellbar war, remout zugriff nich mehr gegeben, so das ich ihn in meiner admin konsole neustarten musste. dann mit remout zugriff mein prog gestartet und den task manager aufgerufen, und einfach alles beobachtet. und da viel es mir auf nach irgendwie > 2gb prog geschlossen. und ich fragte mich was passiert da, mein prog nutzt max 20mb arbeitsspeicher (wenn kein user drauf spielt).... darauf hin hab ich gegoogelt, habe eine interessante info auf eng erhalten, ich habe die url leider nich mehr aber da stand dann das bm probleme mit strings und buffer werten hätte. wieder darauf habe ich nach memory befehlen für bm gesucht. und habe GCCollect() gefunden Very Happy ... und einiges mehr, aber in meiner main schleife eben diesen eingebunden, kla cpu werte waren ohje. darum beschloss ich das im sek th zu setzen. cpu werte immernoch hoch, und da dachte ich mir und was passiert wenn ich es einmal in einer sek aufrufe... boom problem war gelöst. cpu wete auf dem gemieteten server sind stehts 0,2% bezüglich auf mein server prog. darauf hin beschloss ich das ich damit leben kann.


ob alles was ich getan habe richtig ist, bezweifel ich und würd es auch nich als dauerlösung ansehen, aber momentan hilft es das mein server rennt, das spiel somit funktioniert. und naja, bin erst mal zufriedengestellt.

laut dem was ich auf eng gelesen habe
Strings = gibts buffer probleme
Int Long Float = nicht

ich weise darauf hin das dieses problem mir so passiert ist, es betrifft wohlmöglich nich die algemeinheit. die infos die ich gelesen habe auf eng. müssen nicht der wahrheit entsprechen!
Skype: Anarchie1984
http://projektworks.de/maxbase/
Icq - Erneuert am 21.08.2017
Yahoo - Erneuert am 21.08.2017

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group