How much memory can a bot use?
The highlighted comment was created in this revision.
Hi mates. I'm playing with my new bot right now and it turned out he use quite a lot of memory. After a couple of rounds the client heap is full and things start to get very "strange". That leads me to the question: How much memory can a bot use? Is it restricted/shared in some way or can just one bot take all memory? It turned out that my test against Diamond and DrussGT leads to huge skipped turn counts on these bots but my bot is still fine (he just use memory like nothing in his current develop state to save on the cpu side).
Take Care
Memory isn't restricted per bot like CPU, so you can use all you want. But if your bot uses way more than its share, people's clients will crash only on battles with your bot and you'll get a lot of complaints. :-) I'd say your bot should be able to battle itself without ever causing OutOfMemory errors.
Do Diamond/DrussGT get the same amount of skipped turns if you pit them against each other, or themselves? I've definitely seen some cumulative CPU load effect on skipped turns - eg, Diamond is less likely to skip turns against Sample Bots than against DrussGT. Some amount of skipped turns is not a huge deal. How many are being skipped? Your high memory usage could lead to increased garbage collection, which I think would count against your bot's CPU time, but that (a bot using a lot of CPU) can also cause a few skipped turns for the other bot in my experience.
Hmm ... 1vs1 is no problem for my bot even against himself. But if it comes to melee it looks different ,because i have to hold combat data of 9 bots. Right now it uses almost 500 MB against a full melee field. But it is not finished yet and i guess i can bring it to 300 MB or less. I was a little surprised that not every bot can use the same memory share.
My test run is with DrussGT/Diamond/Me/ + usual sample bots. After a couple of rounds the memory was near 500 MB and the garbage collection worked very frequently. At this time both bots skipped turns like nothing. Diamond got disabled in 3 rounds and DrussGT had 150+ skipped turns. If i run both bots + samples without me, everything is fine (i have never seen both bots doing this and i use they quite often for tests). My bot got no skipped turn and showed no unusual behavior (beside the memory usage).
My guess is that the garbage collection counts against all bot times because it happens in background and is not related to one bot alone. If you have a bot that is near his cpu limit he will start to skip turns every time the garbage collection kicks in. My bot uses almost no cpu he just grabs the results from some HashMaps and so it got no skipped turns. Just a rough guess right now ... i'm a little sleepy right now and i will observe this a little in the future.
Hmm, that's a little scary that Diamond got disabled. =) Btw, DrussGT doesn't know anything about Melee so I wouldn't use it for Melee testing (maybe you meant Neuromancer?). I'm not really sure how much memory Diamond uses in Melee or if 10 Diamonds would run out of memory at 512 megs or not. He does push the CPU time a little by the end of the match with the amount of processing going on in the gun, though. Getting disabled early in the match would be very surprising to me indeed.