gLUA engine details

Garrysmod uses NOT lua, but lua-jit.

This can be confirmed via benchmarks and also the available jit commands like:

This means that the "2 - Lua Performance Tips" pdf and the lua-users "Optimisation Tips" articles are not always correct.

For some benchmarks between lua and lua-jit you can visit

gLUA is lua-jit expanded with a few custom functions. That's why others and myself call it "gLUA", because it has noticable differences to other lua implementations.
A good rule of thumb for detecting custom garrysmod lua functions and default lua functions: If the function of a module, e.g. math.Distance, starts with a capital letter then it is a custom garrysmod function.

gLUA is also single-threaded and the main execution thread of the gmod "runtime".
If you run a very expensive function in a for loop on a client then the game becomes unresponsive and freezes.
If you have unoptimised functions on a server then the whole server is going to lag.

As far as I know:
If the server receives a http response or a net message it will put them in a queue and execute them during the next tick.
This means that if 20 players send a net message at the same time the server will execute the net.Receive function 20 times in the next tick, which could create a stutter or small lag (=teleport back) for players if it takes a long time. This is because of the serial nature of the source engine and glua.

The binding of source engine to LUA is done via hooks.
The source engine calls a hook, e.g. serversided PlayerSay, whenever such an event, e.g. a player sends a chat message, happens ingame.
This also means, if a hook runs way too long and gets called very often, that the engine waits for the response and thus starts to lag. This can be easily observed if you have a very long sql.Query in a net.Receive function on the server: The whole server freezes until the database returns the result. (This problem happened with luctus_logs in the beginning but is fixed since beta)

Max RAM usage

This was tested on a 32bit installation of garry's mod.
Random strings were assigned in a loop until gmod returned [ERROR] not enough memory errors when assigning more variables.
All these values are the return value of collectgarbage("count") which is the "kilobytes of memory used by Lua". (quoted from the wiki)

These are the values where any new assignment returns a "not enough memory" error.
A manual garbage collection will not help in these situations as the GC runs regularly anyways.