MDX = malloc() + free() + Garbage Collection
Pool Background Thread Starvation
If a pool's background thread doesn't get enough CPU time, then not enough garbage collection will occur. In this situation, as the collector falls ever more behind in it's work, the amount of memory that it should have freed but hasn't slowly builds up. Correspondingly, the process's use of the system's memory resources steadily increases. It is, for all practical purposes, as if there's a memory leak.
The extremely limited experience available with MDX so far suggests that this problem may be rarely encountered in practice. This fits with the observation that other systems using garbage collection, such as Java and dotNET, spend only a very small fraction of their CPU time collecting garbage. Suggesting that, in most situations, the pool background thread's CPU time requirement is likely to be small enough that it probably won't be starved.
If this problem occurs, it can be ameliorated by increasing the pool background thread's priority.
The pool thread's started by the createPool() method, and runs by default at the same priority as the thread calling createPool(). So, to set the pool thread's priority, set the priority of the thread calling createPool() to the desired priority before calling createPool().