In my case, the player has an attack that 'spawns' about 16 bullets per tick. These are pointed at random angles, and fired off at a constant speed. When they hit an enemy, or the edge of the screen, they are 'destroyed'. So, their 'lifetime' is pretty short, <1 second.
In short: Bullets start offscreen, inactive. They go back offscreen when 'destroyed'. For 'spawning', I move them onscreen and reorient them.
If I hold down on this attack button on a blank screen, I get a maximum onscreen count of ~1500 bullets.
Here's a thread with more discussion of this:
Your game looks awesome BTW.