Some questions about garbage collector
Hello,
I am looking for information about garbage collector. I already looked at documentation but I could not find anything about it.
Here is some questions :
1) is there a garbage collector per process (each process has it's own memory and GC is done per process) or is it global (eg: shared memory) ?
I know there is some memory allocated per process at startup but also globally (gmheap).
2) when a GC / cleanup occurs somewhere, is it possible that it block the other processes for a short moment ? (eg: a "stop the world" GC that pause everything while job is being done).
3) is it possible to gather information about GC in portal or using some utility ? (Eg: number of GCs, how much time it took, ...).
Note : this question is not related to global buffers (which AFAIK is a totally different thing).
Comments
What is the actual concern, then?
From my experience on different systems with highload, I did not see effects, that could point to think about it.
The garbage collector is somewhat an internal process which is why I believe it is sparsely documented. I'd echo Dmitry that understanding your concern would help.
I think what is documented generally covers a high level understanding - that being that there is a GARCOL process. And that blocks are marked freed after a large kill by this process, to be freed in the background.
Echoing what Vic and Dmitry have mentioned. GARCOL cleans up large KILLs, so it's a database operation. Your post seems to ask a different question, akin to Java object garbage collection.
I've been quite surprised to see how much work gets done by IRIS processes with scant process memory; I suppose because it's so easy to use globals.
Understanding what you are experiencing and trying to do would help a lot.