allocate once, reuse forever
A pool creates a fixed set of objects once and reuses them instead of creating a new one for every bullet. In C# or JavaScript each discarded object becomes garbage, and the garbage collector pauses the game to clean it up. The top lane stalls on those pauses while the pooled lane recycles the same 14 slots.
Use an object pool for bullets and particles: preallocate the peak count up front, take an inactive instance and reset its fields on spawn, mark it inactive on death instead of destroying it, and log a warning if the pool ever runs out.